oauth三方登陆的原理

一 说明

OAuth是由Blaine Cook、Chris Messina、Larry Halff 及David Recordon共同发起的,目的在于为API访问授权提供一个开放的标准(resful和webservice都可以)。OAuth规范的1.0版于2007年12月4日发布。

通过官方网址:https://oauth.net/可以阅读更多的相关信息。

二 OAUTH认证授权具有以下特点:

1. 简单:不管是OAUTH服务提供者还是应用开发者,都很容易于理解与使用;

2. 安全:没有涉及到用户密钥(账号/密码)等信息,更安全更灵活;

3. 开放:任何服务提供商都可以实现OAUTH,任何软件开发商都可以使用OAUTH;

三、OAUTH相关术语

在弄清楚OAUTH流程之前,我们先了解下OAUTH的一些术语的定义:

  • OAUTH相关的三个URL:
  • Request Token URL: 获取未授权的Request Token服务地址;
  • User Authorization URL: 获取用户授权的Request Token服务地址;
  • Access Token URL: 用授权的Request Token换取Access Token的服务地址;
  • OAUTH相关的参数定义:
  • oauth_consumer_key: 使用者的ID,OAUTH服务的直接使用者是开发者开发出来的应用。所以该参数值的获取一般是要去OAUTH服务提供商处注册一个应用,再获取该应用的oauth_consumer_key。如Yahoo该值的注册地址为:https://developer.yahoo.com/dashboard/
  • oauth_consumer_secret:oauth_consumer_key对应的密钥。
  • oauth_signature_method: 请求串的签名方法,应用每次向OAUTH三个服务地址发送请求时,必须对请求进行签名。签名的方法有:HMAC-SHA1、RSA-SHA1与PLAINTEXT等三种。
  • oauth_signature: 用上面的签名方法对请求的签名。
  • oauth_timestamp: 发起请求的时间戳,其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数。本次请求的时间戳必须大于或者等于上次的时间戳。
  • oauth_nonce: 随机生成的字符串,用于防止请求的重放,防止外界的非法攻击。
  • oauth_version: OAUTH的版本号,可选,其值必须为1.0。

OAUTH HTTP响应代码:

  • HTTP 400 Bad Request 请求错误
  • Unsupported parameter 参数错误
  • Unsupported signature method 签名方法错误
  • Missing required parameter 参数丢失
  • Duplicated OAuth Protocol Parameter 参数重复
  • HTTP 401 Unauthorized 未授权
  • Invalid Consumer Key 非法key
  • Invalid / expired Token 失效或者非法的token
  • Invalid signature 签名非法
  • Invalid / used nonce 非法的nonce

四、OAUTH认证授权流程(微博,微信,qq登陆都是如此)

在弄清楚了OAUTH的术语后,我们可以对OAUTH认证授权的流程进行初步认识。其实,简单的来说,OAUTH认证授权就三个步骤,三句话可以概括:

1. 获取未授权的Request Token

2. 获取用户授权的Request Token

3. 用授权的Request Token换取Access Token

当应用拿到Access Token后,就可以有权访问用户授权的资源了(可以选择只要三方登陆功能,不要数据)。

五 参数调用说明

具体每步执行信息如下:

A. 使用者(第三方软件)向OAUTH服务提供商请求未授权的Request Token。向Request Token URL发起请求,请求需要带上的参数见上图。

B. OAUTH服务提供商同意使用者的请求,并向其颁发未经用户授权的oauth_token与对应的oauth_token_secret,并返回给使用者。

C. 使用者向OAUTH服务提供商请求用户授权的Request Token。向User Authorization URL发起请求,请求带上上步拿到的未授权的token与其密钥。

D. OAUTH服务提供商将引导用户授权。该过程可能会提示用户,你想将哪些受保护的资源授权给该应用。此步可能会返回授权的Request Token也可能不返回。如Yahoo OAUTH就不会返回任何信息给使用者。

E. Request Token 授权后,使用者将向Access Token URL发起请求,将上步授权的Request Token换取成Access Token。请求的参数见上图,这个比第一步A多了一个参数就是Request Token。

F. OAUTH服务提供商同意使用者的请求,并向其颁发Access Token与对应的密钥,并返回给使用者。

G. 使用者以后就可以使用上步返回的Access Token访问用户授权的资源。

从上面的步骤可以看出,用户始终没有将其用户名与密码等信息提供给使用者(第三方软件),从而更安全。

时间: 2024-11-10 00:52:10

oauth三方登陆的原理的相关文章

OAuth 授权过程工作原理讲解

