目录
3.使用获得的OAuth2.0 Access Token调用API,获取用户身份,完成用户的登录。
一、完成微博平台应用注册,获取参数
1.登录微博开发平台。
官网 新浪微博开放平台-首页
2.开发者认证
|我的应用-完成开发者认证 (审核需要2天左右时间)
3.创建应用
3.1 选择网站接入
3.2 立即接入
3.3 创建新应用
3.4 创建成功后,完善应用的基本信息和高级信息
二、代码实现
基于web网站,0auth2.0授权码模式进行演示。完成微博登录功能的开发,这种方式可以和你的网站自身的用户系统连接更紧密。
使用微博的OAuth2.0授权接口:Connect/login - 微博API
1.引导需要授权的用户到授权界面
package com.ss.work.controller;
import com.alibaba.fastjson.JSONObject;
import com.ss.work.util.pachong.HttpClientUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 微博相关的controller
*/
@Controller
@RequestMapping("/weibo")
public class OAuthWeiBoController {
//引导需要授权的用户到如下地址:
public static final String CODEURL="https://api.weibo.com/oauth2/authorize?client_id=CLIENT_ID&response_type=code&redirect_uri=REDIRECT_URI";
//CLIENTID
public static final String CLIENT_ID="在微博开放平台注册的APPKEY";
//REDIRECT_URI 点击确认成功后回调的url地址
public static final String REDIRECT_URI="http://localhost:2333/weibo/callback";
/**
* 获取授权界面地址
* @return
*/
@RequestMapping("/getGrantUrl")
public String getGrantUrl(){
//获取授权界面地址
String codeUrl = CODEURL.
replace("CLIENT_ID", CLIENT_ID)
.replace("REDIRECT_URI", REDIRECT_URI);
return "redirect:"+codeUrl;
}
}
前端授权界面如下所示:
2.用户同意授权,页面跳转
页面跳转至 YOUR_REGISTERED_REDIRECT_URI/?code=CODE:
换取Access Token:
//CLIENTID
public static final String CLIENT_ID="在微博开放平台注册的APPKEY";
//SECRET
public static final String CLIENT_SECRET="在微博开放平台注册的应用所对应的AppSecret";
//获取token的url地址
public static final String TOKENURL="https://api.weibo.com/oauth2/access_token?client_id=CLIENT_ID&client_secret=CLIENT_SECRET&grant_type=authorization_code&redirect_uri=REDIRECT_URI&code=CODE";
/**
* 点击授权成功之后,调用这个接口
* @param code
* @return
*/
@RequestMapping("/callback")
public String callback(String code) throws Exception {
System.out.println("获取的code:"+code);
//获取token的url地址
String tokenUrl = TOKENURL
.replace("CLIENT_ID", CLIENT_ID)
.replace("CLIENT_SECRET",CLIENT_SECRET)
.replace("CODE",code);
//使用HttpClientUtil工具类发送请求,返回Json字符串
String tokenJsonStr = HttpClientUtil.httpToGet(tokenUrl);
//把Json字符串转换为json对象
JSONObject jsonObject= JSONObject.parseObject(tokenJsonStr);
//获取token
String accessToken = jsonObject.getString("access_token");
//获取用户信息
return accessToken ;
}
TOKENURL的返回值
3.使用获得的OAuth2.0 Access Token调用API,获取用户身份,完成用户的登录。
//通过access_token获取用户信息的接口
public static final String USERINFOURL="https://api.weibo.com/2/users/show.json?access_token=ACCESS_TOKEN";
/**
* 获取用户信息
*/
private String getUserInfo(String accessToken) throws Exception {
//获取用户信息的接口
String userInfoUrl = USERINFOURL
.replace("ACCESS_TOKEN",accessToken);
//使用HttpClientUtil工具类发送请求,返回Json字符串
String tokenJsonStr = HttpClientUtil.httpToGet(userInfoUrl);
//把Json字符串转换为json对象
JSONObject jsonObject= JSONObject.parseObject(tokenJsonStr);
//获取昵称
String name = jsonObject.getString("name");
return name;
}
USERINFOURL返回结果:
三、总结
事实上,登录流程远没有这么简单,当用户取消授权时就不能让其登录,程序里还没有加上这类判断,对于从未注册过的用户来说,这次登录就相当于一次注册,所以还需要以微博中用户的某些信息作为注册信息进行登录,当已经注册过的用户使用第三方登录时,要让其正常登录。
不管是微博、微信、QQ,git等,要使用第三方登录都需要去对应的开放平台注册应用,有不足请指正,共同学习,互相进步~