我想知道是否有可能验证网站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.DataProtectionProvider
在运行时类型CallDataProtectionProvider
)分配令牌提供程序的方式:
var dataProtectionProvider = options.DataProtectionProvider;
if (dataProtectionProvider != null)
{
manager.UserTokenProvider =
new DataProtectorTokenProvider<UserProfile>(dataProtectionProvider.Create("SomeName"));
}
这种行为是故意还是我做错了什么?
答案 0 :(得分:7)
事实证明令牌生成和验证使用机器密钥。要生成/验证,网站需要配置相同的machineKey
。