使用 Graph API 以编程方式将用户分配给 Azure AD 应用程序
Programmatically assign users to Azure AD Application using Graph API
我正在尝试编写脚本以使用 Graph API 将用户分配给 Azure AD 应用程序 (servicePrincipal)。我正在我的沙箱中对此进行测试,我已经在沙箱中定义了应用程序并将用户分配给它。但是,当我查询 servicePrincipal
时,我在响应中的任何地方都看不到用户。
问题:
在documentation的基础上,不应该有appRoleAssignment
吗?
文档说这个字段是只读的,那么你应该如何分配用户?
查询Graph时可以通过导航属性获取用户的appRoleAssignments
API:
https://graph.windows.net/tenant-id/users/user-id/appRoleAssignments?api-version=1.6
您可以通过向以下地址发送 HTTP POST 来创建作业:
https://graph.windows.net/tenant-id/users/user-id/appRoleAssignments?api-version=1.6
您需要发送的对象如下所示:
{
"id": "id-of-role",
"principalId": "objectId-of-user",
"resourceId": "objectId-of-service-principal"
}
如果你的应用没有任何角色,但你仍然想分配一个用户,看来你可以将id设置为全零:
Where the resource does not declare any permissions, a default id (zero GUID) must be specified.
所以像这样:
{
"id":"00000000-0000-0000-0000-000000000000",
"resourceId": "a27d8321-3dc6-44a1-bf19-2546a9f2806e",
"principalId": "c4f810b8-2ea1-4580-9595-30275a28c2a2"
}
接受的答案现在有点过时了。
您需要的 URL 是:
https://graph.microsoft.com/v1.0/<tenantID>/users/<userObjectID>/appRoleAssignments
发送内容为:
的 HTTP POST
{
"principalId": "<objectId-of-user>",
"resourceId": "<objectId-of-service-principal>",
"principalType": "User",
"appRoleId": "<id of role>"
}
最简单的测试方法是通过 Microsoft Graph Explorer
或者我这样做的方式是通过 bash 脚本,调用 azure cli
cat <<- EOF > roleAssignment.json
{
"appRoleId": "${UUID}",
"principalId": "{$USER_ID}",
"principalType": "User",
"resourceId": "${SP}"
}
EOF
az rest --method post --headers Content-type="application/json" --url "https://graph.microsoft.com/v1.0/${TENANT_ID}/users/${USER_ID}/appRoleAssignments" --body @roleAssignment.json
我正在尝试编写脚本以使用 Graph API 将用户分配给 Azure AD 应用程序 (servicePrincipal)。我正在我的沙箱中对此进行测试,我已经在沙箱中定义了应用程序并将用户分配给它。但是,当我查询 servicePrincipal
时,我在响应中的任何地方都看不到用户。
问题:
在documentation的基础上,不应该有
appRoleAssignment
吗?文档说这个字段是只读的,那么你应该如何分配用户?
查询Graph时可以通过导航属性获取用户的appRoleAssignments
API:
https://graph.windows.net/tenant-id/users/user-id/appRoleAssignments?api-version=1.6
您可以通过向以下地址发送 HTTP POST 来创建作业:
https://graph.windows.net/tenant-id/users/user-id/appRoleAssignments?api-version=1.6
您需要发送的对象如下所示:
{
"id": "id-of-role",
"principalId": "objectId-of-user",
"resourceId": "objectId-of-service-principal"
}
如果你的应用没有任何角色,但你仍然想分配一个用户,看来你可以将id设置为全零:
Where the resource does not declare any permissions, a default id (zero GUID) must be specified.
所以像这样:
{
"id":"00000000-0000-0000-0000-000000000000",
"resourceId": "a27d8321-3dc6-44a1-bf19-2546a9f2806e",
"principalId": "c4f810b8-2ea1-4580-9595-30275a28c2a2"
}
接受的答案现在有点过时了。 您需要的 URL 是:
https://graph.microsoft.com/v1.0/<tenantID>/users/<userObjectID>/appRoleAssignments
发送内容为:
的 HTTP POST{
"principalId": "<objectId-of-user>",
"resourceId": "<objectId-of-service-principal>",
"principalType": "User",
"appRoleId": "<id of role>"
}
最简单的测试方法是通过 Microsoft Graph Explorer
或者我这样做的方式是通过 bash 脚本,调用 azure cli
cat <<- EOF > roleAssignment.json
{
"appRoleId": "${UUID}",
"principalId": "{$USER_ID}",
"principalType": "User",
"resourceId": "${SP}"
}
EOF
az rest --method post --headers Content-type="application/json" --url "https://graph.microsoft.com/v1.0/${TENANT_ID}/users/${USER_ID}/appRoleAssignments" --body @roleAssignment.json