我有一个应用程序注册,其中
test.user
是我的范围。在 API 权限中,我已委派了 test.user
范围的权限。
在邮递员中,我尝试过这样的:
Grant_type : client_credentials
Clienid : my appid
scope : api:\\.....id\.default
Client_secret: secret
我能够获得访问令牌。但是,如果我将此令牌作为授权持有者传递,我的应用程序始终将用户身份验证视为错误,没有任何声明。请帮忙为什么没有索赔。
此外,如果我不添加 .default 并简单地将范围值添加为
api//myid/test.user
,则会抛出错误,因为您必须使用 .default
。为什么?
但在我的 Azure 门户应用程序注册中,我已将范围定义为 API url,后跟
test.user
。
注意:客户端凭证流使用其客户端 ID 和客户端密钥到授权服务器并执行身份验证。
在您的场景中,
test.user
范围是 API 权限的委托类型,因此访问令牌将不包含值为 test.user
的 scp声明。
/.default
及其默认值,并且不能直接传递范围名称。因此,在使用客户端凭证流时,您必须公开 API 并创建应用程序角色:
现在应用程序角色将是应用程序类型 API 权限:
生成代币:
GET https://login.microsoftonline.com/TenantID/oauth2/v2.0/token
Grant_type : client_credentials
Clienid : ClientID
scope : api://ClientID/.default
Client_secret: ClientSecret
解码后,角色声明出现在访问令牌中: