跨域生成并验证OWIN用户令牌

时间:2016-04-04 12:33:13

标签: asp.net asp.net-identity 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
}

在这种情况下,验证始终失败。如果我在生成它的同一站点上验证令牌,它就会通过。

以下是ApplicationUserManageroptions.DataProtectionProvider在运行时类型CallDataProtectionProvider)分配令牌提供程序的方式:

var dataProtectionProvider = options.DataProtectionProvider;

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

这种行为是故意还是我做错了什么?

1 个答案:

答案 0 :(得分:7)

事实证明令牌生成和验证使用机器密钥。要生成/验证,网站需要配置相同的machineKey