对比三种认证方式:传统token认证,jwt认证,oauth认证

1. Token基本原理

1、客户端使用用户名跟密码请求登录;

2、服务端收到请求,去验证用户名与密码;

3、验证成功,服务端会签发一个Token(也就是随机生成一个字符串)保存到(Session,redis,mysql…)中,然后再把这个 Token 发送给客户端;

4、客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里;

5、客户端每次向服务端请求资源的时候需要带着服务端签发的 Token;

6、服务端收到请求,验证密客户端请求里面带着的 Token和服务器中保存的Token进行对比校验, 如果验证成功,就继续执行客户端请求的业务逻辑,否则就是验证失败报错返回给客户端;

1.1 token示例

传统的token认证,这个token就是一个随机字符串。服务端收到后,直接拿去查库比对,确认用户信息。

2. jwt认证原理

1、客户端使用用户名跟密码请求登录;

2、服务端收到请求,去验证用户名与密码;

3、验证成功,服务端会在配置文件中配置一个jwt的secret。根据secret签发一个JwtToken,无须存储到服务器,直接再把这个JwtToken发送给客户端;

4、客户端收到JwtToken以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里;

5、客户端每次向服务端请求资源的时候需要带着服务端签发的JwtToken;

6、服务端收到请求,使用jwt的secret验证密客户端请求里面带着的 JwtToken,如果验证成功,就继续执行客户端请求的业务逻辑,否则就是验证失败报错返回给客户端;

2.2 jwt token示例

这个服务端和客户端一直传输的jwttoken长啥样呢?长下面这样。

就是一个字符串,分三个部分,通过.连接起来。

Header.Payload.Signature

拆解如下:

base64UrlEncode(header)   + .  + base64UrlEncode(payload)   + .  + 签名(HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret))

2.2.1 header
# JWT头部分是一个描述JWT元数据的JSON对象,通常如下所示。
{
   "alg": "HS256",
   "typ": "JWT"
}
# 1)alg属性表示签名使用的算法,默认为HMAC SHA256(写为HS256);
# 2)typ属性表示令牌的类型,JWT令牌统一写为JWT。
# 3)最后,使用Base64 URL算法将上述JSON对象转换为字符串保存。
2.2.2 Payload
#1、有效载荷部分,是JWT的主体内容部分,也是一个JSON对象,包含需要传递的数据。 JWT指定七个默认 字段供选择。
'''
iss:发行人
exp:到期时间
sub:主题
aud:用户
nbf:在此之前不可用
iat:发布时间
jti:JWT
ID用于标识该JWT
'''

#2、除以上默认字段外,我们还可以自定义私有字段,如下例:
{
"sub": "1234567890",
"name": "chongchong",
"admin": true
}
#3、注意 默认情况下JWT是未加密的,任何人都可以解读其内容,因此不要构建隐私信息字段,存放保密信息,以防 止信息泄露。
JSON对象也使用Base64 URL算法转换为字符串保存
2.2.3 签名哈希

签名=HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret)

# 1.签名哈希部分是对上面两部分数据签名,通过指定的算法生成哈希,以确保数据不会被篡改。
# 2.首先,需要指定一个密码(secret),该密码仅仅为保存在服务器中,并且不能向用户公开。
# 3.然后,使用标头中指定的签名算法(默认情况下为HMAC SHA256)根据以下公式生成签名。
# 4.HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload),secret)
# 5.在计算出签名哈希后,JWT头,有效载荷和签名哈希的三个部分组合成一个字符串,每个部分用"."分 隔,就构成整个JWT对象

这样一个结构,服务端拿到这个jwt token后,结合自己的secret 对前面两部分进行签名,再和jwt token中的签名进行对比,就能直接判断这个jwt token的真实性。而不再像传统认证那样去查库才能认证了。

