首页 > 其他分享 >OAuth2.0 第三方登录

OAuth2.0 第三方登录

时间:2023-05-06 15:09:28浏览次数:36  
标签:登录 token 微博 新浪 服务器 OAuth2.0 第三方 百度 客户端


本篇内容以用户访问百度,通过新浪微博的第三方登录百度过程讲解

用户:资源拥有者
百度:客户端
新浪微博:认证服务器

前置条件: 百度已经向新浪微博申请注册,分配给百度的client_id是2512457640

地址流程图如下

OAuth2.0 第三方登录_百度

1.用户(资源拥有者) 访问百度(客户端)



2.点击新浪微博(认证服务器)登录, 浏览器(用户代理)跳转至新浪微博登录页面

百度跳转新浪微博,请求参数为

https://api.weibo.com/oauth2/authorize?
client_id=2512457640
&response_type=code
&redirect_uri=https%3A%2F%2Fpassport.baidu.com%2Fphoenix%2Faccount%2Fafterauth%3Fmkey%3Df7ab38e47c1c6183b7e141c196e6f07d7428ecd21b9944f765%26tpl%3Dmn
&forcelogin=1
&state=1646642558
&display=page
&traceid=

参数

备注

client_id=2512457640

客户端id

response_type=code

认证类型, code是授权码

redirect_uri=https%3A%2F%2Fpassport.baidu.com%2Fpho

enix%2Faccount%2Fafterauth%3Fm

key%3Df7ab38e47c1c6183b7e141c196e6f07d7428ecd21b9944f765%26tpl%3Dmn

重定向地址, 用于认证成功/或失败后回跳百度的地址;

state=1646642558

状态,自行定义,后续需要原封不动回传;


3.展示新浪微博(认证服务器)登录页面, 用户进行登录,默认是二维码登录

请求

https://api.weibo.com/oauth2/qrcode_authorize/generate?
client_id=2512457640&
redirect_uri=https%3A%2F%2Fpassport.baidu.com%2Fphoenix%2Faccount%2Fafterauth%3Fmkey%3Dab2ab0542a50c028ddc3467d55819c6ed4db1b14f6ee132a58%26tpl%3Dmn&
scope=&
response_type=code&
state=1646731217&
__rnd=

响应

{"url":"https://api.weibo.com/oauth2/qrcode_authorize/show?vcode=4ffaa0772c35b9af819c12296fbd001e&qr_url=https%3A%2F%2Fopen.weibo.cn%2Foauth2%2Fqrcode_authorize%3Fclient_id%3D2512457640%26redirect_uri%3Dhttps%253A%252F%252Fpassport.baidu.com%252Fphoenix%252Faccount%252Fafterauth%253Fmkey%253Dab2ab0542a50c028ddc3467d55819c6ed4db1b14f6ee132a58%2526tpl%253Dmn%26scope%3D%26response_type%3Dcode%26state%3D1646731217%26vcode%3D4ffaa0772c35b9af819c12296fbd001e",
 "vcode":"4ffaa0772c35b9af819c12296fbd001e"}

url值进行urlDecode

https://api.weibo.com/oauth2/qrcode_authorize/show?
vcode=4ffaa0772c35b9af819c12296fbd001e&
qr_url=https://open.weibo.cn/oauth2/qrcode_authorize?client_id=2512457640&
redirect_uri=https%3A%2F%2Fpassport.baidu.com%2Fphoenix%2Faccount%2Fafterauth%3Fmkey%3Dab2ab0542a50c028ddc3467d55819c6ed4db1b14f6ee132a58%26tpl%3Dmn&
scope=&
response_type=code&
state=1646731217&
vcode=4ffaa0772c35b9af819c12296fbd001e

redirect_uri值进行urlDecode

https://passport.baidu.com/phoenix/account/afterauth?
mkey=ab2ab0542a50c028ddc3467d55819c6ed4db1b14f6ee132a58&
tpl=mn


4.新浪微博(认证服务器)授权成功/失败

失败暂且不讨论,如认证失败,新浪直接重定向redirect_uri, 后续流程结束;


5.新浪微博(认证服务器)授权成功

页面轮询查询授权状态接口

