前些日子研究了一下qq和新浪微博的第三方登陆的东西,发现其实难度并不大。来给大家分享一下我的经验和流程。

不论是qq还是新浪微博的第三方登陆都是用了Oauth2.0授权流程,唯一不同的是qq多了一个openid的获取,多了一步。

先介绍一下Oauth2.0的大致授权流程。在授权过程中大致有三个对象。一个是服务提供方(第三方网站)、一个是用户(将资源放在服务提供方存放的对象)、还有一个就是客户端(向服务提供放请求用户资源的对象)。首先,客户端向服务提供方发起请求,请求服务提供方的一个临时令牌,这个临时令牌是进行下一步的基础,服务提供方先要验证一下客户端的身份,验证成功后会给客户端所要的临时令牌。接下来客户端会引导用户进行授权操作,用户进入服务提供方提供的页面,完成授权以后服务提供方会给客户端一个访问令牌并调转回客户端的网页。通过访问令牌,客户端就可以获得用户在服务提供方上的若干权限。

了解了Oauth2.0的授权机制,下面就开始介绍实例。显示新浪微博的。

首先,要成为新浪微博的开发者,http://open.weibo.com/wiki/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97,这是申请开发者的大致流程,申请完成后就可以创建应用,然后新浪微博就会给你你的app_id和app_secret,这两样东西就是你的网站认证新浪微博的凭证,根据这个凭证你才能引导用户到新浪微博的授权界面。

第一步,在你的网站上引导用户进入授权界面,实际上这一步包含了你的网站向服务提供方申请临时令牌和用户完成授权这两步。引导用户进入https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&response_type=code&redirect_url=YOUR_REGISTERDE_REDIRECT_URL

上面的红字部分是要自己填入的信息。其他地方不用改动。用户输入用户名和密码,完成授权,之后会跳转到YOUR_REGISTERDE_REDIRECT_URL,并且会在url上多出”code=~~~~~~“的信息,这些是可以在后台通过GET方法获得的。

第二步,通过第一步的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_url=YOUR_REDIRECT_URL&code=CODE的请求。

以上的红字是自己要填入的。通过上面的网址实际上是在用GET方法发起请求。响应会发回一个json字典,其中就有我们想要的access_token,字典中还有其他项,包括用户id,access_token的有效时间(秒为单位)等信息。

实际上完成上边的两步后,我们就已经获得了我们想要的权限了。http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI,通过这个网址上的信息,再加上我们完成上边两步后所获的的东西,我们就可以实现想要的目的了。

1 #-*-coding:utf8 -*-

2 importurllib3 importurllib24 importjson5 data1 = {"client_id":"","client_secret":""}6 data1 =urllib.urlencode(data1)7 url1 = "https://api.weibo.com/oauth2/access_token?grant_type=authorization_code&redirect_uri=&code=854e96627e23b6a31fea50cd242a681e"

8 #上边url1中的code是我手动在浏览器上运行授权url获取的,实际开发中是可以在网站后台获取的,就不用人工的去获取了

9

10

11 req1 =urllib2.Request(url1,data1)12 response1 =urllib2.urlopen(req1)

13 #这里返回的是一个json格式的数据,通过解析可以从中获取access_token14 response1 =json.loads(response1.read())15 access_token = response1['access_token']16 #print(access_token)1718

19 #一下是一个例子,以用户的名义发一条新浪微博

20 url2 = "https://api.weibo.com/2/statuses/update.json"

21 status = u"这是用来测试的,请直接忽略!"

22 status = status.encode("utf8")23 data2 ={"source":"","access_token":access_token,"status":status}24 #这里要注意source其实就是app_id

25 data2 =urllib.urlencode(data2)26 req2 =urllib2.Request(url2,data2)27 response2 =urllib2.urlopen(req2)28 response2=json.loads(response2.read())29 print(response2)30 #这里用来获取响应信息

下面介绍一下qq的流程,熟悉了新浪微博的授权流程,qq的流程就要好理解的多。qq的官方文档写得要比新浪微博的清楚明了的多,我就借用一下qq的文档。

