关于APP开发第三方登录access_token与openid后台处理

1.流程:
App端调用第三方进行登录
->
第三方返回openid(微博叫uid)与access_token
->
App端发送openid与access_token到后台
->
后台调用第三方提供的校验API进行校验
->
校验成功返回本应用的访问令牌token

2.后台数据库只需要在用户表保存openid即可

3.具体校验过程:

后台采用Java开发   使用Jfinal框架 HttpKit和StrKit都是jfinal框架的内容   StrKit.isBlank方法是字符串的非空验证 

微博:

       

url(post)https://api.weibo.com/oauth2/get_token_info 
参数access_token 
返回值{
    "uid": 6021880,
    "appkey": "9187121",
    "scope": "follow_app_official_microblog",
    "create_at": 15231756,
    "expire_in": 5667
}
 
做法:比对返回的uid与open_id是否一致 

具体代码如下:

public static boolean checkWeibo(String token, String openId) {
		String url = "https://api.weibo.com/oauth2/get_token_info";
		Map<String, String> paras = new HashMap<String, String>();
		paras.put("access_token", token);
		String responseString = HttpKit.post(url, paras, null);
		if (JFinal.me().getConstants().getDevMode()) {
			System.out.println(responseString);
		}
		if (StrKit.isBlank(responseString)) {
			return false;
		}
		JSONObject object = JSON.parseObject(responseString);
		if (object == null) {
			return false;
		}
		String uid = object.getString("uid");
		if (StrKit.isBlank(uid) || !uid.equals(openId)) {
			return false;
		}
		return true;
	}

微信:

url(get)https://api.weixin.qq.com/sns/auth 
参数access_token,openid 
返回值{"errcode":0,"errmsg":"ok"} 
做法errcode=0代表成功  

具体代码如下:

public static boolean checkWechat(String token, String openId) {
		String url = "https://api.weixin.qq.com/sns/auth";
		Map<String, String> paras = new HashMap<String, String>();
		paras.put("access_token", token);
		paras.put("openid", openId);
		String responseString = HttpKit.get(url, paras);
		if (JFinal.me().getConstants().getDevMode()) {
			System.out.println(responseString);
		}
		if (StrKit.isBlank(responseString)) {
			return false;
		}
		JSONObject object = JSON.parseObject(responseString);
		if (object == null) {
			return false;
		}
		int errcode = object.getIntValue("errcode");
		if (errcode != 0) {
			return false;
		}
		return true;
	}

QQ:

url(get)https://graph.qq.com/user/get_user_info 
参数oauth_consumer_key,access_token,openid 
返回值{
    "ret": 0,
    "msg": "",
    "is_lost":0,
    "nickname": "123",
    "gender": "男",
    "province": "陕西",
    "city": "西安",
    "year": "",
    "is_yellow_vip": "0",
    "vip": "0",
    "yellow_vip_level": "0",
    "level": "0",
    "is_yellow_year_vip": "0"
}
 
做法只需要比对ret是否为0 
具体代码:
public static boolean checkQQ(String token, String openId) {
		String url = "https://graph.qq.com/user/get_user_info";
		Map<String, String> paras = new HashMap<String, String>();
		paras.put("oauth_consumer_key", "1106812746");//App在腾讯开放平台注册的 appid
		paras.put("access_token", token);
		paras.put("openid", openId);
		String responseString = HttpKit.get(url, paras);
		if (JFinal.me().getConstants().getDevMode()) {
			System.out.println(responseString);
		}
		if (StrKit.isBlank(responseString)) {
			return false;
		}
		JSONObject object = JSON.parseObject(responseString);
		if (object == null) {
			return false;
		}
		int ret = object.getIntValue("ret");
		if (ret != 0) {
			return false;
		}
		return true;
	}


第一次做,各路大神轻喷。
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值