我有一个应用程序注册,其中
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
。为什么?
您好,谢谢您的回答。我需要等待管理员打开该角色的应用程序权限,因为我没有访问权限。
同时,我想解释一下实际问题。
我有我的应用程序后端(api)。我已经使用 clientid、clientsecret、scope 等创建了 appregistration,现在从我的 UI(角度)能够通过传递我的 microsoft 登录名来验证 api (Swagger),并且用户已通过身份验证,这很好。我的 api swagger 如下。 招摇如下所示
但是,我几乎没有其他客户端想要调用我的 api 端点。因此,它不应该是交互式登录。因为他们运行某种作业,并且必须自动获取 api 响应,而不提示用户登录等, 所以我想,我可以使用客户端凭据来实现此目的。请让我知道是否确实需要客户凭据授予,或者我是否需要使用其他授予类型。如果有请解释一下。
谢谢你。
注意:客户端凭证流使用其客户端 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
解码后,角色声明出现在访问令牌中: