失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 第三方登录(百度账号登录)

第三方登录(百度账号登录)

时间:2019-12-31 14:09:04

相关推荐

第三方登录(百度账号登录)

实现百度第三方登录(Android Studio)

对于第一次开发第三方登录的开发者而言,学习百度账号的第三方登录相对来说没有实现qq,微信那么繁琐,更适合初学者学习。

说明:实现百度第三方登录与实现qq的流程是一样的,只不过qq的申请为开发者认证比较麻烦。百度可直接申请为开发者。

具体流程:

通过实现三次握手来实现第三方登录;

1.登录到百度开发者中心。 2.注册百度账号,成为百度开发者。 3.需要把项目添加到开发者工程中。

4.在百度开发者中心创建工程。

4.安全设置

第一次握手:可在自己创建的工程中查看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按照如下规则进行匹配: /oauth/2.0/authorize?response_type=code&client_id=Va5yQRHlA4Fq4eR3LT0vuXV4&redirect_uri=http%3A%2F%%2Foauth_redirect&scope=email&display=popu

登录页面:

<a href="/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>

最终实现: 点击跳转到自己项目专有的一个登录页面,登陆成功,跳转到自己的项目中。

(第一次握手只能获取到code码,获取不到用户信息) 把随机数code再次发送给百度,获取令牌Access_Token

第二次握手

通过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”保持一致。

例如:

/oauth/2.0/token?grant_type=authorization_code&code=ANXxSNjwQDugOnqeikRMu2bKaXCdlLxn&client_id=Va5yQRHlA4Fq4eR3LT0vuXV4&client_secret=0rDSjzQ20XUj5itV7WRtznPQSzr5pVw2&redirect_uri=http%3A%2F%%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("/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", "");

postReq.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:53.0) Gecko/0101 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("/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", "");

postReq2.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:53.0) Gecko/0101 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;

}

如果觉得《第三方登录(百度账号登录)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。