AzureADB2C GetAccessTokenForUserAsync 错误 "The scope 'user.read' provided in the request is not supported"

AzureADB2C GetAccessTokenForUserAsync Error "The scope 'user.read' provided in the request is not supported"

我正在尝试创建一个与 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 但这只是 returns null.

如有任何建议,我们将不胜感激。

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

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

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

the Microsoft identity provider to 需要自定义策略。