使用客户端凭据流程时,有什么方法可以在访问令牌中包含应用程序注册名称吗?

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

我使用Azure AD来实现auth^2。

当我使用用户的访问令牌时,我会收到一个声明,例如 unique_name 或 upn,其中包含我可以用来登录数据库进行日志记录/跟踪/审核的用户标识符。

但是,如果我将应用程序注册用作客户端凭据流的服务主体,则访问令牌不包含任何具有应用程序注册名称的声明。关闭的是 azp,其中包含应用程序注册的 UUID。然而,它有点难以阅读,如果能够以某种方式在声明中获取应用程序注册的名称以用于记录/跟踪/审计目的,那就太好了。

有什么办法可以做到这一点吗?

oauth-2.0 azure-active-directory clientcredential azure-app-registration
2个回答
0
投票

我尝试在我的环境中重现相同的结果,并得到如下结果:

我使用以下参数生成了访问令牌

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

enter image description here

但是,访问令牌不包含任何带有应用程序注册名称的声明。

注意:默认情况下,访问令牌将包含应用程序名称和应用程序ID。

当我解码访问令牌时,应用程序名称和应用程序 ID 如下所示:

enter image description here

因此无需为应用程序名称和应用程序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

enter image description here

我将值分配给索赔,如下所示:

PATCH https://graph.microsoft.com/v1.0/me
{
"onPremisesExtensionAttributes": 
    {
        "extensionAttribute1": "testclaim"
    }
}

enter image description here

现在,当我使用授权代码流程生成访问令牌时,我成功获得了声明,如下所示:

enter image description here


-1
投票

有人解决了这个问题吗? 当我创建具有默认范围的访问令牌时,它默认包括 app_displayname 和 appid 。但是当我创建范围为“api://11fdfsaf32-4dbd-4d96-b4bf-xxdssdada/.default”时,我只得到appid而不是app_displayname。您能帮我在使用示波器时如何获取 app_displayname 吗?

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