【问题标题】:Microsoft Graph Check user consentMicrosoft Graph 检查用户同意
【发布时间】:2023-01-07 04:40:32
【问题描述】:

我想知道 Microsoft 的 GraphServiceClient 如何检查用户同意/范围(如果可能)。

示例 我需要我的 C# 应用程序中的当前用户同意 user.read 和 calendar.readwrite.shared,但我不知道如何检查。

我怎样才能做到这一点?

【问题讨论】:

    标签: c# microsoft-graph-api


    【解决方案1】:

    我想您的应用程序将 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 端点。

    现在合并来自scopescope2 属性的权限。

    【讨论】:

    • 谢谢,很奇怪,因为我在developer.microsoft.com/en-us/graph/graph-explorer(Calendars.Read、Calendars.Read.Shared Calendas.ReadWrite 和 Calendars.ReadWrite.Shared)中拥有所有日历,但我只在我的权利中检索 User.Read ...
    • 合并 scope 和 scope2 是什么意思?因为在 allOauth2PermissonGrant 中,你只放了第二个范围权限。第一次调用非常需要,或者可以通过第二个 oauth2PermissionGrants 请求检查用户同意?
    • 警告是我认为我不应该使用“AllPrincipals”权限吗?因为我不使用模拟,而只是基于租户的委托 client_id 并且当前用户的同意记录在我的应用程序中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多