开始下面操作之前,你要去qq那里申请开发者许可,并申请要开发的网站或者应用以得到client_id和client_secret,还有你的redirect_url

第一步,请求临时令牌,并引导用户授权。

url:https://graph.qq.com/oauth2.0/authorize

method:GET

这一步的重点在获取code。

第二步,请求访问令牌access_token

url:https://graph.qq.com/oauth2.0/access_token

method:GET

这一步的重点在于获得access_token

第三步,获得open_id,这是qq与新浪微博所不同的,也是多了这一步。

url:https://graph.qq.com/oauth2.0/me

method:GET

完成了这一步就已经获得了所有要用到的参数,这样就可以完成我想要的所有权限了。

#-*-coding:utf8-*-

importurllibimporturllib2importjson

response_type= "code"client_id= ""client_secret= ""redirect_uri= ""#以上的信息是要自己去申请开发网站时给开发者分配的

url_code= "authorization code"url1= "https://graph.qq.com/oauth2.0/token"url1= url1+"?grant_type=authorization_code&"+\"client_id="+client_id+\"&client_secret="+client_secret+\"&code=5CB3DB81F0718CE44ADD33A78F53E4A0"+\"&redirect_uri="+redirect_uri

#上面的code是我自己现在浏览器上手动完成第一步得到的,如果能在服务器上的话,是可以在后台完成对code的获取的,就不用这么麻烦了

req1=urllib2.Request(url1)

response1=urllib2.urlopen(req1)

m=((response1.read()).split('&'))[0]

access_token=(m.split('='))[1]#print access_token

#这里由于返回的是一个字符串,所以对返回的字符串操作,从中获取access_token

url2="https://graph.qq.com/oauth2.0/me"url2=url2+"?access_token="+access_token

req2=urllib2.Request(url2)

response2=urllib2.urlopen(req2)

dic=(response2.read())[10:-3]

ajson=json.loads(dic)

openid=ajson['openid']

#这里返回的是一个json字典,所以可以通过json模块解析其中的信息,以获得openid

#一下是一个例子,用来获取用户的基本信息

url3="https://graph.qq.com/user/get_user_info?"+\"access_token="+access_token+\"&oauth_consumer_key="+client_id+\"&openid="+openid

req3=urllib2.Request(url3)

response3=urllib2.urlopen(req3)#data_dic=json.loads(response3.read())

print (response3.read()).encode('GB2312')

