使用UserManager GenerateUserTokenAsync创建包含额外数据的自定义令牌

时间:2019-09-12 17:27:00

标签: asp.net-core asp.net-core-2.2 asp.net-core-identity usermanager

我正在使用ASP.NET Core 2.2,需要在应用程序中生成自定义标记。

Asp.Net Core Identity UserManager可以生成经典令牌,例如EmailVerification,...

但是它还有一种生成具有不同用途的令牌的方法(MSFT Docs):

public virtual System.Threading.Tasks.Task<string> GenerateUserTokenAsync (TUser user, string tokenProvider, string purpose);

我需要使用以下信息生成令牌:

  1. 目的= AddUserToProject
  2. 用户=给定用户
  3. ProjectId =应该将用户添加到的项目ID。
  4. RoleId =用户在项目中的角色ID

在GenerateUserTokenAsync上,我可以添加用户和目的...

但是我不确定如何添加(3)和(4),例如ProjectId和RoleId。

以及以后如何检索它,以便我可以实际执行操作。

我应该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以创建一个自定义令牌提供程序,然后指示ASP.NET Core使用它。创建一个实现IUserTokenProvider<TUser, TKey>的类。然后,您可以显式使用它:

var token = await _userManager.GenerateUserTokenAsync(user, "MyCustomTokenProvider", purpose);

或者您可以将其订阅给ConfigureServices中的任何或所有身份令牌提供者:

services.AddIdentity<IdentityUser, IdentityRole>(o => {
    o.Tokens.PasswordResetTokenProvider = nameof(MyCustomTokenProvider);
    // rinse and repeat for other token providers you want to change
    // see: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-configuration?view=aspnetcore-2.2#tokens
})
.AddTokenProvider<MyCustomTokenProvider>(nameof(MyCustomTokenProvider));

[1]: