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

Kne*_*lis 7 asp.net owin asp.net-identity

我想知道是否可以在网站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);
Run Code Online (Sandbox Code Playgroud)

然后作为查询参数传递给其他网站:

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

if (await manager.VerifyUserTokenAsync(userId, "SomePurpose", token)) 
{
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

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

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

var dataProtectionProvider = options.DataProtectionProvider;

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

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

Kne*_*lis 7

结果是令牌生成和验证使用机器密钥.要生成/验证,网站需要具有相同的machineKey配置.