python的flask实现第三方登录怎么写_关于qq和新浪微博的第三方登陆|python|flask相关推荐

  1. 第三方登录mysql表_浅谈数据库用户表结构设计,第三方登录

    说起用户表,大概是每个应用/网站立项动工(码农们)考虑的第一件事情.用户表结构的设计,算是整个后台架构的基石.如果基石不稳,待到后面需求跟进了发现不能应付,回过头来反复修改用户表,要大大小小作改动的地 ...

  2. python的flask实现第三方登录怎么写_Python语言的Flask框架应用程序实现使用QQ账号登录的方法...

    本文主要向大家介绍了Python语言的Flask框架应用程序实现使用QQ账号登录的方法,希望对大家学习Python语言有所帮助. Flask-OAuthlib是OAuthlib的Flask扩展实现, ...

  3. java qq微信微博第三方登录界面_android 实现第三方登录(微博、微信、QQ登录)

    [实例简介]此案例是演示案例,大家可以看到Bmob的第三方登录和信息获取如何工作的 实现了 qq.微信.微博的 第三方登录功能 [实例截图] [核心代码] package com.bmob.demo. ...

  4. sdk没有登录什么意思_不需要接入SDK的第三方登录及分享

    讲到第三方登录分享,第一反应大概就是友盟.ShareSDK之类.集成微信.QQ.微博三个平台的话,友盟的SDK有62.9M,ShareSDK的包有74M.如果直接集成最原始的三个平台的SDK,大小总共 ...

  5. web实现QQ第三方登录 开放平台-web实现QQ第三方登录

    应用场景 web应用通过QQ登录授权实现第三方登录. 操作步骤 1  注册成为QQ互联平台开发者,http://connect.qq.com/ 2  准备一个可访问的域名,如dev.foo.com 3 ...

  6. php 微信第三方登录demo,第三方登录 - 快速接入微信、QQ、微博等第三方登录方式 – 基于ThinkPHP和Bootstrap的极速后台开发框架...

    此插件基于FastAdmin和Thinkphp5开发的第三方登录插件,可用于对接微.微博.QQ等第三方登录,目前CMS中的小程序账号登录绑定就是基于此插件开发,在使用CMS中的小程序登录功能之前请务必 ...

  7. 第三方登录功能的实现之 QQ登录 - 未绑定

    目录 QQ登录 - 未绑定 - 有账号 获取QQ头像和昵称 表单校验 发送验证码 QQ绑定完成 QQ登录 - 未绑定 - 无账号 QQ登录 - 未绑定 - 有账号 如果账号是绑定的状态,手动调用一下解 ...

  8. python import pandas报错找不到_扎心!“我学了半年 Python,还是找不到工作”

    在编程界,Python是一种神奇的存在.有人认为,只有用Python才能优雅写代码,提高代码效率:但另一部分人恨不能把Python喷成筛子.那么,Python到底有没有用,为什么用Python找不到工 ...

  9. python的模块提供了许多文件管理方法_学会这几招,轻松掌握Python文件管理

    本期责编:Sophie 原文来源 | devshed 译文来源 | wwwjfy 一.Python中的文件管理 文件管理是很多应用程序的基本功能和重要组成部分.Python可以使文件管理极其简单,特别 ...

最新文章

  1. oracle从备份提取归档,Oracle归档模式有备份,丢失数据文件的恢复
  2. 使用指针给矩阵除主对角线外的元素赋值为0
  3. Android之SharedPreferences 讲解
  4. java io流(字符流) 文件打开、读取文件、关闭文件
  5. jQuery实现页面关键词高亮
  6. 程序员实际情况_程序员实际上是做什么的?
  7. php开发工程师考试试卷,腾讯PHP开发工程师面试试卷
  8. 计蒜客——学生成绩查找系统
  9. 设某链表中最常用的操作是在链表的尾部_面试官:“双向链表”都不会,谁给你跳槽的勇气?...
  10. 并发编程 - io模型 - 总结
  11. 教程 ios 4 以上安装mobile terminal的最简单方法
  12. ST-LINK官方驱动下载方法
  13. 三星s7562刷android+2,三星s7562 4.1.2 rom刷机包(精简省电版)
  14. c++缺省值 缺省参数
  15. Excel 常用的九十九个技巧 Office 自学教程快速掌握办公技巧
  16. Grafana可视化工具-之数字映射字符串
  17. 【Python 基于EasyOCR库进行图片文字识别】
  18. BandwagonHost 5个数据中心/机房Ping速度测试亲自体验
  19. Mac Book触摸板失灵的解决办法(触摸板按下失灵)
  20. 规则引擎的介绍与Drools的流程分析

热门文章

  1. xml文件导入mysql_如何使用XML_LOAD()将XML文件导入MySQL数据库表;功能?mysql-问答-阿里云开发者社区-阿里云...
  2. python编写安全工具_Python3学习系列(四):编写属于自己的邮件伪造工具
  3. Trouble Sort CodeForces - 1365B(思维)
  4. Codechef REBXOR HYSBZ - 4260(01字典树+区间异或最大)
  5. bh1750采集流程图_lcd_bh1750 通过 采集环境光照度,并在野火stm32mini板子的屏幕上显示。 SCM 机开发 272万源代码下载- www.pudn.com...
  6. mysql recovery = 4_强制MySQL InnoDB恢复参数innodb_force_recovery
  7. es算法matlab编程,matlab练习程序(演化策略ES)
  8. 深度学习之循环神经网络(3)梯度传播
  9. 逆序输出1到4位正整数
  10. 『数学』你确定你学会了勾股弦定理!真的吗?看完这个篇文章再回答我!