使用 UserManagerGenerateUserTokenAsync 创建带有额外数据的自定义令牌

Mig*_*ura 2 usermanager asp.net-core asp.net-core-identity asp.net-core-2.2

我正在使用 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);
Run Code Online (Sandbox Code Playgroud)

我需要生成包含以下信息的令牌:

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

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

但我不知道如何添加(3)和(4),例如ProjectId和RoleId。

我怎样才能稍后检索它以便我可以实际执行该操作。

我该怎么做?

Chr*_*att 5

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

var token = await _userManager.GenerateUserTokenAsync(user, "MyCustomTokenProvider", purpose);
Run Code Online (Sandbox Code Playgroud)

或者您可以将其分入以下位置的任何或所有身份令牌提供商ConfigureServices

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

[1]:

  • 该接口需要“GenerateAsync”和“ValidateAsync”方法。您可以在此处定义如何创建令牌以及如何验证令牌。您只想注入一个数据保护提供程序,以便可以加密和解密。未加密的令牌可以是您想要的任何内容。 (2认同)