Как реализовать несколько провайдеров идентификации в MVC 5 - PullRequest
0 голосов
/ 13 мая 2019

Я разрабатываю одно приложение, в котором есть несколько арендаторов, и у каждого арендатора есть собственная конфигурация провайдера идентификации, что означает, что у одного есть Azure 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 метод не срабатывает или я не получаю токен аутентификации.

Может ли кто-нибудь подсказать мне, правильный ли мой подход или какой-либо другой подход для достижения этой цели?

...