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

Generate and validate OWIN user tokens across domains

我想知道是否可以验证网站 1 上生成的网站 2 上的 ASP.NET 身份用户令牌。

就我而言,两个网站实际上使用相同的 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"));
}

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

原来令牌生成和验证使用的是机器密钥。要 generate/verify,网站需要配置相同的 machineKey