OAuth2.0授权方式以及误区

👩‍💻博客主页:大家好我是poizxc2014的博客主页

✨欢迎关注🖱点赞🎀收藏⭐留言✒
📖个人主页:poizxc2014的博客_CSDN博客-数据库,mysql,java领域博主

💻首发时间:🎞2022年08月07日🎠
🔥💖🔮😘🔏🀄🎧如果觉得博主的文章还不错的话,👍请三连支持一下博主哦🤞

最后的话,在很多方面还做的不好的地方,欢迎大佬指正,一起学习哦,冲冲冲

目录

🔥误区一:JWT 和 OAuth2 区别与关系

🔥1. JWT是一种认证协议

🔥2. OAuth2是一种授权框架

🔥3. JWT 与 OAuth2 的联系

🔥OAuth2.0中四种授权方式

🔥授权码模式(authorization code)

🔥简化模式(implicit)

🔥密码模式(resource owner password credentials)

🔥客户端模式(client credentials)


🔥误区一:JWT 和 OAuth2 区别与关系

JWT 和 OAuth2 是两个完全不同的东西,两者在使用场景和底层原理有很大的差异,OAuth2 是一种授权框架,JWT是一种认证协议。

🔥1. JWT是一种认证协议

JWT提供了一种用于发布接入令牌(Access Token),并对发布的签名接入令牌进行验证的方法。 令牌(Token)本身包含了一系列声明,应用程序可以根据这些声明限制用户对资源的访问。

详见:JWT基础--什么是 JWT?_poizxc2014的博客-CSDN博客

🔥2. OAuth2是一种授权框架

OAuth2是一种授权框架,提供了一套详细的授权机制(指导)。用户或应用可以通过公开的或私有的设置,授权第三方应用访问特定资源。

🔥3. JWT 与 OAuth2 的联系

既然 JWT 和 OAuth2 没有可比性,为什么还要把这两个放在一起说呢?实际中确实会有很多人拿JWT和OAuth2作比较。很多情况下,在讨论OAuth2的实现时,会把JSON Web Token作为一种认证机制使用。这也是为什么他们会经常一起出现。

JWT 和 OAuth2 最大的不同是应用场景不同。

OAuth2 用在使用第三方账号登录的情况(比如使用 weibo, qq, github 登录某个 app)。

JWT 用在前后端分离,需要简单的对后台API进行保护时使用,前后端分离无 session,,频繁传用户密码不安全。

OAuth2 是一个相对复杂的协议,有4种授权模式, 其中的 access code 模式在实现时可以使用 JWT 生成 code,也可以不用。所以,它们之间没有必然的联系,OAuth2 有 client 和 scope 的概念,JWT 没有。如果只是拿来用于颁布 token 的话,二者没区别。常用的 bearer 算法 oauth、jwt 都可以用,只是应用场景不同。

🔥OAuth2.0中四种授权方式

按照上图的场景来说明四种模式

🔥授权码模式(authorization code)

流程

说明:【A服务客户端】需要用到【B服务资源服务】中的资源

  • 第一步:【A服务客户端】将用户自动导航到【B服务认证服务】,这一步用户需要提供一个回调地址,以备 【B服务认证服务】返回授权码使用。
  • 第二步:用户点击授权按钮表示让【A服务客户端】使用【B服务资源服务】,这一步需要用户登录B服务,也 就是说用户要事先具有B服务的使用权限。
  • 第三步:【B服务认证服务】生成授权码,授权码将通过第一步提供的回调地址,返回给【A服务客户端】。 注意这个授权码并非通行【B服务资源服务】的通行凭证。
  • 第四步:【A服务认证服务】携带上一步得到的授权码向【B服务认证服务】发送请求,获取通行凭证token。
  • 第五步:【B服务认证服务】给【A服务认证服务】返回令牌token和更新令牌refresh token。

使用场景

授权码模式是OAuth2中最安全最完善的一种模式,应用场景最广泛,可以实现服务之间的调用,常见的微 信,QQ等第三方登录也可采用这种方式实现。

🔥简化模式(implicit)

流程

说明:简化模式中没有【A服务认证服务】这一部分,全部有【A服务客户端】与B服务交互,整个过程不再有 授权码,token直接暴露在浏览器。

  • 第一步:【A服务客户端】将用户自动导航到【B服务认证服务】,这一步用户需要提供一个回调地址,以备 【B服务认证服务】返回token使用,还会携带一个【A服务客户端】的状态标识state。
  • 第二步:用户点击授权按钮表示让【A服务客户端】使用【B服务资源服务】,这一步需要用户登录B服务,也 就是说用户要事先具有B服务的使用权限。
  • 第三步:【B服务认证服务】生成通行令牌token,token将通过第一步提供的回调地址,返回给【A服务客户 端】。

使用场景

适用于A服务没有服务器的情况。比如:纯手机小程序,JavaScript语言实现的网页插件等

🔥密码模式(resource owner password credentials)

流程

  • 第一步:直接告诉【A服务客户端】自己的【B服务认证服务】的用户名和密码
  • 第二步:【A服务客户端】携带【B服务认证服务】的用户名和密码向【B服务认证服务】发起请求获取 token。
  • 第三步:【B服务认证服务】给【A服务客户端】颁发token。

使用场景

此种模式虽然简单,但是用户将B服务的用户名和密码暴露给了A服务,需要两个服务信任度非常高才能使 用

🔥客户端模式(client credentials)

流程

说明:这种模式其实已经不太属于OAuth2的范畴了。A服务完全脱离用户,以自己的身份去向B服务索取 token。换言之,用户无需具备B服务的使用权也可以。完全是A服务与B服务内部的交互,与用户无关了。

  • 第一步:A服务向B服务索取token。
  • 第二步:B服务返回token给A服务。

使用场景

A服务本身需要B服务资源,与用户无关。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值