我使用Azure AD来实现auth^2。
当我使用用户的访问令牌时,我会收到一个声明,例如 unique_name 或 upn,其中包含我可以用来登录数据库进行日志记录/跟踪/审核的用户标识符。
但是,如果我将应用程序注册用作客户端凭据流的服务主体,则访问令牌不包含任何具有应用程序注册名称的声明。关闭的是 azp,其中包含应用程序注册的 UUID。然而,它有点难以阅读,如果能够以某种方式在声明中获取应用程序注册的名称以用于记录/跟踪/审计目的,那就太好了。
有什么办法可以做到这一点吗?
我尝试在我的环境中重现相同的结果,并得到如下结果:
我使用以下参数生成了访问令牌:
https://login.microsoftonline.com/TenantID/oauth2/v2.0/token
client_id:ClientID
client_secret:ClientSecret
scope:https://graph.microsoft.com/.default
grant_type:client_credentials
但是,访问令牌不包含任何带有应用程序注册名称的声明。
注意:默认情况下,访问令牌将包含应用程序名称和应用程序ID。
当我解码访问令牌时,应用程序名称和应用程序 ID 如下所示:
因此无需为应用程序名称和应用程序ID创建自定义声明。
使用客户端凭据流程时无法添加自定义声明。
我创建了一个自定义声明,如下所示:
New-AzureADPolicy -Definition @('
{
"ClaimsMappingPolicy":
{
"Version":1,"IncludeBasicClaimSet":"true",
"ClaimsSchema": [{"Source":"user","ID":"extensionattribute1","SamlClaimType":"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/appname","JwtClaimType":"appname"}]
}
}') -DisplayName "appname" -Type "ClaimsMappingPolicy"
Add-AzureADServicePrincipalPolicy -Id d53b9689-3c0d-4c39-ae6d-efd733e10776 -RefObjectId fd49e655-b790-4368-b9d9-1cf09fda1ba2
Get-AzureADServicePrincipalPolicy -Id d53b9689-3c0d-4c39-ae6d-efd733e10776
我将值分配给索赔,如下所示:
PATCH https://graph.microsoft.com/v1.0/me
{
"onPremisesExtensionAttributes":
{
"extensionAttribute1": "testclaim"
}
}
现在,当我使用授权代码流程生成访问令牌时,我成功获得了声明,如下所示:
有人解决了这个问题吗? 当我创建具有默认范围的访问令牌时,它默认包括 app_displayname 和 appid 。但是当我创建范围为“api://11fdfsaf32-4dbd-4d96-b4bf-xxdssdada/.default”时,我只得到appid而不是app_displayname。您能帮我在使用示波器时如何获取 app_displayname 吗?