3oauth认证原理


 OAuth(开放授权)是一个开放标准,用于授权一个应用程序或服务访问用户在另一个应用程序中的资源,而无需提供用户名和密码。这使得用户可以安全地分享他们的数据资源,同时保持对其数据的控制。OAuth 2.0在现代互联网应用中被广泛使用,例如,你可以使用你的Google账号登录到其他网站,这就是OAuth的一种应用。

简单来说:OAuth 2.0 是目前最流行的授权机制,用来授权第三方应用,获取用户数据。

token&jwt  都是系统自己的用户的认证方式。

oauth   是系统允许其他系统的用户来登录自己的系统。比如很多系统需要微信授权登录,实际上就是用户用微信的用户信息,登录自己的系统。作为自己系统的用户。

允许其他用户登录自己系统,还有单点登录。

单点登录,登录一个系统后,自动登录其他系统。

OAuth 2.0广泛应用于各种场景,以下是一些常见的应用场景:

  • 社交登录:用户可以使用他们的社交媒体帐户登录到其他应用程序,例如使用Google或Facebook登录。

  • API访问:开发人员可以使用OAuth 2.0来访问第三方API,例如使用GitHub API或Twitter API。

  • 单点登录:用户可以使用一个身份验证提供商登录到多个相关的应用程序,而无需多次输入凭证。

  • 授权访问:应用程序可以请求用户授权访问其资源,例如Google云存储或Dropbox。

  • 移动应用授权:移动应用程序可以安全地请求访问用户数据,如照片、联系人或位置信息。

3.1认证原理

OAuth 的核心就是向第三方应用颁发令牌。

而oauth定义了获得令牌的四种授权方式:

  • 授权码(authorization-code)
  • 隐藏式(implicit)
  • 密码式(password):
  • 客户端凭证(client credentials)

最常用的是授权码模式。

3.1.1. 授权码模式

用户访问想要访问a系统,a系统上有可以用b系统(微信)来登录。用户选择b系统登录,跳转到b系统去授权,用户点击同意授权,接着会返回到b系统中,拿到授权码。这时候用户继续访问a系统。a系统用这个授权码访问b系统(微信)。微信判断这个授权码正确,然后派发token。返回正确。a系统则可以用这个token访问用户在B系统(微信)上的资源。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Spring Boot、OAuth2.0和JWT Token鉴权认证开发的后台接口是一种使用现代化技术实现的身份验证和授权机制。下面是关于这种后台接口的一些说明: 首先,Spring Boot是一个基于Spring框架的快速开发框架,提供了简化的配置和自动化的特性,使开发者能够更快速高效地开发后台接口。 OAuth2.0是一种开放标准的授权协议,它允许用户授权第三方应用访问他们在资源拥有者上存储的信息,而不需要将用户名和密码提供给第三方。 JWT Token(JSON Web Token)是一种用于在网络应用间安全传递声明的一种方式。它被用作身份验证和授权的令牌,通过加密并以JSON格式存储信息,确保信息的完整性和安全性。 基于以上技术,我们可以开发出具有强大安全认证能力的后台接口。首先,用户在访问接口时,需要提供他们的身份证明,这可以是用户名和密码。接口服务器会使用OAuth2.0协议进行身份验证,并颁发JWT Token给用户。用户在未来的请求中,可以使用该Token进行身份验证,而无需每次都提供用户名和密码。 接口服务器会对JWT Token进行验证,以确保Token的完整性和有效性。如果Token失效或被伪造,访问将被拒绝。如果验证通过,接口服务器会正常处理用户的请求。 使用Spring Boot和OAuth2.0进行开发,可以方便地设置权限和角色。可以根据用户的角色和权限,限制他们对某些资源的访问。 总之,基于Spring Boot、OAuth2.0和JWT Token鉴权认证开发的后台接口提供了一种安全可靠的身份验证和授权机制,能够有效保护后台接口的安全性,防止非法访问和数据泄露。这种技术组合在开发现代化的网络应用时非常有用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值