Oauth2的使用(第三方授權登錄)


例子: 京東商城 ,微博 ,用戶三者之間的關系

第一方:用戶

第二方:京東商城

第三方:微博

用戶不希望在京東商城上注冊,可以授權微博使用微博上的用戶信息進行登錄京東商城。

授權流程:

地址一:授權頁面的跳轉地址

https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI

地址二:授權后的回調地址(code回調給商城的地址)

 

地址三:用code交換授權碼access_token的地址(在交換過程中要加入商城的Secret的應用密鑰)

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

 

地址四:用access_token交換用戶信息的地址(第三方提供的接口api地址,使用授權碼+uid交換用戶信息)

https://api.weibo.com/2/users/show.json?access_token=2.00S4TE5GH4psNBf534795d1677YqPB&uid=1

 

 

6 授權調用演示

 

授權頁面:

 

https://api.weibo.com/oauth2/authorize?client_id=25920146&response_type=code&redirect_uri=http://passport.gmall.com:8090/vlogin

 

@RequestMapping("vlogin")
public String vlogin(String code, HttpServletRequest request) {

// 換取access_token
String access_token_url = "https://api.weibo.com/oauth2/access_token?client_id= 25920146&client_secret=dc8de1392f642a01259b136ff8e970b9&grant_type=authorization_code&redirect_uri=http://passport.gmall.com:8090/vlogin&code=e211655dd6c78a66fcfcfdff552424f6";

Map<String,String> map = new HashMap<String,String>();
map.put("client_id","25920146");
map.put("client_secret","dc8de1392f642a01259b136ff8e970b9");
map.put("grant_type","authorization_code");
map.put("redirect_uri","http://passport.gmall.com:8090/vlogin");
map.put("code",code);
String access_json = HttpclientUtil.doPost("https://api.weibo.com/oauth2/access_token", map);
System.out.println(access_json);

Map<String,String> map_access_json = new HashMap<String,String>();
Map access_map = JSON.parseObject(access_json, map_access_json.getClass());


// 獲得第三方用戶數據
String access_token = (String)access_map.get("access_token");
String uid = (String)access_map.get("uid");// uid uidStr
UmsMember umsMember = new UmsMember();
umsMember = userService.isUidExists(uid);

if(umsMember==null){

String show_url = "https://api.weibo.com/2/users/show.json?access_token="+access_token+"&uid="+uid;

String user_json = HttpclientUtil.doGet(show_url);
Map<String,String> map_user_json = new HashMap<String,String>();
Map user_map = JSON.parseObject(user_json, map_user_json.getClass());
System.out.println(user_map);

// 存入數據庫
umsMember.setNickname((String)user_map.get("screen_name"));
umsMember.setUsername((String)user_map.get("name"));
umsMember.setSourceType("2");
umsMember.setSourceUid((String)user_map.get("idstr"));
umsMember.setCreateTime(new Date());
umsMember.setAccessToken(access_token);
umsMember.setAccessCode(code);
umsMember = userService.addUser(umsMember);
}


// 根據用戶信息生成token
String key = "athouruisso";
String ip = request.getRemoteAddr();
Map<String,Object> token_map = new HashMap<>();
token_map.put("nickname",umsMember.getNickname());
token_map.put("memberId",umsMember.getId());
String token = JwtUtil.encode(key, token_map, ip);

// 將生成的token和登錄用戶信息保存在緩存中一分
userService.addUserCache(token,umsMember);
return "redirect:http://192.168.5.3:8090/index?newToken="+token;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM