【发布时间】:2023-01-07 04:40:32
【问题描述】:
我想知道 Microsoft 的 GraphServiceClient 如何检查用户同意/范围(如果可能)。
示例 我需要我的 C# 应用程序中的当前用户同意 user.read 和 calendar.readwrite.shared,但我不知道如何检查。
我怎样才能做到这一点?
【问题讨论】:
我想知道 Microsoft 的 GraphServiceClient 如何检查用户同意/范围(如果可能)。
示例 我需要我的 C# 应用程序中的当前用户同意 user.read 和 calendar.readwrite.shared,但我不知道如何检查。
我怎样才能做到这一点?
【问题讨论】:
我想您的应用程序将 client_id (application id) 存储在 json 配置中。
您可以检索 oAuth2PermissionGrant 实体的列表,这些实体表示授予客户端应用程序代表用户访问 API 的委派权限,如下所示
var oauth2PermissionGrants = await graphClient.Me.Oauth2PermissionGrants
.Request()
.GetAsync();
var oauth2PermissionGrant = oauth2PermissionGrants
.FirstOrDefault(x => x.ClientId == "{client_id_from_config}");
var scope = oauth2PermissionGrant.Scope;
Scope 属性是以空格分隔的范围名称列表。
许可类型属性设置为 Principal,表示这些权限仅授予特定用户。
此处未列出授予所有用户的权限,您需要再次调用以获取授予所有用户的特定应用程序的权限。
var allOauth2PermissionGrants = await graphClient.Oauth2PermissionGrants
.Request()
.Filter("consentType eq 'AllPrincipals' and clientId eq '{client_id_from_config}'")
.GetAsync();
var allOauth2PermissionGrant = oauth2PermissionGrants.FirstOrDefault();
var scope2 = allOauth2PermissionGrant.Scope;
您需要 DelegatedPermissionGrant.ReadWrite.All 权限才能使用 /oauth2PermissionGrants 端点。
现在合并来自scope 和scope2 属性的权限。
【讨论】: