Asp.net

跨域生成和驗證 OWIN 使用者令牌

  • April 6, 2016

我想知道是否可以在網站 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"));
}

這種行為是故意的還是我做錯了什麼?

事實證明令牌生成和驗證使用機器密鑰。要生成/驗證,網站需要進行相同的machineKey配置。

引用自:https://stackoverflow.com/questions/36402787