.net 尝试获取访问令牌时出现“IDW10503:无法确定云示例,”

x33g5p2x  于 2023-03-31  发布在  .NET
关注(0)|答案(1)|浏览(166)

bounty将在22小时后过期。回答此问题可获得+50声望奖励。DaPanda希望引起更多人关注此问题。

我正在尝试将Microsoft和Google oauth集成到我的Blazor服务器应用程序中。以下是启动时的配置代码:

services.AddAuthentication(options =>
                {
                    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                })
                .AddCookie()
                .AddGoogle(options =>
                {
                    options.ClientId = "...";
                    options.ClientSecret = "...";
                    options.CallbackPath = "/signin-google";
                    options.SaveTokens = true;
                    options.Events.OnCreatingTicket += new CustomClaimsHelper().AddCustomClaims;
                    options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                    options.Scope.Add(PeopleServiceService.ScopeConstants.UserinfoProfile);
                })
                .AddMicrosoftAccount(MicrosoftAccountDefaults.AuthenticationScheme,options =>
                {
                    Configuration.Bind(Constants.AzureAd, options);
                    options.CallbackPath = "/signin-aad";
                    options.Events.OnCreatingTicket += new CustomClaimsHelper().AddCustomClaims;
                    options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                    options.SaveTokens = true;
                    options.Scope.Add("User.Read");
                });
            services.AddTokenAcquisition();

我对oauth工作流程的期望是这样的:
1.用户点击登录按钮,说这是一个微软用户,他/她被重定向到微软登录屏幕。

  1. Microsoft完成登录后,会从发送一个授权码到我的应用。然后获取一个访问令牌。访问令牌存储到cookie中。这一切都是由Microsoft oauth中间件自动完成的,该中间件在AddMicrosoftAccount方法中配置。
    1.我应该能够获取访问令牌并使用它来调用Microsoft Graph API。
    但是,当我尝试获取访问令牌以使用_tokenAcquisition.GetAccessTokenForUserAsync(new string []{"User.Read"});读取Micrsoft用户的配置文件时,我得到以下错误:
    无效操作异常:IDW 10503:无法确定云示例。提供的身份验证方案为“Cookie”。Microsoft.Identity.Web推断“Cookie”为身份验证方案。可用的身份验证方案为“Cookie、Google、Microsoft”。请参阅https://aka.ms/id-web/authSchemes
    我对www.example.com core中的oauth工作流程的理解是否asp.net有误?我应该如何解决该错误?
brjng4g3

brjng4g31#

请参阅调用ITokenAcquisition。GetAccessTokenForUserAsync抛出IDW10503错误
我怀疑上面打电话的正确方法是:

var token = await _tokenAcquisition.GetAccessTokenForUserAsync(scopes: scopes, authenticationScheme: authenticationScheme);

即指定authenticationScheme。

相关问题