Miguel Moura
Miguel Moura

Reputation: 39474

Use UserManager GenerateUserTokenAsync to create custom tokens with extra data

I am using ASP.NET Core 2.2 and I need to generate custom tokens in my application.

Asp.Net Core Identity UserManager can generate classic tokens like EmailVerification, ...

But it has also a method to generate tokens with different purposes (MSFT Docs):

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

I need to generate a token with the following information:

  1. Purpose = AddUserToProject
  2. User = A given user
  3. ProjectId = The Project Id to which the User should be added.
  4. RoleId = The Role Id of the User in the Project

On GenerateUserTokenAsync I can add the User and the Purpose ...

But I'm not sure how to add (3) and (4) e.g. ProjectId and RoleId.

And how can I retrieve it later so I can actually perform the action.

How should I do this?

Upvotes: 2

Views: 5641

Answers (1)

Chris Pratt
Chris Pratt

Reputation: 239380

You can create a custom token provider, and then instruct ASP.NET Core to use that. Create a class that implements IUserTokenProvider<TUser, TKey>. Then, you can either explicitly use it:

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

Or you can sub it in for any or all of the Identity token providers in 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));

[1]:

Upvotes: 5

Related Questions