Asp.net ASP Identity GenerateUserTokenAsync(字符串用途,TKey用户ID)用途选项

Asp.net ASP Identity GenerateUserTokenAsync(字符串用途,TKey用户ID)用途选项,asp.net,asp.net-web-api,asp.net-identity,Asp.net,Asp.net Web Api,Asp.net Identity,因此,UserManager有一个名为GenerateUserTokenAsync(字符串用途,TKey userId)的函数 这在ASP身份中起什么作用?我可以用它来生成OAuth承载令牌吗?还有,参数的用途是什么?“GenerateUserTokenAsync”的文档中说 获取用于特定目的的用户令牌 这种方法不应该直接使用(不知道为什么它是公开的)。它用于生成密码重置令牌(GeneratePasswordResetTokenAsync)和电子邮件确认令牌(GenerateEmailConfi

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


这在ASP身份中起什么作用?我可以用它来生成OAuth承载令牌吗?还有,参数的用途是什么?“GenerateUserTokenAsync”的文档中说

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

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

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

GenerateUserTokenAsync("ResetPassword", userId); // password reset
public class InvitationTokenProvider<TUser> : DataProtectorTokenProvider<TUser> where TUser : class
{
    public InvitationTokenProvider(IDataProtectionProvider dataProtectionProvider, IOptions<InvitationTokenProviderOptions> options, ILogger<DataProtectorTokenProvider<TUser>> logger) : base(dataProtectionProvider, options, logger)
    {

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

总之,您不需要使用
GenerateUserTokenAsync
,只需调用
GeneratePasswordResetTokenAsync
GenerateEmailConfirmationTokenAsync

UserManager.GenerateUserTokenAsync(User, TokenProvider, Purpose)
可用于为UserManager未实现的目的生成令牌

一个例子是邀请系统。在WebProject中,您需要创建一个令牌提供者,如下所示:

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

GenerateUserTokenAsync("ResetPassword", userId); // password reset
public class InvitationTokenProvider<TUser> : DataProtectorTokenProvider<TUser> where TUser : class
{
    public InvitationTokenProvider(IDataProtectionProvider dataProtectionProvider, IOptions<InvitationTokenProviderOptions> options, ILogger<DataProtectorTokenProvider<TUser>> logger) : base(dataProtectionProvider, options, logger)
    {

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

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

其公开的原因是应用程序可以自由地使用API为自己的目的生成令牌。如果应用程序希望使用此API生成更改用户名令牌,则可以直接使用具有自定义目的的generate/Validate方法,如(“ChangeName”)如何提供令牌提供程序?我的验证结果总是返回false。我正在对令牌进行编码,然后使用HttpUtility对其进行解码。知道为什么会出现这种情况吗?
cs var invitationToken=await\u userManager.GenerateUserTokenAsync(用户,“邀请”,“邀请”);var\u invitationToken=HttpUtility.UrlEncode(invitationToken);//verify var authorized=wait _userManager.VerifyUserTokenAsync(dbUser,“invitation”,“invitation”,HttpUtility.UrlDecode(invitationToken));
首先,当生成令牌时(在UrlEncode之前),我会使用调试器将其复制到文本编辑器中然后在您尝试验证它之前(在UrlDecode之后)。这样我发现我的emailservice似乎删除了尾随“==”。感谢您的回复。结果表明,当我将令牌发送到我的Api时,Angular出现了问题。
// create a token    
string token = await _userManager.GenerateUserTokenAsync(user, "Invitation", "Invitation");
// verify it
bool result = await _userManager.VerifyUserTokenAsync(user, "Invitation", "Invitation", token);