如何使用客户端密码从Azure获取OAuth令牌(针对使用MSAL的特定范围)

eyh26e7m  于 2023-03-03  发布在  其他
关注(0)|答案(1)|浏览(176)

我正在使用以下MSAL代码从一个使用客户端密码的Azure企业应用程序获取OAuth令牌。

string authority = string.Concat(AzureAuthorityInstance, TenantID);
            appConfidential = ConfidentialClientApplicationBuilder
                    .Create(ClientID)
                    .WithClientSecret(clientSecret)
                    .WithAuthority(authority)
                    .WithLegacyCacheCompatibility(false)
                    .Build();

            string[] confidentialScope = new string[] { ".default" };
            return appConfidential.AcquireTokenForClient(confidentialScope).ExecuteAsync().Result;

这起作用并返回一个令牌。

我不想使用默认的作用域,而是想为特定的作用域获取一个令牌。

但是如果我指定了API权限的范围,我会得到下面的错误。

MsalServiceException: AADSTS500011: The resource principal named api://{clientid}/evigetdownload was not found in the tenant named {tenantname}. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You might have sent your authentication request to the wrong tenant.

当使用客户端密码进行身份验证时,是否可以获得特定范围的令牌(基于API权限)?

rryofs0p

rryofs0p1#

在客户端凭据流中,您必须为作用域使用特殊的. default后缀。例如,如果您需要客户端ID为{clientid}的API的令牌,则可以使用"{clientid}/. default"作为作用域。该流的文档:www.example.com网站。https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow#first-case-access-token-request-with-a-shared-secret.
您截图中的权限是"委托"权限,不能在客户端凭证流程中使用,只能在涉及用户的流程中使用,需要注册应用权限(即应用角色),相关文档:https://learn.microsoft.com/en-us/azure/active-directory/develop/howto-add-app-roles-in-azure-ad-apps。确保将"applications"指定为允许的成员。

相关问题