ASP Identity GenerateUserTokenAsync(字符串用途,TKey userId)目的选项

时间:2014-09-08 06:25:41

标签: asp.net asp.net-web-api asp.net-identity

因此UserManager有一个名为GenerateUserTokenAsync的函数(字符串用途,TKey userId)。

这在ASP身份中有什么作用?我可以用它来生成OAuth承载令牌吗?目的参数是什么?这可以是什么价值?

2 个答案:

答案 0 :(得分:4)

GenerateUserTokenAsync'的文档说

  

获取用于特定目的的用户令牌

不应该直接使用此方法,(不知道为什么它是公开的)。它用于生成密码重置令牌(GeneratePasswordResetTokenAsync)和电子邮件确认令牌(GenerateEmailConfirmationTokenAsync)。它的使用方式如下:

GenerateUserTokenAsync("Confirmation", userId); // email confirmation

GenerateUserTokenAsync("ResetPassword", userId); // password reset

在令牌提供程序(TotpSecurityStampBasedTokenProvider)的默认实现中,目的是用作加密令牌生成中的某种密码。

总体而言,您不需要使用GenerateUserTokenAsync,只需致电GeneratePasswordResetTokenAsyncGenerateEmailConfirmationTokenAsync

答案 1 :(得分:0)

UserManager.GenerateUserTokenAsync(User, TokenProvider, Purpose)

可用于出于用户管理器未实现的目的生成令牌。

一个例子可以是邀请系统。在WebProject中,您需要像这样创建TokenProvider:

public class InvitationTokenProvider<TUser> : DataProtectorTokenProvider<TUser> where TUser : class
{
    public InvitationTokenProvider(IDataProtectionProvider dataProtectionProvider, IOptions<InvitationTokenProviderOptions> options, ILogger<DataProtectorTokenProvider<TUser>> logger) : base(dataProtectionProvider, options, logger)
    {

    }
}

和InvitationTokenProviderOptions

public class InvitationTokenProviderOptions : DataProtectionTokenProviderOptions
{
}

然后您可以在StartUp.ConfigureServices()中注册它。

services.AddIdentity<User, Role>(options =>
{
    // ...
}).AddEntityFrameworkStores<ApplicationDbContect>()
   .AddDefaultTokenProviders()
   .AddTokenProvider<InvitationTokenProvider<User>>("Invitation");

之后,您可以将其与UserManger一起使用

// create a token    
string token = await _userManager.GenerateUserTokenAsync(user, "Invitation", "Invitation");
// verify it
bool result = await _userManager.VerifyUserTokenAsync(user, "Invitation", "Invitation", token);

如果您要在URL中使用令牌,请不要忘记将其设置为URL安全(它可能包含'/'和其他符号。 此外,还要检查在通过电子邮件和浏览器的途中是否丢失尾随“ ==”。