一、什么是OAuth协议
OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准 。与以往的授权方式不同之处是 OAuth的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 OAuth是安全的 。OAuth 是 Open Authorization 的简写 。
文章插图
OAuth 本身不存在一个标准的实现,后端开发者自己根据实际的需求和标准的规定实现 。其步骤一般如下:
- 客户端要求用户给予授权
- 用户同意给予授权
- 根据上一步获得的授权,向认证服务器请求令牌(token)
- 认证服务器对授权进行认证,确认无误后发放令牌
- 客户端使用令牌向资源服务器请求资源
- 资源服务器使用令牌向认证服务器确认令牌的正确性,确认无误后提供资源
所以,身份认证就是为了解决身份的可信任问题 。
在OAuth中,简单来说有三方:用户(这里是指属于服务方的用户)、服务方、第三方应用 。
服务方不信任用户,所以需要用户提供密码或其他可信凭据;
服务方不信任第三方,所以需要第三方提供自已交给它的凭据(通常的一些安全签名之类的就是);
用户部分信任第三方,所以用户愿意把自已在服务方里的某些服务交给第三方使用,但不愿意把自已在服务方的密码交给第三方;
在oauth2.0的流程中,用户登录了第三方的系统后,会先跳去服务方获取一次性用户授权凭据,再跳回来把它交给第三方,第三方的服务器会把授权凭据以及服务方给它的的身份凭据一起交给服务方,这样,服务方一可以确定第三方得到了用户对此次服务的授权(根据用户授权凭据),二可以确定第三方的身份是可以信任的(根据身份凭据),所以,最终的结果就是,第三方顺利地从服务方获取到了此次所请求的服务 。
从上面的流程中可以看出,oauth2.0完整地解决掉了用户、服务方、第三方 在某次服务时这三者之间的信任问题 。
三、OAuth2.0成员
- Resource Owner(资源拥有者:用户)
- Client (第三方接入平台:请求者)
- Resource Server (服务器资源:数据中心)
- Authorization Server (认证服务器)
文章插图
原理很简单,用户访问App,App访问Authorization Server请求权限,
Authorization Server得到用户同意后,返回token,
App通过这个token向Authorization Server索要数据,
App只能从Authorization Server这个中介获取服务器数据,而无法直接访问Resource Server 。
四、第三方客户端的授权模式客户端必须得到用户的授权(authorization grant),才能获得令牌(access token) 。OAuth 2.0定义了四种授权方式 。
- 授权码模式(authorization code)
- 简化模式(implicit)
- 密码模式(resource owner password credentials)
- 客户端模式(client credentials)
文章插图
它的步骤如下:
- 用户访问客户端,后者将前者导向认证服务器 。
- 用户选择是否给予客户端授权 。
- 假设用户给予授权,认证服务器将用户导向客户端事先指定的"重定向URI"(redirection URI),同时附上一个授权码 。
- 客户端收到授权码,附上早先的"重定向URI",向认证服务器申请令牌 。这一步是在客户端的后台的服务器上完成的,对用户不可见 。
- 认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token) 。
步骤1: 客户端申请认证的URI,包含以下参数:
- response_type:表示授权类型,必选项,此处的值固定为"code"
- client_id:表示客户端的ID,必选项 。(如微信授权登录,此ID是APPID)
推荐阅读
- 喝茶不是学习 是生活 把玩 道就在其中
- 学习正山小种,更专业
- 微信按下这个按钮,可以知道谁把你拉黑了,赶快试一下吧
- 华为手机找回功能了解一下:帮你找回手机
- 失而复得 华为“查找手机”功能有多强大?快来了解一下
- 学习Android开发的二十套免费理想资源
- 日本宫城县中国留学生学习点茶 感受日本传统文化
- 地暖清洗后温度反而降低了 地暖清洗一下会不会改善温度
- 对一次 redis 未授权写入攻击的分析以及学习
- 停下你匆忙的脚步欣赏一下沿途的风景 放慢你匆匆的脚步