步骤一、在GitHub上设置一个OAuth App

举例

保存好secrets

步骤二、前端

  1. 设置一个按钮跳转到授权登录页

<a href="https://github.com/login/oauth/authorize?
client_id=b9c6b520a5fe17cad4d4&
redirect_uri=http://localhost:20000/oauth/redirect">GitHub</a>

client_id:GitHub网站接入提供的 APP KEY

redirect_uri:认证后重定向的地址

GitHub授权页面

  1. 点击授权

会有一个跳转等待页

网络不稳定可能一直卡在这个页面

F12查看网络,可以看见网站向后端发了一个code码,这个code用来换取token

步骤三、编写后端代码

  1. 从配置文件中读取clientId和clientSecret,当然硬编码也行

@Component
@ConfigurationProperties(prefix = "github")
public class GitHubOAuthInfo {private String clientId;private String clientSecret;public GitHubOAuthInfo() {}public GitHubOAuthInfo(String clientId, String clientSecret) {this.clientId = clientId;this.clientSecret = clientSecret;}public String getClientId() {return clientId;}public void setClientId(String clientId) {this.clientId = clientId;}public String getClientSecret() {return clientSecret;}public void setClientSecret(String clientSecret) {this.clientSecret = clientSecret;}
}
  1. 核心代码(有一些我自己项目里的代码,注意修改)

    //用来发送请求的工具类,这个网上有很多现成的@AutowiredRestTemplateUtil restTemplateUtil;//用户模块远程调用接口@AutowiredMemberFeignService memberFeignService;//clientId和clientSecret@AutowiredGitHubOAuthInfo gitHubOAuthInfo;@GetMapping("/redirect")public String redirect(String code, HttpSession session) {//拿到code,clientId和clientSecret去获取accessTokenString getAccessTokenUrl = "https://github.com/login/oauth/access_token";HttpHeaders headers = new HttpHeaders();List<MediaType> mediaTypes = new ArrayList<>();//请求头accept设置为:application/jsonmediaTypes.add(MediaType.APPLICATION_JSON);headers.setAccept(mediaTypes);HashMap<String, String> requestBody = new HashMap<>(16);requestBody.put("client_id", gitHubOAuthInfo.getClientId());requestBody.put("client_secret", gitHubOAuthInfo.getClientSecret());requestBody.put("code", code);//请求路径,请求头,请求体,请求响应结果类型,路径参数ResponseEntity<String> responseEntity = restTemplateUtil.post(getAccessTokenUrl, headers, requestBody, String.class, new HashMap<>(16));String accessTokenJson = responseEntity.getBody();ObjectMapper objectMapper = new ObjectMapper();//转换带下划线的属性为驼峰属性objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);AccessToken accessToken = null;try {accessToken = objectMapper.readValue(accessTokenJson, AccessToken.class);} catch (JsonProcessingException e) {e.printStackTrace();}//拿令牌去获取信息headers.set("Authorization", "token " + accessToken.getAccessToken());String getUserInfoUrl = "https://api.github.com/user";ResponseEntity<String> response = restTemplateUtil.get(getUserInfoUrl, headers, String.class, new HashMap<>(16));//body:GitHub用户信息String body = response.getBody();GitHubUserInfo gitHubUserInfo = JSON.parseObject(body, GitHubUserInfo.class);gitHubUserInfo.setToken(accessToken.getAccessToken());//知道当前是哪个社交用户//1.当前用户如果是第一次进网站,自动注册进来(为当前社交用户生成一个会员信息账号,以后这个社交账号就对应指定的会员)R login = memberFeignService.login(gitHubUserInfo);if (login.getCode() == 0) {MemberRespVo data = login.getData("data", new TypeReference<MemberRespVo>() {});session.setAttribute(AuthServerConstant.LOGIN_USER, data);return "redirect:http://meiwei.com";} else {return "redirect:http://auth.meiwei.com/login.html";}}

总结流程

