繁体   English   中英

ASP.NET Core - 多个 Microsoft 身份验证提供程序

[英]ASP.NET Core - Multiple Microsoft Authentication Providers

我正在尝试将多个 Microsoft 身份验证提供程序添加到我的 ASP.NET Core 应用程序,并根据 url 参数(租户)在登录站点上动态显示其中一个。

我有这个循环:

var authBuilder = services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme);
            
foreach (var microsoftExternalProvider in securityOptions.ExternalAuthentication.Microsoft)
{
    authBuilder.AddMicrosoftAccount(microsoftExternalProvider.Name, microsoftOptions => {
          microsoftOptions.ClientId = microsoftExternalProvider.ClientId;
          microsoftOptions.ClientSecret = microsoftExternalProvider.ClientSecret;
          if (microsoftExternalProvider.IsSingleTenant)
          {
              microsoftOptions.AuthorizationEndpoint = $"https://login.microsoftonline.com/{microsoftExternalProvider.TenantId}/oauth2/v2.0/authorize";
                microsoftOptions.TokenEndpoint = $"https://login.microsoftonline.com/{microsoftExternalProvider.TenantId}/oauth2/v2.0/token";   
          }
     });
}

我正在从 appsettings.json 的数组中获取 ID 和机密。

问题是只有在 appsettings 中设置的第一个提供程序有效。 其他尝试登录后抛出异常:

System.Exception: An error was encountered while handling the remote login.
 ---> System.Exception: The oauth state was missing or invalid.
   --- End of inner exception stack trace ---
   at Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler`1.HandleRequestAsync()
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Localization.RequestLocalizationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.StatusCodePagesMiddleware.Invoke(HttpContext context)

我应该怎么做才能使所有提供者工作? 找不到有关多次添加“AddMicrosoftAccount()”的任何信息。 能够从不同组织的不同租户登录对我来说非常重要。 它不能只是一个多租户提供商——业务需求。

问题是每个提供者都有相同的默认回调路径——“/signin-microsoft”。

解决方案是像这样在循环中配置它,例如:

microsoftOptions.CallbackPath = new PathString($"/signin-microsoft-{microsoftExternalProvider.Name}");

并将 azure Active Directory 应用程序身份验证 Web 重定向 url 设置为正确的 url。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM