14

Abbiamo configurato l'app client per utilizzare l'autenticazione IdentityServer3 tramite il protocollo OpenID Connect (è l'app MVC ASP.NET che utilizza il middleware OWIN per supportare OIDC).Ignora schermata di login IdentityServer3

IdentityServer3 è configurato per utilizzare sia l'accesso locale che il login esterno (Azure AD, ad esempio).

Nel flusso regolare, una volta che l'app deve autenticare l'utente, lo reindirizza alla schermata di login di IdentityServer3 - va bene. Ma in alcuni casi, su richiesta, voglio bypassare la schermata di accesso lasciando in qualche modo che IdentityServer3 sappia che l'utente desidera accedere immediatamente con un provider di identità esterno specifico.

È possibile fare?

image

+0

Ho scoperto che se il Cliente si limita a IDP singolo, la schermata di Login viene saltata automaticamente, ma in caso di IdP multipli (ad esempio login locale e Azure AD) la domanda è ancora aperta –

+0

C'è un esempio su come selezionare la funzione HRD [qui] (https://github.com/IdentityServer/IdentityServer3.Samples/tree/master/source/CustomHrd). Forse ti aiuterà. – pepo

+0

@pepo, grazie, darò sicuramente un'occhiata! Per quanto ho capito, il middleware OWIN "predefinito" per OpenID Connect non è in grado di passare alcuna informazione aggiuntiva sulla sfida di autenticazione: https://github.com/aspnet/Security/issues/99. Quindi, non solo Identity Server dovrebbe supportare la ricezione di informazioni sull'intenzione dell'utente, ma il middleware OWIN dovrebbe essere in grado di inviarlo e non può essere immediatamente pronto, giusto? –

risposta

15

appena trovato la soluzione nel IdentityServer3's Authorization/Authentication Endpoint documentation!

acr_values ​​(opzionale) permette di passare ulteriore autenticazione relative informazioni al servizio dell'utente - ci sono anche valori con particolare significato: IDP: name_of_idp bypassa il/schermo regno casa login e avanti l'utente direttamente al provider di identità selezionato (se ammessi per la configurazione del client) inquilino: name_of_tenant può essere utilizzato per passare un nome inquilino al servizio all'utente

come passare parametri aggiuntivi utilizzando OWIN OpenID Connect middleware: https://katanaproject.codeplex.com/workitem/325

Ecco il campione della richiesta di autorizzazione:

sample request

+1

Questa è una bella cattura. – PyroJoke

+0

@PyroJoke, Felice di trovarlo utile, Dima :) –

5

So che questo è vecchio ma ho pensato ancora messo questo qui per aiutare qualcuno se vogliono reindirizzare automaticamente ad un account di accesso esterna:

public override Task PreAuthenticateAsync(PreAuthenticationContext context) 
{ 
    context.SignInMessage.IdP = "windows"; 
    return base.PreAuthenticateAsync(context); 
} 

si può sostanzialmente ignorare il PreAuthenticateAsync su UserServiceBase e Chang e la proprietà IdP sul context.SignInMessage per essere il nome del provider esterno che è stato configurato all'avvio. E questo reindirizzerà.

Problemi correlati