之前写过一篇OAuth2 - 第三方登录之微信登录,但是微信的开放平台的资质需要有公司/企业才能注册。如果是个人的话,可以使用其他个人开发者就可以使用的。比如QQ、新浪微博。
QQ的话,需要审核之后才能使用,需要手持身份证照,且需要创建应用需要备案的域名并应用通过审核才能用。而微博的话,在开发期间使用无需审核就可以使用。
微博开放平台 - 创建应用
1、登录之后选择网站接入
2、完善个人开发者信息
3、创建应用
创建自己要使用微博登录功能的应用。
4、设置回调地址
即登录授权成功之后的回调地址
5、添加测试用户
测试用户即微博用户,输入微博昵称即可。
在开发阶段无需审核,设置完上述内容即可使用。
微博开放平台 - 登录流程体验
1、开发文档,选择OAuth2.0,并找到Web网站的授权
2、根据文档进行操作
①引导需要授权的用户到如下地址:
https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI
该地址中有两个替换的参数
:
client_id:即App Key
redirect_uri:即回调地址
访问该地址即跳转到微博登录页面:
②如果用户同意授权,页面跳转至YOUR_REGISTERED_REDIRECT_URI?code=CODE
YOUR_REGISTERED_REDIRECT_URI 即是回调地址。
③换取Access Token
通过返回的code码去换取Access Token
,只有获取了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
这是一个POST请求
,在体验这个流程的时候可以通过postman来进行操作。
该地址中有四个替换的参数:
client_id:即App Key
client_secret:即App Secret
redirect_uri:回调地址
code:登录成功之后,地址栏返回的code值
换取成功返回的JSON结果:
④使用获得的Access Token调用API
获取到token之后,就可以凭此调用其他接口(有权限的接口)。
测试 - 获取用户信息:
SpringBoot整合新浪微博登录
1、引导到登录页面
https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<h1>登录页面</h1>
<a href="https://api.weibo.com/oauth2/authorize?client_id=AppKey(应用id)&response_type=code&redirect_uri=回调地址">新浪微博 - 立即登录</a>
</body>
</html>
2、回调地址
登录授权成功之后,会跳转到回调地址,并且附带一个code。
因为client_secret,也就是AppSecret不能外泄
,所以需要在Java代码内部进行操作。
创建一个Controller作为回调跳转的地址,并且接受code,使用code去交换access_token,其中access_token也是不能外泄的
。
因为在Java代码中需要发送请求,所以需要一个HttpsUtils工具类
:
/**
* HttpUtils请从
* https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java
* 或者直接下载:
* http://code.fegine.com/HttpUtils.zip
*
* 下载相应的依赖请参照
* https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml
* 相关jar包(非pom)直接下载:
* http://code.fegine.com/aliyun-jar.zip
*/
HttpUtils要用到的依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>