转自:http://www.imooc.com/article/10931 在一个单位中,可能是存在多个不同的应用,比如学校会有财务的系统会有学生工作的系统,还有图书馆的系统等等,如果每个系统都用独立的账号认证体系,会给用户带来很大困扰,也给管理带来很大不便.所以需要设计一种统一登录的解决方案.比如我登陆了百度账号,进贴吧时发现已经登录了,进糯米发现也自动登录了.常见的有两种情况,一种是SSO(单点登录)效果是一次输入密码多个网站可以识别在线状态:还有一种是多平台登录,效果是可以用一个账号(比如

iOS 图文教程完成三方登陆

前言: 首先你要明白, 这种集成三方的东西, 都非常简单,可能会有坑, 填上就好, 这篇文章以微博为例, 其实都是一样的. 步骤或繁或简单, 习惯就好. 1. 首先在微博开放平台注册成为开发者http://open.weibo.com 2. 创建应用 3. 完善应用信息, 这里需要注意的是Bundle ID需要与应用一致, 同时记录appKey 项目中会用到 4. 在应用信息-高级信息中 与上方的保持一致---这段代码后面后使用到 5. 填写URL Types 6. 配置info.plist同时

新浪OAuth客户端登陆另辟蹊径

题记:这是一段七月份写的代码了,忘记有没有做过优化了,随便看看吧. 前言:当时七月份刚接触的时候,客户端登陆授权方式早就已经取消了,于是就考虑用网页登陆方式来间接模拟下吧,这样密码也安全点,无非就是拿个Token嘛. 使用哪一家的SDK相信您可以看出来 //先上代码吧 myOuth = new NetDimension.Weibo.OAuth(AppKey, AppSecret, Properties.Settings.Default.CallbackUrl ); OuthWeb myWeb =

OAuth - 第三方登录的原理

第三方登录的原理 所谓第三方登录,实质就是 OAuth 授权.用户想要登录 A 网站,A 网站让用户提供第三方网站的数据,证明自己的身份.获取第三方网站的身份数据,就需要 OAuth 授权. 举例来说,A 网站允许 GitHub 登录,背后就是下面的流程. 1.A 网站让用户跳转到 GitHub. 2.GitHub 要求用户登录,然后询问"A 网站要求获得 xx 权限,你是否同意?" 3.用户同意,GitHub 就会重定向回 A 网站,同时发回一个授权码. 4.A 网站使用授权码,向

ssh免密码登陆及其原理

ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例. 有机器A(192.168.1.155),B(192.168.1.181).现想A通过ssh免密码登录到B. 1.在A机下生成公钥/私钥对. [[email protected] ~]$ ssh-keygen -t rsa -P '' 直接ssh-keygen然后三次回车就可以了.-P表示密码,-P '' 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车.它

oauth授权协议的原理

http://oauth.net/2/ 协议的原文.原来是1.0版本,现在是2.0版本了 https://ruby-china.org/topics/15396 https://blog.yorkxin.org/posts/2013/09/30/oauth2-1-introduction/ 通俗解释: http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html 要解决的问题: 获取授权.每次登录,都要让用户进行授权. 现实中的例子,只有用户同意授权

无线热点登陆认证原理探究---captive portal 什么是Captive Portal

什么是Captive Portal 大家肯定都连过公共场所的wifi热点,比如麦当劳等地方的.他们的wifi往往一连上去就会弹出一个要求登录或者微信关注之类的页面,只有在这个页面完成操作了才能正常访问网络的.之前看到这个很神奇,为什么一连wifi,手机就会自动打开这个网页的,就知道android系统应该是提供了一些接口的.最近接触到这个,查了一下才知道这个东西叫做“captive portal”,就是专门用来给后端的网关提供鉴权计费之类的服务的.很多公共场合的wifi热点应该都用了这么一个技术,

oauth基本流程和原理

组装loginurl->去第三方登录验证->回调callbackurl+code(票据)->本地根据code+appid+appkey组装url隐式curl获取用户信息->完成登录. 之所以要用callbackurl的形式是因为不能让用户在你本地输入账号密码防止被盗号. 之所以不在callbackurl的时候(传递appid+appkey)去做获取用户信息的操作,是因为浏览器请求会暴露appkey.

OAuth 2.0 认证的原理与实践

摘要: 使用 OAuth 2.0 认证的的好处是显然易见的.你只需要用同一个账号密码,就能在各个网站进行访问,而免去了在每个网站都进行注册的繁琐过程. 本文将介绍 OAuth 2.0 的原理,并基于 Spring Security 和 GitHub 账号,来演示 OAuth 2.0 的认证的过程. 原文同步至https://waylau.com/principle-and-practice-of-oauth2/ 使用 OAuth 2.0 认证的的好处是显然易见的.你只需要用同一个账号密码,就能在