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);
参考:
我发现了问题。
图 API 根据同意类型为 Oauth Grant 权限创建单个对象。
因此,对于第一个请求,调用 post 请求以授予访问权限。
但是对于第二个请求,使用补丁命令
更新对象
var oAuth2PermissionGrant = new OAuth2PermissionGrant
{
Scope = "scope-value"
};
await graphClient.OAuth2Permissiongrants["{id}"]
.Request()
.UpdateAsync(oAuth2PermissionGrant);
注:
在 patch 命令中添加您已授予访问权限和想要授予访问权限的范围。
如果您只添加您想要授予访问权限的范围,那么之前的范围授予访问权限将被撤销,只有新角色将具有授予访问权限。
使用下面的代码,我可以第一次批准给予管理员同意。 但是当我第二次调用代码时。代码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);
参考:
我发现了问题。 图 API 根据同意类型为 Oauth Grant 权限创建单个对象。 因此,对于第一个请求,调用 post 请求以授予访问权限。 但是对于第二个请求,使用补丁命令
更新对象var oAuth2PermissionGrant = new OAuth2PermissionGrant
{
Scope = "scope-value"
};
await graphClient.OAuth2Permissiongrants["{id}"]
.Request()
.UpdateAsync(oAuth2PermissionGrant);
注: 在 patch 命令中添加您已授予访问权限和想要授予访问权限的范围。 如果您只添加您想要授予访问权限的范围,那么之前的范围授予访问权限将被撤销,只有新角色将具有授予访问权限。