我正在使用 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 广告访问令牌中。如果最终证明不可能,我们可能会使用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();