2016-04-04 45 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