Azure AD / Entra ID:获取访问令牌中应用程序的名称

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

我正在使用 Microsoft Azure Entra ID 使用客户端凭据流程根据我的 API 对后台应用程序进行身份验证。

var clientId = "GUID1";
var authority = "https://login.microsoftonline.com/GUID2";
var secret = "VerySecret";
var scope = new[] { "api://GUID3/.default" };

var app = ConfidentialClientApplicationBuilder.Create(clientId)
    .WithAuthority(authority)
    .WithClientSecret(secret)
    .Build();
    
var authResult = await app.AcquireTokenForClient(scope).ExecuteAsync();

var token = new JwtSecurityTokenHandler().ReadJwtToken(authResult.AccessToken);
new ClaimsIdentity(token.Claims).Dump();

身份验证过程运行良好。 但是,我想从令牌中获取应用程序名称,但它没有

name
声明,仅存在
appid
oid
,它们是应用程序注册和托管企业应用程序的 ID。

我尝试将

upn
声明添加为可选令牌,但由于
upn
是用户主体名称,并且我们这里没有用户,因此它不会添加到令牌中。

"optionalClaims": {
    "idToken": [
        {
            "name": "upn",
            "source": null,
            "essential": false,
            "additionalProperties": []
        }
    ],
    "accessToken": [
        {
            "name": "upn",
            "source": null,
            "essential": false,
            "additionalProperties": []
        }
    ],
    "saml2Token": []
},

我还尝试添加

name
作为可选令牌,但无法保存清单。

将应用程序名称添加到令牌中需要什么?

azure azure-active-directory asp.net-core-webapi token microsoft-entra-id
1个回答
0
投票

据我所知,我们无法将自定义声明添加到 Azure 广告访问令牌中。如果最终证明不可能,我们可能会使用graph api来获取应用程序名称。

var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "tenant_id";
var clientId = "azure_ad_app_id";
var clientSecret = "client_secret";
var clientSecretCredential = new ClientSecretCredential(
                tenantId, clientId, clientSecret);
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
var application = await graphClient.Applications["azure_ad_object_id_but_not_the_app_id"].Request().GetAsync();

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