【问题标题】:Use UserManager GenerateUserTokenAsync to create custom tokens with extra data使用 UserManager GenerateUserTokenAsync 创建带有额外数据的自定义令牌
【发布时间】:2020-01-14 15:09:38
【问题描述】:

我正在使用 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。

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

我应该怎么做?

【问题讨论】:

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


    【解决方案1】:

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

    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]:

    【讨论】:

    • 我知道我可以创建一个自定义提供程序,但我的问题是如何为我发布的特定案例创建一个。令牌是否包含额外信息然后我检索它?或者我将信息与令牌一起保存在数据库中以便以后检索该信息?我通过电子邮件发送令牌,所以当用户单击链接时,我需要检查令牌是否对此有效,并以某种方式使用 UserId、ProjectId 和 RoleId 来执行操作。
    • 接口需要GenerateAsync和ValidateAsync方法。您可以在此处定义令牌的创建方式以及验证方式。您只需注入一个数据保护提供程序,以便您可以加密和解密。未加密的令牌可以是任何你想要的。
    猜你喜欢
    • 2015-09-18
    • 2018-12-19
    • 2012-04-10
    • 2013-11-19
    • 2019-07-02
    • 2020-06-05
    • 2021-11-14
    • 2016-09-21
    • 2019-06-06
    相关资源
    最近更新 更多