Search code examples
asp.net-web-apiasp.net-coreasp.net-identityaccess-tokenasp.net-core-1.0

How to generate token in implementation of IUserTokenProvider in Identity 3?


I'm trying to implement IUserTokenProvider interface to register in Identity system and use further for authentication. Why token authentication because i write Web Api server in Asp Net Core using Identity 3. The obstacle is i don't know how to generate token. IUserTokenProvider has 2 method i need: 1. generates token 2. validates token. what do i write inside them? what's algorithm?

public class UserTokenProvider : IUserTokenProvider<AppUser>
{
    public Task<bool> CanGenerateTwoFactorTokenAsync(UserManager<AppUser> manager, AppUser user)
    {
        throw new NotImplementedException();
    }

    public Task<string> GenerateAsync(string purpose, UserManager<AppUser> manager, AppUser user)
    {
        /* here logic to generate token */
        string result = "generated token";
        return Task.FromResult(result);
    }
    public Task<bool> ValidateAsync(string purpose, string token, UserManager<AppUser> manager, AppUser user)
    {
        /* validating token */
        if (token == "generated token")
            return Task.FromResult(true);
        else return Task.FromResult(false);
    }
}

and in ConfigureServices method of StartUp class i register my provider:

services.AddIdentity<AppUser, IdentityRole>(options => {
            options.User.RequireUniqueEmail = true;
        })
            .AddEntityFrameworkStores<UserDbContext>()
            .AddTokenProvider<UserTokenProvider>("AuthToken") 
            .AddDefaultTokenProviders();

Solution

  • As explained in this other SO post, IUserTokenProvider has absolutely nothing to do with token authentication.

    I'd recommend reading these other questions for more information about how you can issue your own access tokens in ASP.NET Core: