OAuth学习整理

作者: codefine | 来源:发表于2018-11-16 17:07 被阅读48次

近期把OAuth系统学习一下,并完成了授权码模式的PHP实现,此篇文章主要介绍OAuth相关知识,分享一些参考资料。

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:资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。

运行流程

运行流程

客户端的授权模式

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

  • 授权码模式(authorization code)
  • 简化模式(implicit)
  • 密码模式(resource owner password credentials)
  • 客户端模式(client credentials)

如何选择适合的授权模式

授权模式选择
  • 授权码模式:第三方WEB应用常用模式,用户登录三方应用,获得临时授权code, 第三方应用通过code换取access_token ,访问资源服务器。
  • 简化模式: 基于浏览器认证,可以用在浏览器单页应用。
  • 客户端模式:客户端直接获取授权,与用户无关,一般用于API认证
  • 密码模式:用户把用户名和密码发送给第三方应用,第三方应用拿着用户名和密码去授权服务器校验。第三方应用和授权服务器是同一家公司或者是非常可信的大公司。
授权码模式

开发流程

  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

OAuth2的PHP类库

资料

相关文章

  • OAuth学习整理

    近期把OAuth系统学习一下,并完成了授权码模式的PHP实现,此篇文章主要介绍OAuth相关知识,分享一些参考资料...

  • Spring cloud OAuth2 and JWT

    参考:Spring cloud oauth2.0学习总结spring-security-oauth2官方sprin...

  • Oauth学习

    Oauth工作原理 什么是Oauth 官方网站1.Oauth是一种安全认证的协议2.Oauth协议为用户资源的授权...

  • Jenkins常用插件清单

    整理下自己平时常用的jenkins插件 添加Github授权认证 Github OAuth Plugin 添加构建...

  • 微服务安全

    OAuth2 白话OAuth2 什么是OAuth Spring Security OAuth2

  • OAuth2基本概念

    OAuth2 基础概念 标签(空格分隔): OAuth2 什么是OAuth2 ? OAuth2.0是OAuth协议...

  • Spring Cloud Security OAuth2

    一、环境介绍 Spring-Security-OAuth2是对OAuth2的一种实现,并且跟之前学习的Spring...

  • 05 Spring Social开发第三方登陆(未完)

    OAuth协议OAuth协议解决什么问题OAuth协议的角色OAuth协议的运行流程OAuth授权模式小结 Spr...

  • OAuth 2.0 学习

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

  • OAuth学习笔记

    翻译自下面这篇文章https://developer.yahoo.com/oauth/guide/oauth-au...

网友评论

本文标题:OAuth学习整理

本文链接:https://www.haomeiwen.com/subject/ptnmfqtx.html