2014-05-19 18 views
8

Per la mia azienda, devo creare un POC per verificare se è possibile utilizzare l'autenticazione wsFederation per il nostro progetto, che ha un'app MVC, alcuni controller Webapi e alcuni hub signalR, tutti in progetti differenti. Ci piacerebbe anche utilizzare il middleware di autenticazione OWIN sia nelle app client che nell'app del provider di identità.Autenticazione con OWIN e WsFederation per MVC, web api e app signalR

Io uso Thinktecture Identity Server v2 come provider di Identità per un avvio (ma dovremo svilupparne uno proprio ad un certo punto). Per l'app MVC, è piuttosto semplice e funziona perfettamente, utilizzando un token SAML2.

Ma ora le cose diventano un po 'più complicate in quanto mi piacerebbe che un utente autenticato nell'app Web fosse in grado di chiamare un metodo controller dall'app web api (che è diversa da MVC, ricorda), usando chiamate ajax.

Ho letto molte cose sui delegati di delegazione e actAs, ma sono un po 'perso e non so dove o come iniziare questa parte. Inoltre, non riesco a trovare nulla sulla delega utilizzando l'autenticazione OWIN.

Quindi la mia prima domanda è: è possibile raggiungere questo obiettivo? E poi: qualcuno potrebbe indicarmi la giusta direzione?

risposta

1

Ho seguito le istruzioni di Vittorio Bertocci quando ci stavo lavorando.

http://www.cloudidentity.com/blog/2013/01/09/using-the-jwt-handler-for-implementing-poor-man-s-delegation-actas/

Un paio di note su di esso, in cui si dice JWTSecurityTokenHandler, è ora JwtSecurityTokenHandler. È un piccolo errore di battitura, ma è un buon modo per perdere 15 minuti se non ne sei a conoscenza.

Non ero nemmeno in grado di utilizzare la sezione X509 FindByThumbprint. Penso di non aver registrato correttamente il mio certificato locale. Una volta al lavoro domani posterò ciò che dovevo cambiare per farlo funzionare.

Dominick Baier (http://leastprivilege.com/) fa anche un corso su pluralsight chiamato WebApi v2 Security che fa un ottimo lavoro parlando di come iniettare nella pipeline di sicurezza e impostare il progetto web api per gestirlo.

Come altra opzione, è possibile sostituire la classe TokenValidationHandler che Vittorio utilizza con il pacchetto Microsoft.Owin.Security.Jwt e implementare il seguente codice nel file Startup.cs.

app.UseJwtBearerAuthentication(
      new JwtBearerAuthenticationOptions 
      { 
       AuthenticationMode = AuthenticationMode.Active, 
       AllowedAudiences = new[] { ConfigurationSettings.AppSettings["ida:Realm"] }, 
       IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[] 
        { 
         new SymmetricKeyIssuerSecurityTokenProvider(
          ConfigurationSettings.AppSettings["ida:ValidIssuer"], 
          ConfigurationSettings.AppSettings["ida:SymmetricKey"]) 
        }, 
       Provider = new OAuthBearerAuthenticationProvider 
       { 
        OnValidateIdentity = context => 
        { 
         var identity = context.Ticket.Identity; 
         return System.Threading.Tasks.Task.FromResult<object>(null); 
        } 
       } 
      });