最近在研究restful,在restful协议中,强调不使用session,但可以少量使用cookie。以保持restful的无状态性。
但是在实际使用中,有一个最大的问题,就是当应用需要用户登陆认证时,应该怎么处理。
在这里我的处理方法主要是把用户登陆后,把用户名+密码+ip地址+最后更新时间通过一个可逆加密后做为token,写入cookie,然后在需要认证的应用时,由php等程序读取cookie中的token,并把用户名、密码、ip地址及最后更新时间解密出来。
先判断时间是否过期,过期的话,清除cookie,要求重新登陆!
再判断cookie中的ip是否与当前客户端ip一致,如果不等,要求重新登陆。
时间和ip都通过的话,则把用户名、密码做判断,判断是否正确,正确的话,把用户基本信息存在一全局变量中!
做后续应用,同时把生成新的token(主要是时间)写入cookie。
这样的话就解决了三个问题
第一、时效,cookie有一个生存时间、同时在token中也存储时间,方便让令牌失效;
第二、解决了cookie欺骗问题,因为token记录了客户端的ip地址;
第三、解决了安全问题,采用可逆加密,就算得到token在没有解密key的情况下也无法破解得用户名及密码。
还有一个情况,同时把token保存到服务器,这样更容易控制!但是把东西记录到服务器的话,其实它不就是session了么,伪session而以,所以还是不建议这么用!
[转自:http://www.phpabc.cn/restfulzai-bu-yong-sessionde-qing-kuang-xia-zuo-yong-hu-ren-zheng.html]
分享到:
相关推荐
Restful安全认证及权限管理是Web应用程序中至关重要的环节,确保了系统数据的安全性和用户访问的合法性。本文主要探讨了三种常见的Restful安全认证方法,着重介绍了JWT(JSON Web Token)及其实施步骤。 首先,传统...
此外,Spring Session 还支持在 RESTful API 中使用 JSON Web Tokens (JWT) 进行会话管理。 3. **配置 Spring Session** 配置 Spring Session 需要在 Spring Boot 应用中添加对应的依赖,并在配置文件中指定会话...
- **版本控制**:在 Makefile 中集成 Git,实现命令行下版本管理。 #### 五、测试阶段 ##### 5.1 单元测试 - **编写测试用例**:针对每个函数编写测试用例,确保覆盖率达到一定标准。 - **测试驱动开发**:采用 ...
3. 无状态:这里的无状态是指每个 RESTful API 请求都包含了所有足够完成本次操作的信息,服务器端无需保持 Session,无状态对于服务端的弹性扩容是很重要的。 在实际开发中,RESTful API 由于天然和 HTTP 协议...
在本文中,我们将深入探讨如何在Spring Boot应用中使用拦截器(Interceptor)和过滤器(Filter)来处理用户的登录session。这两个组件都是Spring框架的重要部分,它们在处理HTTP请求和响应时发挥着关键作用。 首先...
在这个项目中,Redis作为Spring Session的后台存储,存储用户的会话信息,保证了在高并发场景下的会话一致性。 Mybatis-Plus是在Mybatis基础上进行扩展的ORM(对象关系映射)框架,简化了对数据库的操作,包括插入...
OAuth2.0是一种开放标准,允许用户让第三方应用在不获取用户名和密码的情况下,能够有限度地访问其存储在另一服务器上的私人资料。授权码模式是OAuth2.0中的四种授权类型之一,适用于有服务器端的应用场景,而客户端...
在Rails应用中,用户认证和授权是常见的需求,用于保护应用资源的安全。"http_authentication"和"restful-authentication"是两个早期的Rails登录和验证插件,它们为Rails应用提供了基本的身份验证功能。 HTTP基本...
总之,`smallapp-session-master`项目为我们提供了微信小程序中用户会话管理的一个实际示例,它展示了如何安全、有效地实现登录状态的保持,对于理解和实践微信小程序的用户认证与授权机制非常有帮助。通过研究这个...
在cookie-session方案中,cookie内仅包含一个session标识符,而诸如用户信息、授权列表等都保存在服务端的session中。如果把session中的认证信息都保存在JWT中,在服务端就没有session存在的必要了。当服务端水平...
在Yii2中,通常推荐将用户组件的enableSession设置为false,因为RESTful API是无状态的,不应该依赖于session来保持用户认证状态。相应地,loginUrl也应设置为null,这样在用户未认证时,会直接返回HTTP 403错误,而...
6. **认证与授权**:RESTful API的安全性至关重要。Laravel提供了多种身份验证策略,如Token-based验证(如JWT)、OAuth2和Session验证。我们可以根据项目需求选择合适的方式,确保只有授权的用户可以访问特定资源。...
与Cookie不同,Session数据存储在服务器上,而用户通过一个唯一的Session ID与特定的会话关联。当用户访问网站时,服务器会为他们分配一个新的Session ID,并将其通过Cookie返回给浏览器。之后,每次请求,浏览器...
在login动作中,使用Django的authenticate函数进行用户认证,并通过检查session中的用户ID来确认是否需要重新登录。注册动作中,先检查用户名是否存在,如果已存在,则抛出权限拒绝异常。在登出动作中,通过logout...
在用户认证过程中,可以使用中间件来检查session ID,验证用户是否已登录,未登录则重定向到登录页面。 8. **登录成功跳转**:一旦用户身份验证通过,服务器会设置session,并将用户重定向到系统的主界面。这通常...
### 后端开发脚本详解:使用Python的Flask框架创建基本RESTful API ...尽管如此,在实际生产环境中,还需要考虑更多的因素,如安全性(认证和授权)、错误处理、输入验证等,以确保API的稳定性和可靠性。
综上所述,《韩顺平用户管理系统程序》是一个全面的实践项目,涵盖了Web开发中的多个重要知识点,对于想要提升数据库管理、用户认证、Web安全及前后端交互技能的学习者来说,是一个非常有价值的资源。通过这个项目,...
2. **处理Session超时**:Shiro可以自动处理session过期问题,当用户长时间未操作,会自动登出。 3. **权限细粒度控制**:不仅可以基于角色分配权限,还可以对单个URL或者资源进行权限控制,实现更灵活的权限策略。 ...