gpt4 book ai didi

asp.net-identity - ASP.NET WEB API服务器上存储的授权 token 信息在哪里?

转载 作者:行者123 更新时间:2023-12-04 19:05:05 26 4
gpt4 key购买 nike

在用户注册后的 Web Api 2 Identity 2 应用程序中,我在单个表中有一条记录:AspNetUsers。我使用以下 http 请求来获取 token :

POST https://localhost:44304/Token HTTP/1.1
Accept: application/json
Content-type: application/x-www-form-urlencoded
Accept-Encoding: gzip
Content-Length: 68
Host: localhost:44304
Connection: Keep-Alive
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)

grant_type=password&username=somemail@gmail.com&password=123456

我得到了 access_token 的响应:
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 695
Content-Type: application/json;charset=UTF-8
Expires: -1
Server: Microsoft-IIS/8.0
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcU2VyZ2V5XERvY3VtZW50c1xWaXN1YWwgU3R1ZGlvIDIwMTNcUHJvamVjdHNcbXZjX3dlYmFwaVxXZWJBcHBsaWNhdGlvblxXZWJBcHBsaWNhdGlvblxUb2tlbg==?=
X-Powered-By: ASP.NET
Date: Tue, 25 Nov 2014 17:40:07 GMT

{"access_token":"gsvW23e1...}

在我获得 token 后,没有任何记录添加到数据库中。表 AspNetUsers 中仍然只有一条记录。没有关于已发行 token 的信息存储在数据库的任何表中。

我在 web api Controller 中使用以下代码来验证用户:
var currentUser = manager.FindById(User.Identity.GetUserId());
if (currentUser == null)
{
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
return ResponseMessage(response);
}

之后,我执行密码更改并尝试使用旧的 access_token(我在更改密码之前获得)调用一些 web api Controller 方法,并且 access_token 仍然有效! currentUser 不为空!
我已经阅读了关于 stackoverflow 的另一个线程
ASP.Net Identity sign-out all sessions
ASP.Net Identity Logout
和博文
https://timmlotter.com/blog/asp-net-identity-invalidate-all-sessions-on-securitystamp-update/
但我仍然不明白有关已发行 token 的信息存储在哪里。
所以我的问题是:
1)服务器上存储的access_token的信息在哪里?
2)为什么修改密码后我仍然可以使用修改密码前服务器发出的access_token?
3) 如何使更改密码前发出的所有 access_token 失效?

最佳答案

1) token 不存储在数据库或本地存储中的任何位置。这意味着 token 不会存储在服务器中的任何地方。

2) 实际上,密码重置 token 是使用 SecurityStamp 生成的,并根据用户的 SecurityStamp 进行验证。除非您尚未设置过期时间或更新该用户的 SecurityStamp,否则 token 不会过期。

可以在身份配置类的 userManager 属性上设置过期时间。以下示例显示了 1 小时的 token 生命周期。查询 this文章。

 if (dataProtectionProvider != null)
{
manager.UserTokenProvider =
new DataProtectorTokenProvider<ApplicationUser>
(dataProtectionProvider.Create("ASP.NET Identity"))
{
TokenLifespan = TimeSpan.FromHours(1)
};
}

您可以使用自己的机制来检查以前使用过的 token 。

3) 更新SecurityStamp。这将使为该用户颁发的所有 token 无效,包括 cookie。最好使用您自己的想法来制作过期密码重置 token 。

例如,您可以使用另一列将任何生成的密码重置 token 存储在数据库中并对其进行验证(可能有更好的方法来做到这一点)。

请记住,登录 access_token 的生成方式不同,并且它具有您在 Owin 启动承载 token 过期时间中设置的过期时间。

希望这可以帮助。

关于asp.net-identity - ASP.NET WEB API服务器上存储的授权 token 信息在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27134701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com