浅谈OAuth

一、 为什么会有OAuth?

举个例子(举例而已并不真实
有一个运动软件,可以将微信好友运动量的排行。而用户为了使用此功能必须授权运动软件读取微信好友列表。

那怎么让运动软件怎么获取用户的同意呢?

我们可以将微信的账号和密码告诉这个运动软件,运动软件就可以读取微信好友列表了。

但我们很明显能发现这种方法有很大问题:

  1. 很不安全。运动软件需要经常性获取好友列表,所以会一直保存账号密码;
  2. 而运动软件也可以获得微信的其他权限;
  3. 如果运动软件被攻击导致破解会使得密码泄露;
  4. 而用户想收回权限的时候,只有通过修改密码实现,同时也会导致其他被授权的软件不能使用。

所以才有了OAuth。

二、 什么是OAuth

OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。同时,任何第三方都可以使用OAUTH认证服务,任何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP、JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。

OAuth协议特点

  1. 简单:不管是OAUTH服务提供者还是应用开发者,都很易于理解与使用;
  2. 安全:没有涉及到用户密钥等信息,更安全更灵活;
  3. 开放:任何服务提供商都可以实现OAUTH,任何软件开发商都可以使用OAUTH;

三、 运行流程

image.png

Client:客户端
Resource Ower:资源拥有者
Authorization Service: 验证服务器
Resource Service: 资源服务器

(A) 请求授权 用户打开客户端以后,客户端要求用户给予授权。
(B) 授权许可 用户同意给予客户端授权。
(C) 授权许可 客户端使用上一步获得的授权,向认证服务器申请令牌。
(D) 访问令牌 认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
(E) 访问令牌 客户端使用令牌,向资源服务器申请获取资源。
(F) 受保护的资源 资源服务器确认令牌无误,同意向客户端开放资源。

四、 授权模式

有四种授权模式

1. 授权码模式(Authorization Code)

image.png

2. 密码模式(Resource Owner PasswordCredentials)

image.png

3. 简化模式(implicit)

image.png

4. 客户端模式(client credentials)

image.png

下期详细聊聊四种模式。

参考资料:
Oauth2.0协议rfc6749 https://datatracker.ietf.org/doc/html/rfc6749
阮一峰的网络日志 https://www.ruanyifeng.com/blog/2019/04/oauth_design.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OAuth2的access_token是用于访问受保护的资源时进行身份验证和授权的凭证。通过将access_token附加到请求头或请求参数中,客户端可以向资源服务器发送请求并获得资源的访问权限。access_token通常是使用JWT(JSON Web Token)进行签名的,以确保其安全性和完整性。然而,access_token只提供了身份验证的功能,而没有提供有关用户的其他信息。这就是为什么在OAuth2中还存在idToken的原因。idToken是一个包含用户相关信息的令牌,如用户ID、姓名、电子邮件等。它通常被用于提供身份验证和用户信息的完整性,并且可以通过认证服务器的/token端点进行验证。因此,通过同时使用access_token和idToken,客户端可以获得对资源的访问权限,并获得关于用户的更详细的信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【笔记】浅谈OAuth2 accessToken和OIDC idToken的理解和使用场景](https://blog.csdn.net/qq_26878363/article/details/115394602)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [springsecurity-oauth2令牌 access_token验证](https://blog.csdn.net/clonetx/article/details/125395593)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值