2010-05-09 16 views
8

Si sta tentando di creare una soluzione di accesso singolo su più domini tramite ASP.NET MVC.Single-Sign-On ASP.NET MVC

Eventuali soluzioni o esercitazioni disponibili?

+1

Possono i server parlare tra loro o per quella materia allo stesso DB Se è così la soluzione è piuttosto semplice –

+0

hey -. Si. www.example.com - è un singolo sito Web con DB. Il DB è comune a tutti gli accessi, quindi fondamentalmente solo il sito Web "remoto" deve essere autenticato con www.example.com, ecc. – Mike

risposta

10

Se voi le applicazioni web sono sullo stesso server e stesso dominio allora tutto quello che dovete fare è assicurare che il validationKey e chiave di crittografia sono gli stessi nella configurazione web (machineKey).

Nel tuo esempio è necessario aggiungere il ticket di autenticazione per la stringa di query, per trasportare di nuovo al loro dominio, ad esempio:

public void Login(string userName, string password) 
{ 
    if(AuthenticateUser(userName,password)) 
    { 
     Response.Redirect(String.format("{0}?{1}={2}"), 
      Request.QueryString["ReturnUrl"], 
      FormsAuthentication.FormsCookieName, 
      FormsAuthentication.GetAuthCookie(userName, false).Value)); 
    } 
} 

Sulla applicazione locale è necessario abilitare l'autenticazione di form senza cookie e consentire agli utenti autenticati di provenire da applicazioni esterne impostando enableCrossAppRedirect.

<authentication mode="Forms"> 
    <forms enableCrossAppRedirect="true" cookieless="useUri" /> 
</authentication> 

Note:

  1. Vedi anche FormsAuthentication.RedirectFromLoginPage - http://msdn.microsoft.com/en-us/library/ka5ffkce.aspx.

  2. Nel mio caso ReturnUrl perso parte del dominio dell'URL :(