2016-04-04 8 views
7

Vorrei sapere se è possibile convalidare ASP.NET Identity token utente sul sito web 1, generate sul sito 2.generare e convalidare Owin token utente tra domini

Nel mio caso, entrambi i siti effettivamente utilizzare lo stesso UserManager, definito in un assembly utilizzato da entrambi i siti. Startup.Auth.cs è identico per i due siti. Tuttavia, un token generato sul primo sito non riesce a convalidare sull'altro.

codice utilizzato sul primo sito web per generare token:

string userId = User.Identity.GetUserId(); 
var manager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
string token = await manager.GenerateUserTokenAsync("SomePurpose", userId); 

poi passati come parametri di query per l'altro sito web:

var manager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); 

if (await manager.VerifyUserTokenAsync(userId, "SomePurpose", token)) 
{ 
    // Do something 
} 

convalida non riesce sempre in questo scenario. Se convalido il token sullo stesso sito in cui è stato generato, passa.

Ecco come il provider di token viene assegnato a ApplicationUserManager (options.DataProtectionProvider è di tipo CallDataProtectionProvider in fase di esecuzione):

var dataProtectionProvider = options.DataProtectionProvider; 

if (dataProtectionProvider != null) 
{ 
    manager.UserTokenProvider = 
     new DataProtectorTokenProvider<UserProfile>(dataProtectionProvider.Create("SomeName")); 
} 

È questo il comportamento intenzionale o sto facendo qualcosa di sbagliato?

+0

Se si convalida il token sullo stesso sito, lo si convalida nella stessa azione in cui è stato generato? – tmg

+0

@tmg Stessa azione o azione diversa, entrambi funzionano. – Knelis

risposta

7

Si scopre che generazione e verifica di token utilizzano la chiave della macchina. Per generare/verificare, i siti Web devono avere lo stesso machineKey configurato.