什么是OAuth授权?

一、什么是OAuth协议
OAuth(开放授权)是一个开放标准,所谓OAuth(即Open Authorization,开放授权),它是为用户资源授权提供了一种安全简单的标准,
允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息。
而这种授权无需将用户提供用户名和密码提供给该第三方网站而是直接从服务商提供的页面直接登录。

OAuth允许用户提供一个访问标记(专业点叫做令牌)给第三方网站,一个访问标记(专业点叫做令牌)对应一个特定的第三方网站,同时该访问标记(专业点叫做令牌)只能在特定的时间内访问特定的资源

说白了就是:也就是说用户在访问第三方web或应用的时候,第三方在不知道用户的账号和密码的情况下 经过用户授权后就可以获取用户在服务商哪里存储的文章,微博信息等等信息

一、OAuth授权必须经过三个步骤

第一步:获取未授权的Request Token (请求标记)  跳转到服务商的登录页面

第二步:获取用户授权Request Token(请求标记) 用户输入账号密码进行登录授权

第三步:用授权过的Request Token(请求标记)  换取Access Token (访问标记)

以上三个步骤是OAuth授权的必须步骤 ,可能很多公司的授权方式各有不同,但是大致步骤是一样的

下面以新浪微博为例子 介绍下如何进行OAuth授权:

1.首先你要成为新浪的开发者  点击这里进入开发者网站:http://open.weibo.com

进入后注册一个账号 添加开发者个人信息 ,你可以直接用你的微博账号登录 然后加入开发者即可  详细步骤这里不再赘述

2.创建应用  如何创建应用,直接点击顶部导航栏的我的应用 即可 创建

*假设你创建的应用名称加做 "程序源微博"

*应用创建完毕默认 就进入"开发阶段" 就具备了授权资格

*这个时候点击我的应用 --> 应用信息 你会看到如下的信息

App Key:917518064   应用的唯一标识

App Secret:b18853174e2902fd05b04dc34d7be792  密钥

应用地址:https://itunes.apple.com/cn/genre/ios/id36?mt=8

这是时候我们还需要设置一个回调页面,就是授权成功后跳转的页面  如何设置?

点击编辑 然后输入你要回调的页面网址即可

2.有了上面的设置之后 我们就可以进行资源授权了 我们现在都是OAuth授权2.0

(1)首先第一步获取未授权的Request Token  来到服务器的登录界面

*新浪提供的页面是这个页面:https://api.weibo.com/oauth2/authorize

*必须要传递的两个参数:

client_id (string类型)     申请应用时分配的AppKey // 得知道给哪个应用授权
redirect_uri (string类型)     授权回调地址 // 授权成功后跳转到哪个页面

也就是说我们要正确的来到服务器提供的授权登录界面完整的url地址应该是这样的:

https://api.weibo.com/oauth2/authorize?client_id=917518064&redirect_uri=http://www.cnblogs.com/syios

打开上面的地址你会看到如下界面:

此时我们输入我们的微博账号 这里也可以自己给自己授权也就是说你可以用户刚刚创建应用的账号 对你的应用进行授权

当我们点击登录后 ,这次授权就成功了,当然如果你是第一次授权可能看到不是上面的界面 而是授权界面 这个时候你点击授权即可

登录成功后回跳转到回调页面

(2)获取授权过的Request Token

授权成功后回自动跳转到回调页面

你会发现新浪会在回调页面后面拼接一个参数 这个参数code 就是授权成功后的 Request Token (请求标记)

(3)根据授权过Request Token(请求标记) 获取一个Access Token(访问标记)

这个时候新浪提供了另外一个地址 用来获取访问标记

URL : https://api.weibo.com/oauth2/access_token

当然也必须要传如下的参数 才能成功获取访问标记:

client_id          string     申请应用时分配的AppKey。
client_secret    string     申请应用时分配的AppSecret。
grant_type       string     请求的类型,填写authorization_code
code                string     调用authorize获得的code值。
redirect_uri      string     回调地址,需需与注册应用里的回调地址一致

这个时候我们只需要将所有的参数通过POST方式发送给新浪服务器之后我们会得到服务器的返回数据 返回结果如下:

{
    "access_token" = "2.00vWf4GEUSKa7D739148f7608SXA9B";
    "expires_in" = 137596133;
    "remind_in" = 137596133;
    uid = 1258537523;
}

access_token: 就是我们需要的访问标记 我们只需要获取这个标记 保存即可

uid:表示当前登录用户的ID

这里需要大家明白一个知识点:

access_token : 1个用户给1个应用授权成功后,就获得对应的1个access_token,作用是:允许1个应用访问1个用户的数据
uid:1个用户对应1个uid,每1个用户都有自己唯一的uid
举例:

张三 /李四
应用1 /应用2
张三给应用1、应用2授权成功了:1个uid、2个access_token
李四给应用2授权成功了:1个uid、1个access_token
上面操作:产生了2个uid,3个access_token

3.授权过程中的常见错误

