MS 图 API Oauth2PermissionGrants 无法授予角色

MS graph API Oauth2PermissionGrants cannot grant roles

使用下面的代码,我可以第一次批准给予管理员同意。 但是当我第二次调用代码时。代码returns错误。

示例:

我可以在第一次请求时授予 User.Read.All 访问权限。 但是当我想为第二个角色授予管理员许可时 AccessReview.Read.All 请求给出了以下错误

代码

 IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create("Client ID")
                .WithClientSecret("Client Secret")
                .WithTenantId("Tenant ID")
                .Build();



            string scopes = "https://graph.microsoft.com/.default";
            ClientCredentialProvider authProvider = new ClientCredentialProvider(app, scopes);
            Beta.GraphServiceClient graphClient = new Beta.GraphServiceClient(authProvider);

            Beta.OAuth2PermissionGrant test = new Beta.OAuth2PermissionGrant { ClientId = model.clientId, ConsentType = model.consentType, ExpiryTime = model.expiryTime, ResourceId = model.resourceId, Scope = model.scope };
            var response = await graphClient.Oauth2PermissionGrants
                .Request()
                .AddAsync(test);

            return response.ToString();

错误

Status Code: Conflict
Microsoft.Graph.ServiceException: Code: Request_MultipleObjectsWithSameKeyValue
Message: Permission entry already exists.
Inner error:
    AdditionalData:
    request-id: b9e44bc2-7588-4390-a3ca-9abdc213d930
    date: 2020-04-23T19:43:03
ClientRequestId: b9e44bc2-7588-4390-a3ca-9abdc213d930

您不能添加两次相同的权限授予,正如错误消息所说,permission entry already exists。如果要更新权限授予,可以使用update方法:

var oAuth2PermissionGrant = new OAuth2PermissionGrant
{
    Scope = "scope-value"
};

await graphClient.OAuth2Permissiongrants["{id}"]
    .Request()
    .UpdateAsync(oAuth2PermissionGrant);

参考:

https://docs.microsoft.com/en-us/graph/api/oauth2permissiongrant-update?view=graph-rest-beta&tabs=http

我发现了问题。 图 API 根据同意类型为 Oauth Grant 权限创建单个对象。 因此,对于第一个请求,调用 post 请求以授予访问权限。 但是对于第二个请求,使用补丁命令

更新对象
var oAuth2PermissionGrant = new OAuth2PermissionGrant
{
    Scope = "scope-value"
};

await graphClient.OAuth2Permissiongrants["{id}"]
    .Request()
    .UpdateAsync(oAuth2PermissionGrant);

注: 在 patch 命令中添加您已授予访问权限和想要授予访问权限的范围。 如果您只添加您想要授予访问权限的范围,那么之前的范围授予访问权限将被撤销,只有新角色将具有授予访问权限。