Azure允许您通过修改清单来定义AD租户的自定义角色:
"appRoles": [
{
"allowedMemberTypes": [
"User"
],
"description": "Admins can manage roles and perform all actions.",
"displayName": "Global Admin",
"id": "some GUID",
"isEnabled": true,
"value": "Admin"
}, ... ],
并且,根据msdn azure graph api reference,您可以使用图形api以编程方式将用户分配给自定义角色。但是我在创建新用户并尝试使用AppRoleAssignment
分配角色时无法正常工作。我认为问题在于我需要定义用户的ID,但是一旦创建了用户,就会由Azure定义,这也意味着在创建时将用户分配给角色是不可能的,而且只能完成一旦用户被添加到目录中?下面是我用来分配角色的代码片段。
var appRoleAssignment = new AppRoleAssignment();
appRoleAssignment.Id = Guid.Parse("some-guid-here");
appRoleAssignment.ResourceId = Guid.Parse(clientId);
appRoleAssignment.PrincipalId = ??? // what should go here for a user that hasn't been created yet ?
答案 0 :(得分:1)
清除appRoleAssignments,appRoleAssignedTo将让我们了解用户角色,应用角色,用户,应用程序的关系。
1)可以将应用程序分配给用户应用程序角色。打开 名为" ADlinglitest"的应用程序的用户选项:
致电:https://graph.windows.net/Tenantid/users/lingliad01@lingliad.onmicrosoft.com/appRoleAssignments?api-version=1.5
获取结果:
致电:https://graph.windows.net/tenantid/servicePrincipals/servicePrincipalsobjectid/appRoleAssignedTo?api-version=1.5
,您将看到3个已分配的用户。
2)可以将用户分配给应用程序作为用户角色,组,应用程序也可以作为角色分配给应用程序。
"appRoles": [
{
"allowedMemberTypes": [
"User"
],
"description": "Admins can manage roles and perform all actions.",
"displayName": "Global Admin",
"id": "7c93906c-71fa-4e5b-b1da-21b073d298fd",
"isEnabled": true,
"value": "Admin"
}
]
致电:https://graph.windows.net/tanantid/servicePrincipals/serviceprincipalobjectid/appRoles?api-version=1.5
获取结果:
如果您不了解objectid,请致电https://graph.windows.net/tanantid/servicePrincipals?api-version=1.5
以获取您的申请的SP目标。
3)如您所说"用户角色分配",实际上缺少方法userRoleAssignedTo
,如果用户被分配给应用程序作为用户角色,我们可以通过{查询应用程序infor {1}}。
这确实很容易让人感到困惑。
答案 1 :(得分:0)
如果没有标识符,则无法分配角色。创建用户时会创建对象和标识符。
答案 2 :(得分:0)
我找不到关于在Azure官方文档中将用户分配给应用程序角色的C#代码。我只能看到Powershell和Rest api方法。
Powershell的:
New-AzureRmRoleAssignment -ObjectId <application id> -RoleDefinitionName <role name in quotes> -Scope <subscription id>
REST API:
PATCH - https://graph.windows.net/tenantid/application/clientid?api-version=1.5
BODY应该喜欢这个,id是用户的目标:
{
“appRoles”: [
{
“allowedMemberTypes”: [
“User”, “Application”
],
“description”: “Dentists may create, update and delete patient’s health records”,
“displayName”: “Dentist”,
“id”: “31952ade-a03c-414c-8340-2f11e9099106″,
“isEnabled”: true,
“value”: “dentist”
}
]
在C#示例中使用api:
AuthenticationContext ac =
new AuthenticationContext("https://login.microsoftonline.com/tenantid");
AuthenticationResult ar =
ac.AcquireToken("https://graph.windows.net",
new ClientCredential(Constants.ClientId, Constants.ClientSecret));
string result = string.Empty;
HttpClient httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", ar.AccessToken);
HttpResponseMessage response =
httpClient.PostAsync("https://graph.windows.net/tenantid/application/clientid?api-version=1.5","json/body").Result;
if (response.IsSuccessStatusCode)
{
result = response.Content.ReadAsStringAsync().Result;
}
Console.WriteLine(result);
Console.ReadLine();