问题描述
我有一个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();