如何在MVC 5中实现多个身份提供者

时间:2019-05-13 09:13:23

标签: c# oauth-2.0 single-sign-on openid-connect

我正在开发一个应用程序,其中有多个租户,每个租户都有自己的身份提供者配置,这意味着一个拥有天蓝色的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 方法不会被触发或我没有获取身份验证令牌。

有人可以指导我我的方法是正确的还是其他方法来实现这一目标?

0 个答案:

没有答案