https://api.weibo.com/oauth2/qrcode_authorize/query?
vcode=4ffaa0772c35b9af819c12296fbd001e&
__rnd=1646731224042

响应

{"url":"https://api.weibo.com/oauth2/qrcode_authorize/show?vcode=b5d305c509a271090f8796cac4c4df60&qr_url=https%3A%2F%2Fopen.weibo.cn%2Foauth2%2Fqrcode_authorize%3Fclient_id%3D2512457640%26redirect_uri%3Dhttps%253A%252F%252Fpassport.baidu.com%252Fphoenix%252Faccount%252Fafterauth%253Fmkey%253Df7ab38e47c1c6183b7e141c196e6f07d7428ecd21b9944f765%2526tpl%253Dmn%26scope%3D%26response_type%3Dcode%26state%3D1646642558%26vcode%3Db5d305c509a271090f8796cac4c4df60"
    ,"vcode":"b5d305c509a271090f8796cac4c4df60"}

url值进行urlDecode

https://api.weibo.com/oauth2/qrcode_authorize/show?
vcode=b5d305c509a271090f8796cac4c4df60&
qr_url=https://open.weibo.cn/oauth2/qrcode_authorize?client_id=2512457640&
redirect_uri=https%3A%2F%2Fpassport.baidu.com%2Fphoenix%2Faccount%2Fafterauth%3Fmkey%3Df7ab38e47c1c6183b7e141c196e6f07d7428ecd21b9944f765%26tpl%3Dmn&
scope=&
response_type=code&
state=1646642558&
vcode=b5d305c509a271090f8796cac4c4df60


6.回跳百度(客户端)页面, 重定向地址是redirect_uri(2步骤中)

https://passport.baidu.com/phoenix/account/afterauth?
mkey=ab2ab0542a50c028ddc3467d55819c6ed4db1b14f6ee132a58&
tpl=mn&
state=1646731217&
code=baf71815288d715502ec0072ca4b47d0

并且附带参数

参数

备注

vcode=b5d305c509a271090f8796cac4c4df60

临时授权码, 拼接在redirect_uri后面

state

状态(2步骤中), 原封不动拼接在redirect_uri

响应是一个html页面,此页面为过度页面,

目的是为后续流程的百度(客户端)后台请求新浪微博(认证服务器)后台, (步骤7, 步骤8)

此过程用户不可见,只为用户在前台提供过度页面


7.百度(客户端)收到回跳后, 通过后台请求新浪微博(认证服务器),申请令牌

附带参数

参数

备注

grant_type

授权模式,必选项,固定值为grant_type=authorization_code。

code

上一步的临时授权码,必选项,vcode临时授权码 b5d305c509a271090f8796cac4c4df60

redirect_uri

重定向URI,必选项,且必须与2步骤中的该参数值保持一致。用于验证。

client_id

客户端id,必选项。client_id=2512457640

新浪微博(认证服务器)收到请求,验证通过,向百度(客户端) 返回

参数

备注

access_token

访问令牌

refresh_token

更新令牌

expires_in

过期时间,单位秒

token_type

令牌类型,大小写不敏感,可以是bearer类型或mac类型。

说明此步骤服务器通讯,用户不可见。


8.百度(客户端)请求新浪微博(认证服务器),请求用户信息接口,或其他接口

接口请求头附带headers参数Authorization: access_token等信息

新浪微博(认证服务器)收到请求,验证通过,向百度(客户端) 返回
用户的唯一id, 头像,用户昵称,用户年龄等基础信息,但肯定不会包括用户登录新浪微博的密码

此用户信息接口为举例, 步骤8的过程可能是,百度(客户端)请求新浪微博(认证服务器)的其他接口,当然也可能请求多个不同接口,拉去用户信息,但每个请求肯定是附带access_token的凭证


9.百度(客户端)登录成功,用户自行访问

步骤7,步骤8, 过程过程处理完后,前端页面也会自动重新跳转,过度页面结束,例如跳转至百度首页。


10.用户访问一段时间后,由于百度(客户端)业务需要, 百度(客户端)再次需要请求新浪微博(认证服务器)

但是之前的access_token的过期时间expires_in,已经过期,重新请求获取新的access_token访问令牌接口

请求参数

参数

备注

