首页 > 解决方案 > AzureADB2C GetAccessTokenForUserAsync 错误“请求中提供的范围'user.read'不受支持”

问题描述

我正在尝试创建一个与 Microsoft Graph API(特别是 OneDrive)集成并使用 Azure AD B2C 进行身份验证的 Blazor 应用程序。

我正在使用 Microsoft.Identity.Web 0.3.1-preview

Setup.cs 如下:

        public void ConfigureServices(IServiceCollection services)
    {
        // Configuration to sign-in users with Azure AD B2C
        services.AddMicrosoftIdentityWebAppAuthentication(Configuration, "AzureAdB2C")
             .EnableTokenAcquisitionToCallDownstreamApi(new string[] { "https://graph.microsoft.com/.default" })
             .AddMicrosoftGraph("https://graph.microsoft.com/beta")
             .AddInMemoryTokenCaches(); 
...

然后服务使用 ITokenAcquisition请求令牌,如下所示:

public MyService(ITokenAcquisition tokenAcquisition, IOptions<WebOptions> webOptionValue, 
                          AuthenticationStateProvider AuthenticationStateProvider)
    {
                string result = await tokenAcquisition.GetAccessTokenForUserAsync(new string[] { "user.read" });

我正在使用 Microsoft 链接帐户进行身份验证,并且可以在 AuthenticationStateProvider 中看到 live.com 声明。

将基本 user.read 传递给 GetAccessTokenForUserAsync 会导致异常“请求中提供的范围 'user.read' 不受支持”。我尝试将范围指定为https://graph.microsoft.com/user.read但这只是返回 null。

任何建议将不胜感激。

标签: blazorazure-ad-b2cblazor-server-sidemsalmicrosoft-identity-platform

解决方案


Azure AD B2C 颁发的令牌旨在供 Azure AD B2C 注册客户端与 Azure AD B2C 注册资源一起使用。

Microsoft Graph API 不是 Azure AD B2C 注册资源,因此https://graph.microsoft.com/不支持范围。

或者,您可以考虑将访问令牌作为idp_access_token声明Microsoft 身份提供程序传递到您的 Azure AD B2C 注册客户端。

Microsoft 身份提供者需要一个自定义策略才能通过.


推荐阅读