hal*_*ing 6 sharepoint azure access-token jwt azure-active-directory
我有一个 Azure AD 应用程序,我正在尝试向 JWT 添加自定义声明。我将 Azure 中的声明映射功能用于我的特定应用程序,并更新了 Azure 门户中的应用程序清单以包含可选声明。但是,当我登录并查看解码的访问令牌时,令牌中不存在该声明。我没有找到太多与使用扩展属性作为声明相关的文档,但从我发现它应该遵循相同的模式,但它没有按预期工作。
当用户登录时,如何将源自 AD 中用户对象中的自定义属性的自定义声明添加到 JWT?
提前致谢!
要求:
POST https://graph.windows.net/mytenant.onmicrosoft.com/applications/<application-object-id>/extensionProperties?api-version=1.5
身体:
{
"name": "customUserRoles",
"dataType": "String",
"targetObjects": ["User"]
}
Run Code Online (Sandbox Code Playgroud)
要求:
PATCH https://graph.windows.net/mytenant.onmicrosoft.com/users/user123@mytenant.onmicrosoft.com?api-version=1.5
身体:
{
"extension_<appId>_customUserRoles": "My Custom Role 1, Another Role 2"
}
Run Code Online (Sandbox Code Playgroud)
Install-Module -Name AzureADPreviewNew-AzureADPolicy -Definition @('{"ClaimsMappingPolicy":{"Version": 1, "IncludeBasicClaimSet": "true", "
ClaimsSchema": [ { "Source": "user", "ID": "extension_<appId>_customUserRoles", "JwtClaimType": "customUserRoles" } ] } }') -DisplayName "customUserRoles" -Type "ClaimsMappingPolicy"
Run Code Online (Sandbox Code Playgroud)
Add-AzureADServicePrincipalPolicy -Id <service-principla-id> -RefObjectId <azure-ad-policy-id>
Run Code Online (Sandbox Code Playgroud)
{
...
"acceptMappedClaims: true,
"optionalClaims": {
"idToken": [
{
"name": "extension_<appId>_customUserRoles",
"source": "user",
"essential": false,
}
],
"accessToken": [
{
"name": "extension_<appId>_customUserRoles",
"source": "user",
"essential": false,
}
],
"samlToken": []
}
}
Run Code Online (Sandbox Code Playgroud)
https://login.microsoftonline.com/mytenant.onmicrosoft.com/oauth2/authorize?client_id=<appId>&response_type=token&resource=https://mytenant.sharepoint.comAzure AD 用户帐户并使用该帐户登录user123@mytenant.onmicrosoft.comaccess_token参数的值https://jwt.ms访问令牌并将其粘贴到文本区域中我的期望是我应该在解码的令牌中看到一个名为customUserRoles或的新声明extn.customUserRoles。
我缺少哪些步骤?在整个过程中我没有遇到任何错误,但它似乎没有按照文档建议的那样工作。
我已阅读有关这些主题的 Microsoft 文档:
可选声明:https : //docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-optional-claims
声明映射:https : //docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-claims-mapping
我还阅读了与此相关的各种论坛帖子和博客文章:
https://devonblog.com/cloud/azure-ad-adding-employeeid-claims-in-azure-ad-jwt-token/
基于这个官方文档:
访问令牌始终使用资源清单(而不是客户端)生成。因此,在请求 ...scope= https://graph.microsoft.com/user.read ... 中,资源是 Graph。因此,访问令牌是使用图形清单而不是客户端清单创建的。更改应用程序的清单永远不会导致 Graph 的令牌看起来不同。为了验证您的 accessToken 更改是否生效,请为您的应用程序(而不是其他应用程序)请求令牌。
根据您的要求,如果您想对访问令牌进行一些更改(该资源是 sharepoint online,这是一个由 MSFT 创建和管理的多租户应用程序),这是不可能的。
对于这篇文档,我也为大家做了一些研究。同样,您应该控制服务端应用程序,以便实现这一目标。
这是我的策略角色分配命令:
$nsp = New-AzureADPolicy -Definition @('{"ClaimsMappingPolicy":{"Version":1,"IncludeBasicClaimSet":"true", "ClaimsSchema": [{"Source":"user","ID":"mailnickname","JwtClaimType":"testclaim"}]}}') -DisplayName "StanCustomCliamDemo_surname" -Type "ClaimsMappingPolicy"
Add-AzureADServicePrincipalPolicy -RefObjectId $nsp.Id -Id '<obj id of service side app>'
Run Code Online (Sandbox Code Playgroud)
另外,请注意这extension_<appId>_customUserRoles不是有效的用户源 ID。所有有效的用户来源ID,请参考这里。
希望能帮助到你 。
| 归档时间: |
|
| 查看次数: |
8520 次 |
| 最近记录: |