为了账号安全,请及时绑定邮箱和手机立即绑定

OAuth学习整理

标签:
Premiere

相关知识,分享一些参考资料。

OAuth

OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。

系统角色

(1) Third-party application:第三方应用程序,本文中又称"客户端"(client),即上一节例子中的"云冲印"。

(2)HTTP service:HTTP服务提供商,本文中简称"服务提供商",即上一节例子中的Google。

(3)Resource Owner:资源所有者,本文中又称"用户"(user)。

(4)User Agent:用户代理,本文中就是指浏览器。

(5)Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。

(6)Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。

运行流程

webp

运行流程

客户端的授权模式

客户端必须得到用户的授权(authorization grant),才能获得令牌(access token)。OAuth 2.0定义了四种授权方式。

  • 授权码模式(authorization code)

  • 简化模式(implicit)

  • 密码模式(resource owner password credentials)

  • 客户端模式(client credentials)

如何选择适合的授权模式

webp

授权模式选择

  • 授权码模式:第三方WEB应用常用模式,用户登录三方应用,获得临时授权code, 第三方应用通过code换取access_token ,访问资源服务器。

  • 简化模式:  基于浏览器认证,可以用在浏览器单页应用。

  • 客户端模式:客户端直接获取授权,与用户无关,一般用于API认证

  • 密码模式:用户把用户名和密码发送给第三方应用,第三方应用拿着用户名和密码去授权服务器校验。第三方应用和授权服务器是同一家公司或者是非常可信的大公司。

webp

授权码模式

开发流程

  1. 搭建认证服务器(Authorization server)

GET /authorize?response_type=code&client_id=s6BhdRkqt3&state=xyz
        &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1

参数解释:

  • response_type:表示授权类型,此处的值固定为"token",必选项。

  • client_id:表示客户端的ID,必选项。

  • redirect_uri:表示重定向的URI,可选项。

  • scope:表示权限范围,可选项。

  • state:表示客户端的当前状态,可以指定任意值,认证服务器会原封不动地返回这个值。

用户认证成功,重定向到 redirect_uri 网页,携带code

HTTP/1.1 302 Found
Location: https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA
          &state=xyz

客户端像认证服务器换取 access_token

POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb

2.搭建资源服务器(Resource serve)

POST /api/user HTTP/1.1
Host: server.example.com
access_token=2YotnFZFEjr1zCsicMWpAA

注意事项

  • 应用ID申请:第三方应用程序需要向认证服务器提供商申请,需要填写应用的名称,回调地址,返回client_id和client_secret

  • 用户登录过程:认证服务器必须实现一种登录认证方式,可以是登录页,也可以通过HTTP Basic等方式。

  • redirect_uri: 回调地址必须和申请应用填写保持一致。

  • state:通常做法是将stata和用户会话绑定,在申请token时携带客户端身份,可以用于防止跨站请求攻击(CSRF),认证服务器也可以强制要求客户端携带state



作者:codefine
链接:https://www.jianshu.com/p/b1791af50406


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消