OAuth2 -GitHub授权登录超详细教程相关推荐

  1. spring security oauth2 常用授权方式配置详细教程(一)

    1 spring security oauth2 简单配置说明(一) 配套源码:https://download.csdn.net/download/tiancxz/12902941 1.1 工程说明 ...

  2. 2023年微信小程序获取手机号授权登录注册详细教程,包含服务端教程

    前言 小程序中有很多地方都会用到用户的手机号,比如登陆注册,填写收货地址等等.有了这个组件可以快速获取微信绑定手机号码,无须用户填写. 网上大多数教程还是往年的,而微信官方的api已做了修改.本篇文章 ...

  3. 微信扫码登录超详细教程

    一.OAuth2 1.OAuth2介绍 2.OAuth2解决什么问题 (1)OAuth2提出的背景   照片拥有者想要在云冲印服务上打印照片,云冲印服务需要访问云存储服务上的资源.(2)图例   资源 ...

  4. Github + Hexo 搭建个人博客超详细教程

    Github + Hexo 搭建个人博客超详细教程 本文目录 generated with DocToc 网站搭建 本文目录 1.安装node.js 2.添加国内镜像 3.安装Git 4.注册Gith ...

  5. Github上传代码菜鸟超详细教程

    最近需要将课设代码上传到Github上,之前只是用来fork别人的代码. 这篇文章写得是windows下的使用方法. 第一步:创建Github新账户 第二步:新建仓库 第三部:填写名称,简介(可选), ...

  6. 二进制安装部署 4 kubernetes集群---超详细教程

    二进制安装部署kubernetes集群---超详细教程 前言:本篇博客是博主踩过无数坑,反复查阅资料,一步步搭建完成后整理的个人心得,分享给大家~~~ 本文所需的安装包,都上传在我的网盘中,需要的可以 ...

  7. post修改服务器数据源,postgresql安装及配置超详细教程

    1. 安装 根据业务需求选择版本,官网下载 初始化数据库 执行完初始化任务之后,postgresql 会自动创建和生成两个用户和一个数据库: linux 系统用户 postgres:管理数据库的系统用 ...

  8. 大数据平台Ambari2.7.4+HDP3.1.4安装(超详细教程)

    大数据平台Ambari2.7.4+HDP3.1.4安装(超详细教程) Ambari2.7.4+HDP3.1.4是最后一个免费版本,新版本需要授权. 因工作需要,安装大数据集群,了解到Ambari属于A ...

  9. linux安装mysql8⼀步⼀步超详细教程

    1.linux安装mysql8⼀步⼀步超详细教程 cd /usr/local/src 2.下载mysql8 wget https://dev.mysql.com/get/Downloads/MySQL ...

最新文章

  1. 想要,但很难得到就随缘
  2. Java编译分类:前端编译和后端编译
  3. [摘录]遇见未知的自己(一)
  4. 用Python操作Redis
  5. Linux上的node站点之centos配置nodejs运行环境笔记
  6. .NET Core开发日志——Middleware
  7. CodeIgniter中的FCKeditor的路径问题
  8. 迭代开发个人总结20160627
  9. Jquery弹出层插件,非常好用绚丽Lee dialog 1.0
  10. 时间序列--平稳性介绍及检验方法
  11. 记一个tcp udp测试工具ethrc
  12. Java高级看这篇就足够了(高级知识汇总)
  13. pk 打包文件_【旅行】同样是旅行,为啥中国人喜欢拉行李箱,老外喜欢背大包?附干货:行李打包锦囊...
  14. jquery fadein css同时用,Fadein,fadeout事件一起使用jquery
  15. Geosoft Oasis.Montaj.v7.1.1简介
  16. Android Studio的安装 环境搭建
  17. 飞拓无限助力猫眼娱乐,共同推动电影平台商业化
  18. linux shell使用sed在行首和行末插入内容
  19. com.alibaba.fastjson.JSONException: syntax error, expect {, actual [, pos 64, fieldName ***, fasjson
  20. java对接快递100追踪物流信息

热门文章

  1. SAP QM 不常用事务代码QVM3 - Inspection Lots Without Usage Decision
  2. 两台电脑通过FTP服务进行传输文件
  3. 从企业数字化发展的四个阶段,看数字化创新战略
  4. 如何下载安装VSCode(2023年8月5日更新)
  5. Win10安装Microsoft Store
  6. 密码学和安全问题讨论大集合
  7. MQL5 向导:如何教导 EA 以任意价格建立挂单
  8. 职场新人酒场生存法则
  9. 售前工程师的经验总结
  10. docker入门之Docker Engine