访问令牌中的 Azure Entra ID 自定义数据

问题描述 投票:0回答:1

可能是愚蠢的问题,但我无论如何都会问 - 在通过使用客户端凭据流调用 entra id 令牌端点生成令牌时,有没有办法将自定义数据添加到访问令牌? 客户端调用时类似于伪代码 https://login.microsoftonline.com/xxx/oauth2/v2.0/token 身体={ myCustomValue:“随便” } 我会收到一个令牌,它会神奇地包含一个价值为“无论什么”的声明......

感谢您的任何意见

oauth-2.0 azure-active-directory
1个回答
0
投票

请注意,不支持向使用客户端凭据流生成的令牌添加自定义声明。请参阅 Shweta Mathur 的 MS 问答

或者,切换到

委托流程,例如授权码流程或交互流程,其中用户需要至少登录一次。

首先,通过运行以下示例 Microsoft Graph PowerShell 脚本创建一个

声明映射策略并获取其策略 ID:

#Install-Module Microsoft.Graph Connect-MgGraph -Scopes "Policy.ReadWrite.ApplicationConfiguration,Policy.ReadWrite.ConditionalAccess,Policy.Read.All,Application.ReadWrite.All,User.ReadWrite.All" $policyDefinition = @{ definition = '{ "ClaimsMappingPolicy": { "Version": 1, "IncludeBasicClaimSet": true, "ClaimsSchema": [ {"Source": "user", "ID": "extensionattribute1", "SamlClaimType": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/myCustomValue", "JwtClaimType": "myCustomValue"} ] } }' displayName = "CustomClaim" } $Policy = New-MgPolicyClaimMappingPolicy -BodyParameter $policyDefinition Get-MgPolicyClaimMappingPolicy -ClaimsMappingPolicyId $Policy.Id | fl

回复:

enter image description here

现在,将此策略分配给您使用以下命令生成令牌的

服务主体

$servicePrincipalId = "spObjectId" $policyId = "policyId" $params = @{ "@odata.id" = "https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies/$policyId" } New-MgServicePrincipalClaimMappingPolicyByRef -ServicePrincipalId $servicePrincipalId -BodyParameter $params Get-MgServicePrincipalClaimMappingPolicy -ServicePrincipalId $servicePrincipalId | fl

回复:

enter image description here

现在,通过运行以下命令更新用户属性中的

myCustomValue 声明值:

$userId = "userId" $params = @{ onPremisesExtensionAttributes = @{ extensionAttribute1 = "myOwnValue" } } Update-MgUser -UserId $userId -BodyParameter $params

enter image description here

在您的应用程序注册中,公开 API 并在其中添加

自定义范围,如下所示:

enter image description here

确保在应用程序注册清单中

启用以下设置:

enter image description here

在生成访问令牌之前,不要错过添加并同意自定义 API 权限,如下所示:

enter image description here

使用授权代码生成访问令牌时,请确保使用

scope 值作为 api://appId/access_as_user

授权请求:

https://login.microsoftonline.com/tenantId/oauth2/v2.0/authorize? client_id=appId &response_type=code &redirect_uri=https://jwt.ms &response_mode=query &scope=api://appId/access_as_user &state=12345

enter image description here

令牌请求:

POST https://login.microsoftonline.com/tenantId/oauth2/v2.0/token client_id:appId client_secret:secret grant_type:authorization_code scope: api://appId/access_as_user code:code redirect_uri: https://jwt.ms

enter image description here

当我在

jwt.ms 网站中解码上述令牌时,其中有 自定义声明,如下所示:

enter image description here

参考:

将组织结构图添加到Azure Active Directory令牌声明 - 堆栈内存溢出

© www.soinside.com 2019 - 2024. All rights reserved.