我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:六合特肖 > 访问令牌 >

OAUTH2ppt

归档日期:07-07       文本归类:访问令牌      文章编辑:爱尚语录

  1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。

  OAUTH 2.0 介绍 当前问题 第三方应用(如beeper)需要能访问到一些服务器托管资源(如消息服务器中的用户信息等资源)。这些资源通常都是受保护的,并且要求使用资源拥有者的私有证书(典型的证书是用户名和密码)进行身份验证。 安全问题 第三方应用需要用明文保存资源拥有者的私有证书,留作以后再次使用。 如:当前beeper与消息服务器公用的同一个数据库且拥有访问用户信息的权限,直接可以访问用户所有信息。 第三方应用对资源拥有者的受保护资源获得过多的使用权限,而资源拥有者没有能力限制访问到某个资源子集,限制持续时间,或限制这些资源所能支持的访问方式。 如:beeper服务器拥有用户在消息服务器上保存的所有资源,用户将无法限制beeper服务获取资源的权限。 资源拥有者无法在不影响所有第三方的前提下单独撤销某个第三方的访问权限,只能通过修改密码来回收所有权限。 如:beeper服务器拥有用户在消息服务器上保存的所有资源,用户即使修改自己的密码,也无法取消beeper的授权。 当前消息服务器收发消息没有做身份验证。 开发问题 开发者需要为每个服务器开发登录接口 解决方案 – 授权代理(oauth2) 概述 OAuth 为客户端提供了一种代表资源拥有者访问受保护资源的方法。 在客户端访问受保护资源之前,它必须先从资源拥有者获取授权(访问许可),然后用访问许可交换访问令牌(代表许可的作用域、持续时间和其它属性)。 客户端通过向资源服务器出示访问令牌来访问受保护资源。 基本概念 资源拥有者/用户(Resource Owner) 受保护的数据(如个人信息)或者服务的拥有人 一般是具体的用户 资源服务器(Resource Server) 提供资源的服务器,如保存了个人照片的服务器... 资源服务器通过服务接入提供对保护资源的访问 客户端/第三方应用(Client/3rd App) 拿资源拥有者的凭证去访问保护资源并再加工为资源拥有者提供更多的服务 授权服务器(Authorization Server) 用来认证授权并向第三方应用发放令牌的服务器 资源拥有者、第三方应用、资源服务器之间的授权代理 认证授权流程 (A). 客户端从资源拥有者那里请求授权。 (B). 客户端收到一个访问许可,它代表由资源服务器提供的授权。 (C). 客户端使用它自己的私有证书到授权服务器上验证,并出示访问许可,来请求一个访问令牌。 (D). 授权服务器验证客户端私有证书和访问许可的有效性,如果验证通过则分发一个访问令牌。 (E). 客户端通过出示访问令牌向资源服务器请求受保护资源。 (F). 资源服务器验证访问令牌的有效性,如果验证通过则响应这个资源请求。 Tips: - 资源服务器在收到服务请求时会与授权服务器交互验证该令牌有效性 如果令牌无效,会返回4xx异常 - 为提高执行效率,资源服务器一般会提供带时效的缓存来保存访问令牌,但是这样的负面作用是用户撤销授权后还会有一段时间服务依然会通过 具体实现 oauth2的四种实现方式 授权码授权(服务端WEB应用流程) 这是基于网页的授权方式。 客户端在请求验证前,需要先将浏览器跳转到用户授权页面,用户在登陆并确认授权后将浏览器Redirect到获得ClientID是注册的回调地址。这个地址中包含一个code参数。 用户根据该参数请求服务器获得Access Token。该认证授权流程包含了图片中的所有步骤。 隐式授权(客户端WEB应用流程) 这是一种适合JS等网页语言使用的认证方式。 这种认证方式比较简单,首先将页面引导至用户授权页面,用户授权后直接跳转到回调地址,并将Access Token作为地址参数传递给页面,方便脚本语言(JS)的访问。 用户密码凭证(资源拥有者密码凭证流程) 这是一种比较大的信任授权方式。 前提条件是用户对你的应用有绝对的信任,愿意在你的应用(Client)中输入自己的用户名和密码。 客户端通过用户名和密码进行验证,并得到Access Token。 客户端凭证(应用凭证流程) 对于不需要用户登陆就可以访问的资源,可以通过这种方式进行授权 授权码授权 适用场景 第三方应用是Web服务器 需要长时间访问资源 API 比较重要,避免访问令牌经过浏览器,减少泄漏可能 业务流程 用户在授权服务器认证和对应用授权 发放授权码(Authorization Code) 交换访问令牌(Access Token) 访问服务 刷新访问令牌 程序实现 步骤1:认证和授权 1、第三放应用发现没有授权时将用户转发到授权服务器的授权入口 redirect:授权地址: 请求方式:get 请求参数: response_type: 授权类型,这个地方用授权码code client_id: 第三方应用的注册ID,第三方应用本身也是需要注册的,服务器会为他发行一个ID和密钥 redirect_uri: 回调URL,等授权完成后会调用该接口 decision: 用户是否授权 2、用户在授权服务器登录 登录不是每次出现,如果当前浏览器已经登录过则无需登录 3、用于对应用申请的访问授权 用户有机会参与到授权过程自己决定是否同意对应用授信 如果用户拒绝,不会回到第三方应用 步骤2:发行授权码 授权通过后,授权服务器生成授权码并发送到回调接口 返回URL提供参数code 回调接口解析并取得授权码 步骤3:交换访问令牌 第三方应用发送请求到访问令牌地址(请求地址:请求方式:post 请求参数: body: grant_type: 授权类型, 值=authorization_code code: 授权码,前一步交互得到的临时授权码,一次有效 redirect_uri: 回调URI,令牌发行成功后回调的URI,必须是授权码申请的那个 Header:: authorization:Basic+空格+(clientId:clientSecret用base64加密后的字符串)如图 解析代码: 响应结果: access_token: 发行的访问令牌,下次访问保护资源的时候要带上。 token_type: 令牌类型,用于扩充自定义令牌机制,默认是不记名 expires_in: 过期时间(有效期),单位秒;访问令牌一般时间都比较短,为了减少攻击者在攻破第三方应用后可能的风险 refresh_token: 刷新令牌,如果开启了刷新令牌功能,会同时发放刷新令牌,这样在访问令牌过期前可以拿刷新令牌去换新的访问令牌 步骤4:访问保护资源 在所有访问保护URL请求头上增加访问令牌信息 请求地址:获取请求资源的接口地址 请求方式:接口地址的访问方式 请求参数: 请求接口所需参数 access_token:访问令牌 响应结果:返回请求资源或失败的错误提示 步骤5:刷新访问令牌 如果应用授权使用刷新令牌,在获取访问令牌的时候会同时发放刷新令牌 第三方应用在自己的数据库保存刷新令牌 调用令牌地址获取新的访问令牌 访问地址:访问参数: body: grant_type:refresh_token refresh_token:获取访问令牌时获得刷新令牌 head: authorization:Basic+空格+(clientId:clientSecret用base64加密后的字符串)如图 响应结果: access_token: 发行的访问令牌,访问保护资源的时候要带上。 token_type: 令牌类型,用于扩充自定义令牌机制,默认是不记名令牌 expires_in: 过期时间(有效期),单位秒;访问令牌一般时间都比较短,为了减少攻击者在攻破第三方应用后可能的风险 程序实现 步骤1:提示用户需要授权并转发到授权服务器 一般需要先提示用户后续操作需要授权 重定向到授权地址() 访问方式:post 授权地址: 访问参数: response_type: 授权类型,这个地方用授权码token client_id: 第三方应用的注册ID redirect_uri: 回调URL,等授权完成后会调用该接口 步骤2:解析访问令牌 授权通过后授权服务器会将令牌信息附加到回调URL上返回 url片段包含参数 token_type:令牌类型,用于扩充自定义令牌机制,默认是不记名令牌 access_token:发行的访问令牌,访问保护资源的时候要带上。 expires:过期时间(有效期),单位秒;访问令牌一般时间都比较短,为了减少攻击者在攻破第三方应用后可能的风险 步骤3: 访问保护资源 将访问令牌附加到请求URL的安全头Header 或者参数(如果不支持Header) 请求地址:获取请求资源的接口地址 请求方式:接口地址的访问方式 请求参数: 请求接口所需参数 access_token:访问令牌 响应结果:返回请求资源或失败的错误提示 与授权码方式区别 不使用二次交换,直接发放访问令牌 访问令牌在浏览器传输,安全性较低 不提供刷新令牌 密码凭证授权 第三方应用直接拿用户账号和密码交换访问令牌和刷新令牌 适用场景 仅限官方应用 刷新令牌要慎用,等同于在第三方应用保存了一份ID和密码 一般辅助以更高安全保护,如SSL,数字证书、U盾等 业务流程 要求用户提供账号和密码 用密码凭证到授权服务器换取访问令牌 访问授权服务 刷新访问令牌 程序实现 步骤1: 第三方应用提示用户在客户端上输入用户账号和密码 步骤2:用密码凭证到授权服务器换取访问令牌 请求地址:(请求方式:post 请求参数: body: grant_type: 授权类型, password username:用户账号 password:用户密码 Header: authorization:Basic+空格+(clientId:clientSecret用base64加密后的字符串)如图 响应结果 access_token: 发行的访问令牌,下次访问保护资源的时候要带上。 token_type: 令牌类型,用于扩充自定义令牌机制,默认是不记名令牌 expires_in: 过期时间(有效期),单位秒;访问令牌一般时间都比较短,为了减少攻击者在攻破第三方应用后可能的风险 refresh_token: 刷新令牌,如果开启了刷新令牌功能,会同时发放刷新令牌,这样在访问令牌过期前可以拿刷新令牌去换新的访问令牌 步骤3:访问授权服务 在所有访问保护URL请求头上或参数增加访问令牌信息 请求地址:获取请求资源的接口地址 请求方式:接口地址的访问方式 请求参数: 请求接口所需参数 access_token:访问令牌 响应结果:返回请求资源或失败的错误提示 步骤4:刷新访问令牌 如果应用授权使用刷新令牌,在获取访问令牌的时候会同时发放刷新令牌 第三方应用在自己的数据库保存刷新令牌 调用令牌地址获取新的访问令牌 访问地址:访问参数: body: grant_type:refresh_token refresh_token:获取访问令牌时获得刷新令牌 head: authorization:Basic+空格+(clientId:clientSecret用base64加密后的字符串)如图 响应结果: access_token: 发行的访问令牌,访问保护资源的时候要带上。 token_type: 令牌类型,用于扩充自定义令牌机制,默认是不记名令牌 expires_in: 过期时间(有效期),单位秒;访问令牌一般时间都比较短,为了减少攻击者在攻破第三方应用后可能的风险 客户端凭证授权 解决问题 非具体用户的资源或者无需资源拥有者授权 或其他流程已经保证资源授权 适用场景 第三方应用自己的资源 内部应用,如本身是资源服务器 其他流程已经保障了资源安全性和授权 业务流程 使用客户端ID和密钥交换访问令牌 访问授权服务 程序实现 步骤1: 使用客户端ID和密钥交换访问令牌 发送请求到访问令牌地址(请求方式:post 请求参数: body grant_type: 授权类型, 值=client_credentials Header: authorization:Basic+空格+(clientId:clientSecret用base64加密后的字符串)如图 解析代码: 响应结果 access_token: 发行的访问令牌,下次访问保护资源的时候要带上。 token_type: 令牌类型,用于扩充自定义令牌机制,默认是不记名令牌 expires_in: 过期时间(有效期),单位秒;访问令牌一般时间都比较短,为了减少攻击者在攻破第三方应用后可能的风险 步骤2: 访问授权服务 在所有访问保护URL请求头上增加访问令牌信息 请求地址:获取请求资源的接口地址 请求方式:接口地址的访问方式 请求参数: 请求接口所需参数 access_token:访问令牌 响应结果:返回请求资源或失败的错误提示 * 隐式授权授权 适用场景 只是需要临时访问保护资源 第三方应用(客户端)运行在浏览器上(JavaScript, Flash …) 第三方应用和浏览器是高可信的 例子: 照片查看应用需要访问他的联系方式 照片查看应用提示用户需要授权 用户确认后到授权服务器授权 通过后直接回到照片应用 业务流程 提示用户需要授权,同意后到授权服务器授权 从URL解析访问令牌 访问保护资源 *

  “原创力文档”前称为“文档投稿赚钱网”,本网站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有【成交的100%(原创)】

本文链接:http://shawntierney.com/fangwenlingpai/623.html