我正在开发一个应用程序,其中有多个租户,每个租户都有自己的身份提供者配置,这意味着一个拥有天蓝色的AD,另一个拥有okta。 我已经实现了两步登录,这意味着第一个用户将输入和用户名/电子邮件地址,我们将通过该用户名/电子邮件地址来识别租户及其身份提供者。如果用户具有身份提供者设置,我们将重定向到提供者的身份验证端点,否则将允许用户进行本地登录。>
我尝试使用OpenId Connect实现上述方案。使用OnRedirectToIdentityProvider覆盖OpenIdConnectAuthenticationOptions以按租户重定向到身份验证端点
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
RedirectUri = redirectUri,
PostLogoutRedirectUri = PostLogoutUri,
Scope = OpenIdConnectScope.OpenIdProfile,
ResponseType = OpenIdConnectResponseType.IdToken,
TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = false
},
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthenticationFailed = OnAuthenticationFailed,
RedirectToIdentityProvider = OnRedirectToIdentityProvider,
SecurityTokenValidated = (context) =>
{
return Task.FromResult(0);
}
},
RequireHttpsMetadata = false
});
private static Task OnRedirectToIdentityProvider(RedirectToIdentityProviderNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> notification)
{
notification.ProtocolMessage.ClientId = "XXXXXXXXXXX";
notification.ProtocolMessage.IssuerAddress = "https://XXX- XXXXX.XXX.com/oauth2/default/v1/authorize";
notification.ProtocolMessage.RedirectUri = "http://localhost:XXXX/Home/Callback";
notification.ProtocolMessage.PostLogoutRedirectUri = "http://localhost:XXXX/";
notification.ProtocolMessage.Scope = OpenIdConnectScope.OpenIdProfile;
notification.ProtocolMessage.ResponseType = OpenIdConnectResponseType.Code;
}
使用上述代码,我可以使用覆盖的设置重定向到身份验证端点,但是 SecurityTokenValidated 方法不会被触发或我没有获取身份验证令牌。
有人可以指导我我的方法是正确的还是其他方法来实现这一目标?