码迷,mamicode.com
首页 > 数据库 > 详细

OAuth2.0 微博登陆网站功能的实现(一)获取用户授权及令牌 Access Token

时间:2015-11-25 22:02:05      阅读:332      评论:0      收藏:0      [点我收藏+]

标签:

在登陆一些网站的时候,可以选择登陆方式为第三方登陆,例如微博登陆,以爱奇艺为例,进入首页,点击 ”登陆“,会弹出登录框:

技术分享

除了本站登陆外,还可以选择其他第三方登陆,比如微博登陆、QQ 登陆、微信登陆等。

选择微博登陆后,爱奇艺会向用户申请授权用于微博登陆(当用户已经登陆了微博时会直接申请授权,当用户没有登陆时会提示用户登陆微博):

技术分享

此时提示窗口的 url 为:https://api.weibo.com/oauth2/authorize?scope=&redirect_uri=http%3A%2F%2Fpassport.iqiyi.com%2Fapis%2Fthirdparty%2Fncallback.action%3Ffrom%3D2&display=default&client_id=1925825497

 

当选择连接时,跳转到登录页面,提示用户正在使用新浪微博登陆,并且要求用户使用新浪微博绑定登陆账户:

技术分享

 

记录一下在自己的网站上实现使用新浪微博一键登录的实现过程。

① 登陆新浪开发平台:http://open.weibo.com/

② 选择 “我的应用” -- “管理中心” -- “完善开发者信息”,如图:

技术分享

 

 

③ 完善信息(网站填你的线上网站)-- 提交 -- 验证邮件 -- 验证完毕;

 

④ 选择 “微连接” -- “网站接入” -- “立即接入”:

技术分享

 

 添加新网站(你的线上网站):

技术分享

 

⑤ 根据提示在网站的首页添加 meta 标签,验证并添加:

技术分享

 ⑥ 选择 “深度部署” -- “微博登陆”:

技术分享

 

⑦ 接下来阅读微博 openAPI 文档:新浪微博授权机制说明

OAuth2.0 的流程如下:

技术分享

其中Client指第三方应用,Resource Owner指用户,Authorization Server是我们的授权服务器,Resource Server是API服务器。

 

微博提供了一系列 OAuth2.0 接口:

技术分享

 

Web 网站的授权流程:

技术分享

 

⑧ 在网站中创建一个测试页面,引导需要授权的用户到地址(获取用户授权,接口文档地址:http://open.weibo.com/wiki/Oauth2/authorize):https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI:

<a href="https://api.weibo.com/oauth2/authorize?client_id=4*******&redirect_uri=http://www.ofim.com.cn/index/response/response&response_type=code">登陆</a>

 

技术分享

 

访问该页面(点击 ”登陆“),当我的微博处于登陆状态时,得到:

技术分享

 

 当微博没有登陆是,点击 ”登陆(<a href="https://api.weibo.com/oauth2/authorize?client_id=4*******&redirect_uri=http://www.****.cn/index/response/response&response_type=code">登陆</a>)“,得到:

技术分享

  

选择 ”连接“ 或 登陆后选择 ”连接“,获取授权成功之后就跳转到了授权回调页(redirect_uri):

技术分享

在 url 中返回了一个 code 参数,返回数据说明:

技术分享

 

⑨ 换取 Access Token

新浪的接口地址是:https://api.weibo.com/oauth2/access_token?client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=authorization_code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI&code=CODE

技术分享

上面设置的授权回调地址是:http://www.****.cn/index/response

所以在 index 控制器中添加 response 方法,使用 post 方式请求接口地址:

  public function response(){
          $code = I(‘code‘);
          $register_url = ‘http://www.****.cn/index/register‘;
          $url = ‘https://api.weibo.com/oauth2/access_token‘;
          $data = ‘client_id=4***&client_secret=f*********&grant_type=authorization_code&redirect_uri=‘.$register_url.‘&code=‘.$code;
          $curl= curl_init();
          curl_setopt($curl,CURLOPT_POST,1); //post方式
          curl_setopt($curl,CURLOPT_POSTFIELDS,$data); //设置post的参数    
          curl_setopt($curl, CURLOPT_URL, $url);
          curl_exec($curl);
          $output = curl_exec($curl);
          curl_close($curl);
          $this->display();
  }

 

重复上一步骤的 "登陆" 步骤,将返回 json 格式的数据到授权回调页:

{
"access_token":"2.00B_E*******",
"remind_in":"1****",
"expires_in":1****,
"uid":"167*****"
}

Access_token 获取成功。

 

说明:用到的页面有 登陆引导页、授权回调页。

 

 

参考:新浪微博Oauth2.0授权 获取Access Token

 

OAuth2.0 微博登陆网站功能的实现(一)获取用户授权及令牌 Access Token

标签:

原文地址:http://www.cnblogs.com/dee0912/p/4990735.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!