第三方登录(百度账号登录)
实现百度第三方登录(Android Studio)
对于第一次开发第三方登录的开发者而言,学习百度账号的第三方登录相对来说没有实现qq,微信那么繁琐,更适合初学者学习。
说明:实现百度第三方登录与实现qq的流程是一样的,只不过qq的申请为开发者认证比较麻烦。百度可直接申请为开发者。
具体流程:
通过实现三次握手来实现第三方登录;
4.在百度开发者中心创建工程。
![](/assets/blank.gif)
第一次握手:可在自己创建的工程中查看API文档需要如下几个参数
- client_id:必须参数,注册应用时获得的API Key。
- response_type:必须参数,此值固定为“code”。
- redirect_uri:必须参数,授权后要回调的URI,即接收Authorization Code的URI。如果用户在授权过程中取消授权,会回调该URI,并在URI末尾附上error=access_denied参数。对于无Web Server的应用,其值可以是“oob”,此时用户同意授权后,授权服务会将Authorization Code直接显示在响应页面的页面中及页面title中。非“oob”值的redirect_uri按照如下规则进行匹配:
https://openapi.baidu.com/oauth/2.0/authorize?response_type=code&client_id=Va5yQRHlA4Fq4eR3LT0vuXV4&redirect_uri=http%3A%2F%2Fwww.example.com%2Foauth_redirect&scope=email&display=popu
登录页面:
<a href="http://openapi.baidu.com/oauth/2.0/authorize?client_id=API Key&response_type=code&redirect_uri=http://localhost:8090/project/loginSuccess">
<button type="button" class="btn btn-danger">第三方百度登录</button></a>
最终实现:
第二次握手
通过Authorization Code获取Access Token
-
- grant_type:必须参数,此值固定为“authorization_code”;
- code:必须参数,通过上面第一步所获得的Authorization Code;
- client_id:必须参数,应用的API Key;
- client_secret:必须参数,'应用的Secret Key;
- redirect_uri:必须参数,该值必须与获取Authorization Code时传递的“redirect_uri”保持一致。
例如:
https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code=ANXxSNjwQDugOnqeikRMu2bKaXCdlLxn&client_id=Va5yQRHlA4Fq4eR3LT0vuXV4&client_secret=0rDSjzQ20XUj5itV7WRtznPQSzr5pVw2&redirect_uri=http%3A%2F%2Fwww.example.com%2Foauth_redirect
controller层
@RequestMapping("/loginSuccess")
public String loginSuccess(String code,HttpServletRequest request){
System.out.println(code);
try {
/* 第二次握手 */
//把随机数code再次发送给百度,获取令牌Access_Token
//通过httpClient向百度发送请求
CloseableHttpClient httpClient = HttpClients.createDefault();
//创建一个post请求
HttpPost postReq = new HttpPost("https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code="+code+"&client_id=
Va5yQRHlA4Fq4eR3LT0vuXV4
&client_secret=
0rDSjzQ20XUj5itV7WRtznPQSzr5pVw2
&redirect_uri=http://localhost:8090/project/loginSuccess");
postReq.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 ");
postReq.addHeader("Accept-Encoding", "gzip, deflate, br");
postReq.addHeader("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");
postReq.addHeader("Connection", "keep-alive");
postReq.addHeader("Host", "openapi.baidu.com");
postReq.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0");
//执行post请求
CloseableHttpResponse response;
response = httpClient.execute(postReq);
//获取响应信息
HttpEntity entity = response.getEntity();
//把响应信息转换成字符串
String content = EntityUtils.toString(entity,"UTF-8");
System.out.println("第二次握手"+content);
//转为json对象,调属性
Baidu baidu = JSONObject.parseObject(content, Baidu.class);
System.out.println("token令牌"+baidu.getAccess_token());
/* 第三次握手 */
//发送请求,获取用户信息,需要参数Token令牌(调用户信息接口)
//再将令牌Access_Token发送给百度,获取用户信息。
HttpPost postReq2 = new HttpPost("https://openapi.baidu.com/rest/2.0/passport/users/getLoggedInUser?access_token="+baidu.getAccess_token());
postReq2.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 ");
postReq2.addHeader("Accept-Encoding", "gzip, deflate, br");
postReq2.addHeader("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");
postReq2.addHeader("Connection", "keep-alive");
postReq2.addHeader("Host", "openapi.baidu.com");
postReq2.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0");
CloseableHttpResponse response2 = httpClient.execute(postReq2);
HttpEntity entity2 = response2.getEntity();
String content2 = EntityUtils.toString(entity2,"UTF-8");
System.out.println("第三次握手"+content2);
//转为json对象,调属性
BaiduUserInfo userInfo = JSONObject.parseObject(content2, BaiduUserInfo.class);
System.out.println(userInfo.getUid());
//判断这个用户的uid在数据库中是否存在,存在说明这个百度用户与数据库用户是绑定的
User user = loginservice.checkedUserByUid(userInfo.getUid());//后台查询,返回user对象
//然后判断,存在登录成功,不存在返回到登录页面
if(user==null){
return "redirect:index.jsp";
}else{
request.getSession().setAttribute("user", user);
return "/WEB-INF/user/success";
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
第三方登录(百度账号登录)相关推荐
- OAuth2.0协议入门(一):OAuth2.0协议的基本概念以及使用授权码模式(authorization code)实现百度账号登录
一 OAuth2.0协议的基本概念 (1)OAuth2.0协议 OAuth协议,是一种授权协议,不涉及具体的代码,只是表示一种约定的流程和规范.OAuth协议一般用于用户决定是否把自己在某个服务商上面 ...
- python 自动登录百度账号 by Dopamine
# 自动登录百度账号 from selenium import webdriver import timebrowser = webdriver.Chrome() # 设置隐式等待 find等待查询, ...
- 解决PanDownload登录提示账号登录失败,获取bdstoken失败问题
之前在这篇文章下的回答https://blog.csdn.net/weixin_43317534/article/details/106558533,受到很多人欢迎,近期(8月5号)原回答的方法已经失 ...
- python自动登录百度_python实现自动登录百度账号功能代码
from selenium import webdriver import time driver = webdriver.Chrome() driver.implicitly_wait(10) dr ...
- 登陆失败bdstoken_解决PanDownload登录提示账号登录失败,获取bdstoken失败问题
最近使用pandown,使用百度账号直接登录不上了,提示bdstoken获取失败,不管是新浪第三方登录,还是QQ第三方登录,都是这个提示,因此我找了好多办法,终于发现了一个大佬的解决办法,附上连接及步 ...
- 游戏游客登录与账号登录
登录流程这一块,之前做功能没有接触到这一块,最近做登录踩了几个坑,下面来梳理一下: 我们这款app,之前是h5版的,在线上运营了大概一年,效果还比较好,但是h5版本的没有服务器,数据是采用云函数存储在 ...
- Python爬虫学习(五)Chrome浏览器自动化测试框架_使用百度账号、QQ第三方登陆百度账号
简单介绍 Selenium(浏览器自动化测试框架) 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样. 安装第三方模块selenium pip in ...
- 账户登录失败获取bdstoken失败_解决PanDownload登录提示账号登录失败,获取bdstoken失败问题...
最近使用pandown,使用百度账号直接登录不上了,提示bdstoken获取失败,不管是新浪第三方登录,还是QQ第三方登录,都是这个提示,因此我找了好多办法,终于发现了一个大佬的解决办法,附上连接及步 ...
- 美多商城项目之用户登录:账号登录、QQ登录
一.账号登录 1.1 用户名登录 1. 用户名登录逻辑分析 2. 用户名登录接口设计 1.请求方式 选项 方案 请求方法 POST 请求地址 /login/ 2.请求参数:表单 参数名 类型 是否必传 ...
- 手机验证码登录,账号登录结合
本项目基于腾讯外包框架(wei框架) 地址:https://github.com/twinh/wei/tree/master/docs/zh-CN#wei HTML页面: [基于bootstrap前端 ...
最新文章
- 用计算机采集卡检测压力传感器信号故障,计算机联网检测系统应用研究
- 火山引擎向企业客户开放上万款抖音同款特效
- php url映射,php – Laravel:将任意URL解析为相应的Controller / Route?
- jQuery选择器全集详解
- java 数组参数_java中 数组可以作为形式参数传递到调用的方法中吗?要怎么操作?...
- 从放弃迅雷和IDM到自己开发下载工具
- Ubuntu安装pycharm并且激活
- linux安装到内存中,Linux安装识别大内存的补丁程序
- Python“制作”midi音乐“两只老虎”
- 使用SQL Server数据库指标预测应用程序问题
- 科大讯飞携手华南理工,成立脑机接口公司,注册资本4000万
- Win2K8R2IIS7命令添加服务器角色
- 操作~拷贝clone()
- Axure RP9新手教程
- 在SQL 2014 Server上安装Northwind和Pubs示例数据库
- Win系统 - 笔记本电脑之耳机插入没声音
- pta 7-1 走楼梯升级版(递归)
- PHP正则过滤处理微信昵称中emoji字符的方法(导出excel)
- 现代医院智能化系统方案及其难点探讨
- Vmware Vtop基本使用