认证和授权
认证(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之后,进入授权窗口
- 授权成功,跳转到客户端网站。

Github OAuth第三方接入
前期准备
1、前端项目和服务端项目
2、在github 中创建OAuth应用
创建应用流程
https://docs.github.com/cn/developers/apps/building-oauth-apps/creating-an-oauth-app

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