granttype

授权模式,此处的值固定为granttype=refreshtoken,必选项。

refresh_token

更新令牌,必选项, 步骤7中的refresh_token的值

响应

参数

备注

access_token

新的access_token 访问令牌

expires_in

新的expires_in 过期时间,单位秒

说明此步骤服务器通讯,用户不可见

得到新的新的access_token, 可以继续重复步骤8的内容
说明此步骤服务器通讯,用户不可见


11.用户自行访问百度


标签:登录,token,微博,新浪,服务器,OAuth2.0,第三方,百度,客户端
From: https://blog.51cto.com/u_16082658/6249899

相关文章

  • SpringBoot 自动扫描第三方包及spring.factories失效的问题
    为什么会找不到Spring依赖注入就是要让spring找到要注入的类并且识别到了@Component、@Service等注解。1.当在开发的第三方包里写明了@Component、@Service等等2.引入了包,不论第三方库的引入,还是本地jar。总之是要引入到工程的这时候还加入不到IOC容器,那就说明Spri......
  • 两个系统之间跳转免密登录
    原文链接:https://blog.csdn.net/CODING_1/article/details/125373831在处理业务场景时需要跳转不同系统软件,在每次跳转都需要重新登录系统,那么这种繁琐的登录流程会让人心态爆炸,能不能在只登陆一个系统的情况下就可以免登录跳转其他系统呢?当然是可以的.首先我们回忆一下正常......
  • Node + Express 后台开发 —— 登录标识
    登录标识系统通常只有登录成功后才能访问,而http是无状态的。倘若直接请求需要登录才可访问的接口,假如后端反复查询数据库,而且每个请求还得带上用户名和密码,这都是不很好。作为前端,我们听过cookie(session)和token,他们都是登录标识,各有特色,本篇都将完整实现。Tip:在上文(起步......
  • 将第三方的bean交给spring的IOC容器管理
    示例:比如要使用一个第三方的雪花算法1.先导入需要的依赖<dependency><groupId>wiki.xsx</groupId><artifactId>snowflake-spring-boot-starter</artifactId><version>1.2.2</version></depe......
  • w11更改登录账户名
    设置-账号-其他账户,添加一个账户,并更改角色为管理员。然后点击win窗口,切换账户登录到新建的用户。把之前的账户更改角色为普通用户。再次切到其他用户,把之前的用户点击删除,此时删不了,更改其为普通用户。重启即可。......
  • springboot 项目国际化+登录拦截器
    项目页面国际化1.语言配置文件需要下载插件ResourceBundleEditor 新建国际目录i18n 在properties配置文件中自定义  2.前端index页面要设置语言参数传递给后端,切换中英文 3.自定义地区解析器MyLocaleResolver后端接收并处理 4.自定义了一个地区解析器要生效......
  • 若依登录验证码不显示404访问问题
    最近在学习接触Java,那若依开源项目来练练手,部署后发现登录界面的登录验证码一直刷不出来,提示404访问错误。查看网上一直没找到解决办法。但知道原理都是配置文件的问题。后来在一个其他项目上找到灵感,给nginx的nginx.conf配置文件增加配置信息,项目可以正常启动并可以正常登录了。......
  • 解决上传md文件时出现的“<Fault 401: '请配置正确的用户名与访问令牌(access token),
    使用的工具:pycnbolg下载地址:https://github.com/dongfanger/pycnblog具体操作按这位大神的博客:如何在博客园上传markdown文件-NotYourferry-博客园(cnblogs.com)出现报错如图:偶然看到这两位的评论:于是我将config.yaml中的password改成了我的令牌,就上传成功了。......
  • Django--基础登录的表单
    HTML页面关键代码<formaction=""method="post"> <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><!--导入jquery-->......
  • SSH工具远程登录Linux系统错误解决方法,错误提示Disconnected:No supported authentica
    一、使用轻量云控制面板的登录,sudosu获取root账号权限;二、执行passwd命令,输入新密码来修改root密码。三、修改密码登录为yes,步骤如下1、运行命令vi/etc/ssh/sshd_config2、将参数PasswordAuthentication设置为yes,前面不能有#号键3、重启SSH服务使用的系统是centos7.2,Cen......