我理解来自userManager.GeneratePasswordResetToken()的令牌用于在超链接中添加安全标识符,以便在密码重置请求时发送给用户。
但我不确定userManager.GenerateUserToken()的用户是什么。我能够生成令牌, 但不确定这是否可以转换为SAML令牌等声明,并用于授权。
请帮助我理解这一点,因为我无法找到有关此问题的任何好文件。
答案 0 :(得分:15)
GenerateUserToken()
用于创建密码重置令牌和电子邮件确认令牌。此方法采用字符串参数purpose
来描述将要发生的操作类型。实际上,purpose
是一个加密密钥,用于解密生成的令牌。
因此,您可以为自己的目的创建自己的令牌,例如,您可以在招聘应用程序中进行ConfirmJobOffer
操作。您可以为该操作创建令牌,并将带有此令牌的链接发送给用户:
var token = userManager.GenerateUserToken(userId, "ConfirmJobOffer");
// now send this token as part of the link
然后在控制器中,一旦令牌回复给你,你可以打电话:
var tokenCorrect = await userManager.VerifyUserTokenAsync(userId, "ConfirmJobOffer", token);
if (tokenCorrect)
{
// do stuff if token is correct
}
通常,您不会直接使用GenerateUserToken
,除非您正在使用自定义令牌。您可以使用GeneratePasswordResetTokenAsync
和GenerateEmailConfirmationTokenAsync
。
请注意:这不是为了进行SAML令牌或相关授权。
答案 1 :(得分:1)
添加到Trailmax的答案中...
答案的这一行已交换参数:
DEFAULT_SEARCH_FILTERS
会生成
System.InvalidOperationException:'找不到用户ID。'
它应显示为:
var token = userManager.GenerateUserToken(userId, "ConfirmJobOffer");
我尝试编辑帖子,但被拒绝了。我可以看到它看起来有点令人困惑……但是TUser是用户提供的Key或“用途”,而TKey是userId。
从UserManagerExtensions类中:
var token = userManager.GenerateUserToken("ConfirmJobOffer",userId);