当前位置: 首页 > 知识库问答 >
问题:

使用 AspNetUserTokens 表在核心 Web API 中存储刷新令牌 ASP.NET

慕河
2023-03-14

我和ASP一起工作。NET核心Web API应用程序。我正在尝试在ASP之上实现基于Jwt令牌的身份验证。NET标识(内置数据库表)。

我已经实现了所有的场景,如注册用户,登录等,但现在试图实现刷新令牌流(当访问令牌过期时,客户端需要使用刷新令牌替换访问令牌)。我看到人们正在创建新的表(refreshToken)来存储刷新令牌,这样就可以用访问令牌来验证它,并将生成新的访问和刷新令牌

https://www . blinking caret . com/2018/05/30/refresh-tokens-in-ASP-net-core-we b-API/

https://www.c-sharpcorner.com/article/handle-refresh-token-using-asp-net-core-2-0-and-json-web-token/

我已经创建了新表(刷新令牌)来存储刷新令牌并验证它以生成访问令牌,它工作正常,但我想看看我是否可以使用现有的 AspNetUserTokens 表来处理相同的情况。我了解AspNetUserTokens表用于确认电子邮件,忘记密码等。

我的问题是:如果有人使用AspNetUserTokens来存储刷新令牌,请分享想法,因为usermanager类不公开直接令牌模型(AspNetUserTokens),并且不确定我是否使用IdentityDbContext,有什么缺点?我已经实现了IdentityDbContext,但我没有看到Microsoft.AspNetCore.Identity中的内置类来将令牌存储在AspNetUserTokens中。

会非常感谢一些指导。

谢谢你

共有1个答案

罗兴运
2023-03-14

我会直接回答你的问题,然后提出一个替代方案。您可以使用AspNetUserTokens表删除、设置、获取和验证令牌。然而,你可以跳过数据库,我将在下面描述。

用户管理器的以下方法将生成并存储:

await _userManager.RemoveAuthenticationTokenAsync(user, "MyApp", "RefreshToken");
var newRefreshToken = await _userManager.GenerateUserTokenAsync(user, "MyApp", "RefreshToken");
await _userManager.SetAuthenticationTokenAsync(user, "MyApp", "RefreshToken", newRefreshToken);

UserManager的以下方法将获取并验证:

var refreshToken = await _userManager.GetAuthenticationTokenAsync(user, "MyApp", "RefreshToken");
var isValid = await _userManager.VerifyUserTokenAsync(user, "MyApp", "RefreshToken", refreshToken );

您需要在启动中使用 IdentityBuilder 设置这样的提供程序

identity.AddTokenProvider("MyApp", typeof(DataProtectorTokenProvider<User>)

作为将这些令牌存储在数据库中的替代方法,您可以根据需要使用以下方法使所有令牌失效。您可以将其作为注销的一部分。

_userManager.UpdateSecurityStampAsync(user);
 类似资料:
  • 我正在尝试从应用程序服务中获取Google的刷新令牌,但我不能。 日志说 2016-11-04T00:04:25 PID[500]收到的详细请求:获取https://noteappsvr.azurewebsites.net/.auth/login/google?access _ type = offline 2016-11-04t 00:04:25 PID[500]从https://account

  • @覆盖受保护的无效成功身份验证(HttpServletRequest请求、HttpServlet响应、FilterChain链、身份验证身份验证)抛出IOException、ServletException{ //响应。setHeader(“accessToken”,accessToken);//回答setHeader(“refreshToken”,refreshToken); 成功身份验证正在创

  • 我无法轻松决定如何从后端接收刷新令牌和访问令牌,以及将其存储在哪里。 我理解的认证过程如下。 XSS可以用cookies进行防御 我参考了许多文章,据说XSS将被cookie阻止,CSRF将被刷新令牌和访问令牌保护。 对于刷新令牌,它存储在webStorage中。 然而,为了防止XSS,在访问令牌的情况下,似乎应该使用cookie来保护它们(仅适用于Http),在刷新令牌的情况下,似乎应该将它们存

  • 在处理基于浏览器的应用程序时,关于安全存储JWT令牌的主题已经提出了很多问题。大家一致认为,应该使用仅限http的安全cookie。然而,当涉及短期访问令牌和长期刷新令牌时,存储JWT令牌似乎存在许多变化。 我发现了以下变化: 1.仅将JWT访问令牌和刷新令牌存储在http安全cookie中 赞成的意见: 无法从Javascript访问访问令牌和刷新令牌 欺骗: 引入CSRF漏洞,因此也必须添加C

  • 我使用docusign身份验证流作为 登录时 让url=”https://account-d.docusign.com/oauth/auth?response_type=token 窗打开(url,“U self”);成功验证后,返回/token\u type/state中的access\u token/expires\u。 请指导如何refresh_token?refresh_token如何获得

  • 我正在尝试使用 GraphQL 使用 JWT 对用户进行身份验证。登录用户后,我会收到令牌作为 JSON 响应和存储刷新令牌的 httponly cookie。(服务器端使用的是销售核心) 从Saleor的文档和其他一些博客帖子中,我假设这个响应cookie现在应该存储在浏览器中,每当我需要刷新令牌时,cookie refreshToken将用于验证我的请求。然而,当我在开发工具中将选项卡切换到“