JWT、OOS、Oauth三种登录验证机制

JWT(Json web token)

参考

传统方案:
1) 存储到session(结合redis缓存)
浏览器存储sessesid,服务器集群,
信息存在在后台统一的session服务器
没有分布式架构,无法支持横向扩展
2) 存储到cookie
将验证信息保存在数据库中,后端每次都需要根据token查出用户id,
这就增加了数据库的查询和存储开销。若把验证信息保存在session中,
又加大了服务器端的存储压力。
本质:存储信息在服务端
3)jwt
如果我们生成token遵循一定的规律,比如我们使用对称加密算法来加密
用户id形成token,那么服务端以后其实只要解密该token就可以知道用户的id
jwt中使用对应算法对用户信息加密。
jwt的目的

  • 解决跨域
  • 多个服务器

JWT实现:

在服务器身份验证之后,将生成一个JSON对象并将其发送回用户
···
{
“UserName”: “Chongchong”,
“Role”: “Admin”,
“Expire”: “2018-08-08 20:15:56”
}
···
客户在请求中发回JSON对象。服务器仅依赖于这个JSON对象来标识用户。
为了防止用户篡改数据,服务器将在生成对象时添加签名

结构由三部分组成

1) JWT头:
{
“alg”: “HS256”,
“typ”: “JWT”
}
它会使用 Base64 编码组成 JWT 结构的第一部分,
2) JWT的主体:
一个JSON对象
{
“iss”: “link JWT”,
“iat”: 1441593502,
“exp”: 1441594722,
“aud”: “www.example.com”,
“sub”: “user”
}
iss(签发者)
exp(过期时间)
sub(面向的用户)
aud(接收方)
iat(签发时间)
它会使用 Base64 编码组成 JWT 结构的第二部分
3) 签名哈希:
Signature 需要使用编码后的 header 和 payload 以及我们提供的一个密钥,
然后使 用 header 中指定的签名算法(HS256)进行签名。
签名的作用是保证 JWT 没有被篡改过
三个部分组合成一个字符串,每个部分用"."分隔,就构成整个JWT对象

  • 一般是将它放入HTTP请求的Header Authorization字段

缺点:
一旦JWT签发,在有效期内将会一直有效
JWT的有效期不宜设置太长。对于某些重要操作,
用户在使用时应该每次都进行进行身份验证或手机验证码。
尽量使用 https

在这里插入图片描述

OOS单点登录

  • 同域名: session+redis(共享)
    注意:cookie不能跨域
  • 不同域名:

CAS:在请求CAS Client 时用户必须带有CAS Server
生成的Service Ticket
流程:
1、用户访问CAS Client
2、重定向到CAS Server为验证成功(保存登录信息)用户生成Service Ticket
3、将Service Ticket传递CAS Client、
4、CAS Client向Service Ticket发起验证,成功返回user info

oauth

第三方授权机制

带你区分清楚Authentication,Authorization以及Cookie、Session、Token

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当用户第一次访问web应用系统1的时候,因为还没有登录,会被引导到认证中心进行登录;根据用户提供的登录信息,认证系统进行身份效验,如果通过效验,返回给用户一个认证的凭据;用户再访问别的web应用的时候就会将这个Token带上,作为自己认证的凭据,应用系统接受到请求之后会把Token送到认证中心进行效验,检查Token的合法性。如果通过效验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。所有应用系统共享一个身份认证系统。认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志,返还给用户。另外,认证系统还应该对Token进行效验,判断其有效性。 所有应用系统能够识别和提取Token信息要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对Token进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。 比如说,我现在有3个分站点和1个认证中心(总站)。当用户访问分站点的时候,分站点会发Token到验证中心进行验证验证中心判断用户是否已经登录。如果未登录,则返回到验证中心登录入口进行登录,否之则返回Token验证到分站点,直接进入分站点
Spring Security是一个功能强大的安全框架,用于在Java应用程序中实现身份验证和授权。JWT(JSON Web Token)是一种轻量级的身份验证和授权机制,其中包含了验证用户身份的加密信息。OAuth 2.0是一种开放标准的授权协议,它允许用户授权第三方应用程序访问受保护的资源。 Spring Security可以与JWTOAuth 2.0结合使用,以提供更强大的身份验证和授权功能。使用JWT作为身份验证机制,可以在用户登录成功后生成一个JWT令牌,并将其加入到HTTP请求的Header中。服务端可以使用JWT中的信息,如用户名和权限,对请求进行验证,确保用户的身份是有效的。而OAuth 2.0允许用户通过授权服务器颁发的token来访问受保护的资源,Spring Security可以集成OAuth 2.0来实现授权验证的逻辑。 通过使用Spring Security结合JWTOAuth 2.0,可以轻松实现可伸缩、安全的身份验证和授权机制。开发人员可以使用Spring Security提供的各种功能,如用户认证、角色授权和访问控制,来保护应用程序中的敏感操作和数据。此外,使用JWTOAuth 2.0,可以实现无状态的API身份验证和授权,提高系统的可扩展性和性能。 总之,Spring Security与JWTOAuth 2.0的结合为应用程序提供了安全、可靠的身份验证和授权机制。开发人员可以根据具体的需求配置和使用这些功能,以保护应用程序的安全和数据的机密性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值