OAuth 2.0 入门指南:理解关键概念和流程

1 OAuth官网地址

OAuth 2.0 — OAuthicon-default.png?t=N7T8https://oauth.net/2/

2 OAuth2能解决哪些问题域和场景?

    2.1 开放系统间授权

        (1)社交联合登录

        (2)开放API平台

    2.2 现代微服务安全

        (1)单页浏览器APP(HTML5、JS、无状态)
        (2)无线原生APP
        (3)服务器端WebApp
        (4)微服务与API间调用

    2.3 企业内部应用认证授权(IAM/SSO)

3 初识OAuth2

场景描述

假设有个客户应用需要访问用户的数据,如下图所示↓

auth_pic_01


        如果说这个时候我们来了一个恶意的客户,那么如果没有安全限制的话,就会出现资源服务器也会把用户数据给到恶意的客户,所以我们需要一种安全保护机制来保护用户数据。
        业界实践是提前给客户应用颁发一个Access Token(访问令牌),它表示客户应用被授权可以访问用户数据,如下图所示↓ 

auth_pic_02

        该机制可以工作的前提是必须提前给客户应用颁发Access Token,那么谁来颁发Access Token呢?

        答:授权服务器,由它来颁发和管理Access Token。

客户应用和授权服务器之间的交互流程如下:

 (1)首先客户应用请求Access Token
 (2)授权服务器征询用户意见,是否将权限授予客户应用
 (3)如果用户同意,则授权服务器会生成一个Access Token 并将它颁发给客户应用
 (4)有了这个Access Token客户应用就可以访问资源服务器拿到用户数据了

auth_pic_03

3.1 什么是OAuth2.0?

(1)用于REST/APIs的代理授权框架(delegated authorization framework)
(2)基于令牌Token的授权,在无需暴露用户密码的情况下,使应用能获取对用户数据的有限访问权限
(3)解耦认证和授权,将认证和授权进行分离
(4)事实上的标准安全框架,支持多种用例场景
        a、服务器端WebApp
        b、浏览器单页SPA
        c、无线/原生APP
        d、服务器对服务器之间
令牌是OAuth2.0的核心,针对令牌它是有一个比喻的,把令牌类比为仆从钥匙(Valet Key),给应用授予有限的访问权限,让应用能够代表用户去访问用户的数据。

3.2 OAuth2.0的历史简介

如下图所示↓

auth_pic_04

3.3 OAuth2.0的优势

(1)OAuth2.0比OAuth1.0易于实现
(2)更安全,客户端不接触用户密码,服务器端更容易集中保护
(3)广泛传播并被持续采用
(4)短寿命和封闭的Token(可以配置时限)
(5)资源服务器和授权服务器解耦
(6)集中式授权,简化客户端
(7)HTTP/JSON友好,易于请求和传递Token
(8)考虑多种客户端架构场景
(9)客户可以具有不同的信任级别(有一些细分权限)

3.4 OAuth2.0的不足

(1)协议框架太宽泛,造成各种实现的兼容性和互操作性差
(2)和OAuth1.0不兼容
(3)OAuth2.0不是一个认证协议,OAuth2.0本身并不能告诉你任何用户信息

3.5 OAuth2.0的四大角色

授权流程渠道(channels)

  • 前端渠道
    凡是资源拥有者、客户应用和授权服务器之间的发生的一些交互(没有资源服务器)
  • 后端渠道
    凡是资源服务器、客户应用和授权服务器之间的发生的一些交互(没有资源拥有者)

    auth_pic_05

3.6 OAuth2.0的术语

  • 客户应用(Client Application)
    通常是一个Web或者无线应用,它需要访问用户的受保护资源
  • 资源服务器(Resource Server)
    是一个Web站点或者web service API,用户的受保护数据保存于此
  • 授权服务器(Authorized Server)
    在客户应用成功认证并获得授权之后,向客户应用颁发说令牌Access Token
  • 资源拥有者(Resource Owner)
    资源的拥有人,想要分享某些资源给第三方应用
  • 客户凭证(Client Credentials)
    客户的clientId和密码用于认证客户
  • 令牌(Tokens)
    授权服务器在接收到客户请求后,颁发的访问令牌
  • 作用域(Scopes)
    客户请求访问令牌时,由资源拥有者额外指定的细分权限(permission)

3.7 OAuth2.0的令牌类型

auth_pic_06

3.8 OAuth2.0的误解

auth_pic_07

4 学习回顾

  • OAuth的本质是如何获取Token、如何使用Token
  • OAuth是一种在系统之间的代理授权(delegation authorization)协议
  • OAuth提供一个宽泛的协议框架,具体按全场景需要定制
  • OAuth使用代理协议的方式解决密码共享反模式问题

客户应用类型如,下图所示↓

auth_pic_08

四种OAuth2.0授权,下图所示↓

auth_pic_09

  • 授权码模式(Authorization Code)
  • 简化模式(Implicit)
  • 密码模式(Resource Owner Password Credentials)
  • 客户端模式(Client Credentials)

未来应用,授权类型选型流程,下图所示↓

auth_pic_10

授权服务器的组成,下图所示↓

    1、授权端点(Authorize Endpoint)
    2、Token端点(Token Endpoint)
    3、校验端点(Introspection Endpoint)
    4、吊销端点(Revocation Endpoint)

auth_pic_11

Spring Security OAuth2架构,下图所示↓

auth_pic_12

  • 26
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

远见阁

你的鼓励就是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值