客户端 ID 令牌中的 Entra 外部 ID 自定义声明不在 ASP.NET Core Web API 用户的 ClaimsPrincipal 中

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

我已经设置了一个 Entra 外部 ID 租户并注册了两个应用程序“前端”和“后端”。前端是 Angular 应用程序,后端是 ASP.NET Core 应用程序。

到目前为止,我可以对客户端进行身份验证,并从 Web API 控制器中的声明中读取用户的角色,如下所示:

var user = (HttpContext.User.Identity as ClaimsIdentity);
if(user == null){
    return Array.Empty<RolesEnum>();
}
var roles = user.Claims.Where(claim => claim.Type == ClaimTypes.Role)

我为我的用户创建了一个自定义属性,并通过 Microsoft.Graph 设置了它。当我在前端的 ID 令牌中包含自定义属性时,Angular 应用程序将在从 MSAL 库返回的用户对象中找到 ID 令牌。

我在服务器端需要此值,但承载令牌不包含此值,即使我为令牌类型“Access”配置自定义属性也是如此。

我是否理解正确,我的后端应用程序的 Token 配置实际上是用于后端和其他服务之间的通信?

为什么这个自定义属性不在 Access Token 中(是不记名 Token?),即使我这样配置?

enter image description here

azure azure-ad-msal microsoft-entra-id microsoft-entra-external-id
1个回答
0
投票

我创建了两个 Microsoft Entra ID 应用程序和

BackEnd
FrontEnd
:

BackEnd
中,我公开了 API 并添加了范围:

enter image description here

FrontEnd
中,我授予了API权限,如下所示:

enter image description here

并创建了自定义属性并通过 Microsoft Graph API 分配给用户。

FrontEnd
中,在Token配置刀片中添加了自定义属性:

enter image description here

并使用以下参数通过 Postman 生成令牌

Grant type: Authorization code 

Callback URL: https://oauth.pstmn.io/v1/callback
Auth URL:  https://login.microsoftonline.com/TenantId/oauth2/v2.0/authorize
Token URL : https://login.microsoftonline.com/TenantId/oauth2/v2.0/token
Client ID : FrontEndClientID
Client Secret : ClientSecret
Scope: api://BackEndClientID/access.app

enter image description here

并且遇到了与您相同的问题,自定义声明显示在 ID 令牌中而不是访问令牌中。

注意:要在访问令牌中显示自定义声明,您需要为应用程序生成令牌。请参阅MsDoc

因此要解决问题,您需要通过传递

BackEnd
应用程序ObjectID来创建扩展:

POST https://graph.microsoft.com/v1.0/applications/BackEndappObjID/extensionProperties
Content-type: application/json

{
    "name": "PersonID",
    "dataType": "String",
    "targetObjects": [
        "User"
    ]
}

enter image description here

将值分配给用户:

PATCH https://graph.microsoft.com/v1.0/users/UPN
Content-type: application/json

{
  "extension_XXX_PersonID": "XXX"
}

现在在

BackEnd
应用程序中,配置 选项声明:

enter image description here

我再次生成了令牌,现在 ID 和访问令牌都成功了:

访问令牌:

enter image description here

ID令牌:

enter image description here

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