github oauth 第三方认证登录

认证和授权

认证(Authentication)

常用的身份认证的方式:
1、用户名和密码登陆
2、邮箱发送登陆链接
3、手机号接收验证码

授权(Authorization)

常见的授权登录有:QQ、微信、微博、github

OAuth

概念

OAuth是互联网行业一种标准的授权方式。各个公司根据这一套标准实现自己的OAuth认证和授权流程,而第三方想要接入这个流程,就需要使用OAuth这套方案。

角色:

  • 客户端:浏览器端
  • 服务端:开发这个网站对应的服务器端
  • 授权服务器:提供OAuth第三方接入服务的提供商,比如QQ、微信等。

授权方式:

  • 授权码 Authorization Code
  • 密码式(password):用OAuth提供方暴露的API,进行本网站的用户名和密码登陆。(不推荐,信任和安全,一般用于公司内部的登陆方式)
  • 客户端凭证(client credentials)

Authorization Code

通过认证码的认证授权方式进行OAuth的接入时,主要流程分别是以下几步:

  • 客户端发起请求redirect到OAuth接入方并附带上client_id
  • 用户在redirect之后的网站上输入用户名和密码
  • 登陆成功之后,OAuth接入方会返回给服务端一个code。
  • 服务端拿到code之后,拿着client_secret和code向OAuth接入方申请获得Token
  • 服务端拿到Token之后,进入授权窗口
  • 授权成功,跳转到客户端网站。
image

Github OAuth第三方接入

前期准备

1、前端项目和服务端项目
2、在github 中创建OAuth应用

创建应用流程

https://docs.github.com/cn/developers/apps/building-oauth-apps/creating-an-oauth-app

image

api文档: https://docs.github.com/cn/developers/apps/building-oauth-apps/authorizing-oauth-apps

涉及的api

跳转:简易版可只携带client_id
url: https://github.com/login/oauth/authorize
param

  • client_id:client_id是注册时的client_id
  • scope:希望得到的权限范围
  • redirect_uri:授权后重定向到项目的地址,必须和注册Github OAuth App时的redirect uri相同
  • login:用于登录和授权应用程序的特定帐户,如果你在该网站登陆过github并授权,则在此请求OAuth时免去登陆步骤。
  • state:不可猜测的随机字符串。它用于防止跨站点请求伪造攻击。
  • allow_signup:在OAuth流程中,是否向未认证的用户提供注册GitHub的选项。默认值为true。false在策略禁止注册的情况下使用。

请求****token****: post
url: https://github.com/login/oauth/access_token
param

  • client_id:必需,标明token使用方
  • client_secret:必需,标明token使用方
  • code:必需,代表用户已授权
  • redirect_uri:同上
  • state:同上

请求用户信息:****get
url: https://api.github.com/user
header
Authorization:即请求access_token时返回的access_token,该字段统一是token +access_token

综上

总共的核心步骤如下:

  • 注册应用账号
  • 前端页面跳转授权页面
  • 授权完跳转到后端接口并会携带code
  • 后端接口用code换取token
  • 用token和账号秘钥换取用户信息
  • 比较更新或新增用户数据
  • 存jwt token cookie
  • 重定向到前端页

Demo源码:
包含跳转登录,数据库存储、用户详情、用户列表等接口和功能;

前端:https://github.com/Aimee1608/github-oauth-admin
后端:https://github.com/Aimee1608/github-oauth-server

你可能感兴趣的:(github oauth 第三方认证登录)