1.invalid_request
1> 没有传递必填的请求参数
2> 请求参数不对
3> URL中间留有空格

2.invalid_client
1> client_id的值传递错误(AppKey不对)

3.redirect_uri_mismatch
1> 回调地址不对

提醒:授权帐号注意  如果应用还没有经过新浪审核,只能访问自己或者其他15个测试帐号的微博数据

好了,关于OAuth授权 就说这么多了

OAuth授权过程的更多相关文章

  1. OAuth 授权过程工作原理讲解

    转自:http://www.imooc.com/article/10931 在一个单位中,可能是存在多个不同的应用,比如学校会有财务的系统会有学生工作的系统,还有图书馆的系统等等,如果每个系统都用独立 ...

  2. 新浪微博开放平台OAuth授权解决方案(含代码)

    前几日一位朋友项目中需要使用新浪微博的接口,故和这位朋友一同研究了新浪微博开放平台上面所提供的资料,首先要使用这些接口是需要用户登录并且授权的,新浪微博开放平台其实是提供两种授权方式的,第一种是:OA ...

  3. 第三方登录(1)OAuth(开放授权)简介及授权过程

    3个角色:服务方,开发者,用户 a.用户在第在服务注册填写个人信息, b.服务方开放OAuth, c.开发者在服务方申请第3方登录,在程序中得到令牌后,经用户同意,可得到用户的个人信息. OAuth ...

  4. 什么是OAuth授权?

    什么是OAuth授权?   一.什么是OAuth协议 OAuth(开放授权)是一个开放标准. 允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息. 而这种授权无需将用户提供用户名和密 ...

  5. [iOS微博项目 - 2.0] - OAuth授权3步

    A.概念      OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用 ...

  6. twitter 授权过程

    转自:http://blog.csdn.net/yangjian8915/article/details/11816669 官方的流程图如下: 下面开始一步步讲解,如何获取最终的access_toke ...

  7. OAuth授权 | 把这一篇丢给他

    OAuth授权 一.背景 上一篇我们介绍了单点登录(SSO),它能够实现多个系统的统一认证.今天我们来谈一谈近几年来非常流行的,大名鼎鼎的OAuth.它也能完成 统一认证,而且还能做更多的事情.至于O ...

  8. IOS OAuth授权分析

    一.黑马微博 ---> 用户的微博数据1.成为新浪的开发者(加入新浪微博的开发阵营)* 注册一个微博帐号,登录http://open.weibo.com帐号:643055866@qq.com密码 ...

  9. Spring Security 解析(一) —— 授权过程

    Spring Security 解析(一) -- 授权过程   在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring Security .S ...

随机推荐

  1. iPhone开发视频教程 Objective-C部分 (51课时)

    第一.二章  OC基础语法 iPhone开发教程 第一章 OC基础语法  iPhone开发概述-必看(1.1)http://www.apkbus.com/android-102215-1-1.html ...

  2. 隐藏nginx 版本号信息

    为了安全,想将http请求响应头里的nginx版本号信息隐藏掉: 1. nginx配置文件里增加 server_tokens off; server_tokens作用域是http server loc ...

  3. Maven 简单配置gpg

    1. 下载maven到指定目录,指定对应的gpg的执行命令所需要的属性.这里比如下载解压后的maven目录是: C:\maven-apache-3.3.2 ,那么配置文件目录是: C:\maven-a ...

  4. IE6-IE11兼容性问题列表及解决办法总结

    相比IE6-IE9那版,主要添加IE10和IE11的新变化. 以下是目录及下载链接: 目录 概述 2 第一章:HTML 3 第一节:IE7-IE8更新 3 1. 如果缺少结束标记的 P 元素后跟 TA ...

  5. Scala 深入浅出实战经典 第63讲:Scala中隐式类代码实战详解

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  6. selenium 3.0发布

    记得3年前selenium core team就放出风声selenium3.0将在某个圣诞节发布,然而大家等了3年,就在所有人都不再关注selenium进度的时候,selenium3.0 beta1悄 ...

  7. 一篇文章,读懂 Netty 的高性能架构之道

    原文 Netty是一个高性能.异步事件驱动的NIO框架,它提供了对TCP.UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机 ...

  8. Intent用法简介

    Intent作为联系各Activity之间的纽带,其作用并不仅仅只限于简单的数据传递.通过其自带的属性,其实可以方便的完成很多较为复杂的操作.例如直接调用拨号功能.直接自动调用合适的程序打开不同类型的 ...

  9. [AX2012]Report data provider调试

    运行使用RDP作为数据源的报表时,RDP类被编译成.NET的服务调用,RDP是X++的代码,它的调试是在MorphX调试器中完成.要在MorphX调试器中调试RDP的X++代码需要以下配置: 添加AO ...

  10. 加锁解锁PHP实现 -转载

    PHP并没有完善的线程支持,甚至部署到基于线程模型的httpd服务器都会产生一些问题,但即使是多进程模型下的PHP,也难免出现多进程共同访问同一资源的情况. 比如整个程序共享的数据缓存,或者因为资源受 ...