2016-04-04 47 views
7

OWIN用戶令牌我想知道它是否能夠驗證網站上的1 ASP.NET用戶身份令牌,在網站2生成和驗證跨域

產生在我的情況下,這兩個網站實際上使用相同UserManager,這是在兩個站點使用的程序集中定義的。 Startup.Auth.cs是兩個網站的身份。但是,第一個站點上生成的令牌無法在另一個站點上驗證。在第一個網站用於生成令牌

代碼:

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

然後作爲查詢參數傳遞給其他網站:

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

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

驗證總是失敗,在這種情況下。如果我在生成它的同一網站上驗證令牌,它會通過。

這裏的令牌供應商是如何在ApplicationUserManager分配(options.DataProtectionProviderCallDataProtectionProvider類型在運行時):

var dataProtectionProvider = options.DataProtectionProvider; 

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

這種行爲是故意的還是我做錯了什麼?

+0

如果您在同一網站上驗證令牌,您是否在生成它的相同操作中驗證該令牌? – tmg

+0

@tmg相同的行動或不同的行動,兩者都有效。 – Knelis

回答

7

結果令牌生成和驗證使用機器密鑰。要生成/驗證,網站需要配置相同的machineKey