当前位置:   article > 正文

App实现GitHub的OAuth应用程序认证_gitpod oauth 认证

gitpod oauth 认证

1,创建认证的应用信息 

创建 OAuth 应用程序 - GitHub 文档

 2,填写应用信息

3,创建成功后,从图1位置点击进入

4,主要使用以下三个url 

  1. // 跳转到登录认证页面
  2. https://github.com/login/oauth/authorize
  3. // 获取认证成功后的令牌
  4. https://github.com/login/oauth/access_token
  5. // 从令牌获取用户信息
  6. https://api.github.com/user

5,代码实战

配置参数 

  1. github:
  2. # 客户端ID
  3. clientId: xxxxxx
  4. # 客户端秘钥
  5. clientSecret: xxxxxxxx
  6. # 用户授权地址(返回授权码)
  7. authorizationUrl: https://github.com/login/oauth/authorize
  8. # 回调地址,获取access_token
  9. redirectUrl: http://localhost:8082/auth2/success
  10. # 认证服务器生成access_token
  11. accessTokenUrl: https://github.com/login/oauth/access_token
  12. # 获取用户身份信息
  13. userInfoUrl: https://api.github.com/user

auth2Properties即为上图的配置信息 

  1. // 首先调用此方法,跳转到github认证登录页面
  2. @GetMapping("/oauth/authorize")
  3. public String authorize(){
  4. String url = auth2Properties.getAuthorizationUrl() +
  5. "?client_id="+auth2Properties.getClientId() +
  6. "&redirect_uri="+auth2Properties.getRedirectUrl();
  7. log.info("授权url:{}",url);
  8. // 重定向到授权地址
  9. return "redirect:"+url;
  10. }
  1. // 成功认证后回调方法
  2. @GetMapping("/auth2/success")
  3. public String callback(@RequestParam("code") String code,
  4. Model model,
  5. HttpServletRequest request,
  6. HttpServletResponse response){
  7. // 获取access_token
  8. //https://github.com/login/oauth/access_token?client_id...
  9. // 组装参数
  10. String url = auth2Properties.getAccessTokenUrl()+
  11. "?client_id="+auth2Properties.getClientId()+
  12. "&client_secret="+auth2Properties.getClientSecret()+
  13. "&code="+code+
  14. "&grant_type=authorization_code";
  15. // 以上请求就是获取access_token的请求
  16. log.info("获取access_token请求:{}",url);
  17. // 构建请求头
  18. HttpHeaders headers = new HttpHeaders();
  19. headers.add("accept","application/json");
  20. // 构建请求响应实体对象
  21. HttpEntity<String> httpEntity = new HttpEntity<>(headers);
  22. // post请求方式
  23. ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, httpEntity, String.class);
  24. // 获取请求响应结果
  25. String result = responseEntity.getBody();
  26. //
  27. log.info("远程请求github授权地址,获取access_token:{}",result);
  28. //解析响应结果
  29. Map<String,String> maps = JSON.parseObject(result,Map.class);
  30. // 获取access_token
  31. String access_token = maps.get("access_token");
  32. // 使用access_token换取用户信息,实现用户登录
  33. OAuthUser oAuthUser = this.getUserInfo(access_token);
  34. }
  35. private OAuthUser getUserInfo(String access_token) {
  36. // 获取请求地址
  37. String url = auth2Properties.getUserInfoUrl();
  38. // 构建请求头
  39. HttpHeaders headers = new HttpHeaders();
  40. headers.add("accept","application/json");
  41. //access_token放入请求头
  42. headers.add("Authorization","token "+access_token);
  43. // 构建请求响应实体对象
  44. HttpEntity<String> httpEntity = new HttpEntity<>(headers);
  45. // get请求方式
  46. ResponseEntity<String> responseEntity = restTemplate.exchange(url,
  47. HttpMethod.GET,
  48. httpEntity,
  49. String.class);
  50. // 获取请求响应结果
  51. String result = responseEntity.getBody();
  52. // 把json字符串转换为对象
  53. OAuthUser oAuthUser = JSON.parseObject(result, OAuthUser.class);
  54. return oAuthUser;
  55. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/513632
推荐阅读
相关标签
  

闽ICP备14008679号