2017-08-10 4 views
0

Ich habe die Option zur Anmeldung von Azure AD implementiert. Und der Client-Typ, den ich verwende, ist Hybrid. Wenn ein Benutzer nun ein eingeschränktes Steuerelement für meine Anwendung eingibt, wird er auf eine Anmeldeseite (auf der IdentityServer-Anwendungssite) umgeleitet, wo er entweder einen Benutzernamen und ein Kennwort eingeben oder sich mit einem Azure AD-Konto anmelden kann.IdentityServer4 - Login direkt von einem externen Provider

Ich möchte in der Lage sein, die Anmeldeseite zu überspringen und den Benutzer direkt auf die Anmeldeseite von MS AD umzuleiten. Das bedeutet, dass der Nutzer auf der Website auf den Link "Login" klickt und er auf die Anmeldeseite von Azure AD gelangt. Sobald er sich erfolgreich eingeloggt hat, wird er zurück zu meiner Anwendung geleitet (im Prinzip der gleiche Ablauf, speichern Sie diesen zusätzlichen Schritt der Eingabe der IdentityServer Login-Seite und klicken Sie auf die externe Login-Schaltfläche).

Ist das möglich?

Antwort

2

Versuchen Sie in den Clientoptionen, EnableLocalLogin auf false zu setzen. Von der docs:

EnableLocalLogin

Gibt an, ob dieser Client nur lokale Konten oder externe IdPs verwenden können. Der Standardwert ist wahr.

Ich bin mit Asp.Net Kernidentität als auch, und habe ich die AccountsController die lokale Seite zu umgehen, wenn EnableLocalLogin falsch ist und es gibt nur einen externen Anbieter, oder wenn der IDP ist ausdrücklich in der Anforderung gesetzt .

[HttpGet] 
[AllowAnonymous] 
public async Task<IActionResult> Login(string returnUrl = null) 
{ 
    // Clear the existing external cookie to ensure a clean login process 
    await HttpContext.Authentication.SignOutAsync(_externalCookieScheme); 

    var context = await _interaction.GetAuthorizationContextAsync(returnUrl); 
    if (context?.IdP != null) 
    { 
     // if IdP is passed, then bypass showing the login screen 
     return ExternalLogin(context.IdP, returnUrl); 
    } 

    var vm = await BuildLoginViewModelAsync(returnUrl, context); 

    if (vm.EnableLocalLogin == false && vm.ExternalProviders.Count() == 1) 
    { 
     // only one option for logging in 
     return ExternalLogin(vm.ExternalProviders.First().AuthenticationScheme, returnUrl); 
    } 

    return View(vm); 
} 
Verwandte Themen