跨域生成和验证 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
。
我想知道是否可以验证网站 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
。