asp.net-identity – 存储在ASP.NET WEB API服务器上的授权令牌
在用户注册后的Web Api 2 Identity 2应用程序中,我在单个表中有一条记录:AspNetUsers.我使用以下http请求获取令牌:
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...} 获得令牌后,没有任何记录被添加到数据库中.表AspNetUsers中只有单一记录.没有关于已颁发令牌的信息存储在数据库的任何表中. 我在web api控制器中使用以下代码来验证用户: var currentUser = manager.FindById(User.Identity.GetUserId()); if (currentUser == null) { HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Unauthorized); return ResponseMessage(response); } 之后我执行密码更改并尝试使用旧的access_token(我在密码更改之前获得)调用一些web api控制器方法,并且access_token仍然有效! currentUser不为null! 解决方法
1)令牌不存储在数据库或本地存储中的任何位置.这意味着令牌不会存储在服务器中的任何位置.
2)实际上,密码重置令牌是使用SecurityStamp生成的,并根据用户的SecurityStamp进行验证.除非您尚未设置该用户的过期时间或更新的SecurityStamp,否则令牌不会过期. 可以在身份配置类的userManager属性上设置过期时间.以下示例显示令牌生命周期为1小时.检查this文章. if (dataProtectionProvider != null) { manager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser> (dataProtectionProvider.Create("ASP.NET Identity")) { TokenLifespan = TimeSpan.FromHours(1) }; } 您可以使用自己的机制来检查以前使用过的令牌. 3)更新SecurityStamp.这将使为该用户发布的所有令牌无效,包括cookie.最好使用自己的想法来使密码重置令牌过期. 作为示例,您可以使用另一列来在数据库中存储任何生成的密码重置令牌并对其进行验证(可能有更好的方法). 请记住,登录access_token的生成方式不同,并且它具有您在Owin启动承载令牌到期时间中设置的到期时间. 希望这可以帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – HttpPost和HttpGet属性在MVC:为什么使用Ht
- asp.net – 如何从外部计算机连接到Amazon EC2 Windows Ser
- 在ASP.NET中构建动态“高级搜索”控件的建议
- asp.net-mvc – 如何防止用户导航回上一页?
- asp.net – ASP和’不起作用
- asp.net – 返回新的RedirectResult()vs返回Redirect()
- 将List <>绑定到asp.net中的listview#
- asp.net – ascx中的Updatepanel刷新了整个控件
- 如何使用ASP.NET MVC Web API OData链接到Razor中的OData集
- 什么是Application Server for ASP.NET?
- 如何使用ASP.NET MVC Web API OData链接到Razor中
- 如何在ASP.NET中为不同的URL设置不同的超时
- 显示下载进度条的下载文件代码
- asp.net-mvc – 与Microsoft HTTP Client Librar
- asp.net – App Settings和connectionStrings配置
- 每个请求的ASP.NET 5(VNext)Autofac实例
- asp.net-core – 如何使用Identity Server 4使用
- asp.net-mvc-4 – 在Bind()中解析单例.ToMethod
- asp.net – 在按钮单击时动态添加新文本框
- asp.net – 使用Rake创建IIS网站