我应该使用什么OAuth流程来获取聊天消息?

问题描述

我有一个Daemon应用程序,我已经在azure门户上设置了正确的应用程序权限,并且 我正在尝试使用带有ClientCrediantialsFlow的/ user / {id} / chats / {id} / messages / {id}获取聊天消息 问题是,执行此操作时出现内部错误。当我尝试只吸引用户时,我得到的一切都是,但Chats为空。 我使用了错误的OAuth流吗? 我需要能够通过聊天ID(我通过订阅/ chats / allMessages获得)来获取任何用户的消息。

这是我创建GraphServiceClient的方式:

        private GraphServiceClient GetGraphClientAsync()
        {
            string[] graphScopes = { "https://graph.microsoft.com/.default" };
            IConfidentialClientApplication app = ConfidentialClientApplicationBuilder
            .Create(clientId)
            .WithAuthority(string.Format(AuthorityFormat,tenantId))
            .WithClientSecret(secret)
            .Build();
            ClientCredentialProvider authProvider = new ClientCredentialProvider(app);
            var graphClient = new GraphServiceClient(authProvider);
            graphClient.BaseUrl = "https://graph.microsoft.com/beta";
            return graphClient;
        }

一个更新: 我使用带有OAuth 2.0 ClientCredentials的邮递员(使用Microsoft Graph Postman Collection)来获取令牌,然后尝试获取带有令牌的消息,再次被禁止使用403。

解决方法

您使用的OAuth流不正确,客户端凭据流将起作用。

OAuth 2.0客户端凭据流仅适用于应用程序权限,并且MS Graph支持中的ChatMessages使用基于您共享的MS Document的应用程序权限。

请使用客户端凭据流程完成.net sample,该流程可帮助您轻松实施解决方案。

,

您必须向您的应用程序授予应用程序权限,并获得管理员同意

代码:

GraphServiceClient graphClient = new GraphServiceClient( authProvider );

var chat = await graphClient.Users["{id}"].Chats["{id}"]
    .Request()
    .GetAsync();