API MS graph Oauth2PermissionGrants не может предоставлять роли - PullRequest
1 голос
/ 23 апреля 2020

Используя приведенный ниже код, я могу подтвердить, что впервые даю согласие администратора. Но когда я вызываю код во второй раз. Код возвращает ошибку.

Пример:

Я могу предоставить доступ для 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

Ответы [ 2 ]

2 голосов
/ 24 апреля 2020

Нельзя добавить одно и то же разрешение дважды, как сказано в сообщении об ошибке, permission entry already exists. Если вы хотите обновить разрешение, вы можете использовать метод обновления:

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

1 голос
/ 24 апреля 2020

Я нашел проблему. Graph API создает один объект для разрешения Oauth Grant на основе типа согласия. Следовательно, для первого запроса вызовите почтовый запрос для предоставления доступа. Но для второго запроса обновите объект с помощью команды исправления

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

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

Примечание: Добавьте области, к которым у вас есть доступ, и к которым вы хотите предоставить доступ в команде исправления. Если вы добавите только область, к которой вы хотите предоставить доступ, то предыдущие права доступа будут отменены, и только новая роль будет иметь доступ.

...