因此UserManager有一个名为GenerateUserTokenAsync的函数(字符串用途,TKey userId)。
这在ASP身份中有什么作用?我可以用它来生成OAuth承载令牌吗?目的参数是什么?这可以是什么价值?
答案 0 :(得分:4)
GenerateUserTokenAsync'的文档说
获取用于特定目的的用户令牌
不应该直接使用此方法,(不知道为什么它是公开的)。它用于生成密码重置令牌(GeneratePasswordResetTokenAsync
)和电子邮件确认令牌(GenerateEmailConfirmationTokenAsync
)。它的使用方式如下:
GenerateUserTokenAsync("Confirmation", userId); // email confirmation
GenerateUserTokenAsync("ResetPassword", userId); // password reset
在令牌提供程序(TotpSecurityStampBasedTokenProvider
)的默认实现中,目的是用作加密令牌生成中的某种密码。
总体而言,您不需要使用GenerateUserTokenAsync
,只需致电GeneratePasswordResetTokenAsync
或GenerateEmailConfirmationTokenAsync
。
答案 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安全(它可能包含'/'和其他符号。 此外,还要检查在通过电子邮件和浏览器的途中是否丢失尾随“ ==”。