[英]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.