ASP Identity GenerateUserTokenAsync(string purpose, TKey userId) 用途选项

use*_*512 4 asp.net asp.net-web-api asp.net-identity

所以 UserManager 有一个名为 GenerateUserTokenAsync(string purpose, TKey userId) 的函数。

这在 ASP Identity 中有什么作用?我可以使用它来生成 OAuth Bearer 令牌吗?另外目的参数是什么?这可以是什么值?

Mar*_*ach 7

UserManager.GenerateUserTokenAsync(User, TokenProvider, Purpose)
Run Code Online (Sandbox Code Playgroud)

可用于为未实现为 UserManager 的目的生成令牌。

一个例子可以是邀请系统。在 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)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

和 InvitationTokenProviderOptions

public class InvitationTokenProviderOptions : DataProtectionTokenProviderOptions
{
}
Run Code Online (Sandbox Code Playgroud)

然后你就可以在StartUp.ConfigureServices().

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

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

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

如果您打算在 URL 中使用令牌,请不要忘记使其成为 URL-Safe(它可能包含“/”和其他符号。还要检查尾随的“==”是否在通过电子邮件和浏览器的过程中丢失。


tra*_*max 3

“GenerateUserTokenAsync”的文档说

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

这些方法应用于使用继承 DataProtectorTokenProvider ( GeneratePasswordResetTokenAsync) ( GenerateEmailConfirmationTokenAsync) 的自定义提供程序生成自定义或特定重置令牌。

与内置提供者的Confirmation和ResetPassword一起使用:

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

GenerateUserTokenAsync("ResetPassword", userId); // password reset
Run Code Online (Sandbox Code Playgroud)

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

通常,您不需要GenerateUserTokenAsync直接调用,除非您有特定的用例,例如您想要为其实现重置令牌的自定义用户名更改流程。否则只需致电GeneratePasswordResetTokenAsyncGenerateEmailConfirmationTokenAsync.

  • 其公开的原因是应用程序可以免费使用 API 来生成用于自己目的的代币。如果应用程序想要使用此 api 生成更改用户名令牌,他们可以直接使用具有自定义目的的生成/验证方法,例如(“ChangeName”) (25认同)