PHP:获取Github OAuth 第三方登录授权

in Share with 0 comment

Github 登陆

申请Github 登陆授权的话,只要一个Github账号就可以了

第三方登陆原理

第三方登陆 就是 获取 OAuth 授权,用户想登陆A网站,A网站要用户提供第三方网站的数据,证明自己的身份。

- A 网站让用户跳转到 GitHub。
- GitHub 要求用户登录,然后询问"A 网站要求获得 xx 权限,你是否同意?"
- 用户同意,GitHub 就会重定向回 A 网站,同时发回一个授权码。
- A 网站使用授权码,向 GitHub 请求令牌。
- GitHub 返回令牌.
- A 网站使用令牌,向 GitHub 请求用户数据。

php 简单的获取github oauth

Github地址:https://github.com/anhao/github-with-oauth/

添加Github OAuth App

添加地址:https://github.com/settings/applications/new

Snipaste_2019-06-14_14-30-18.png

Application name:应用名称
Homepage URL:首页地址
Application description:应用描述
Authorization callback URL:回调地址,获取授权返回的地址

添加成功后会得到client_idclient_secreet

第一步 A 网站 跳 Github

通过浏览器 调到 Github
请求方法get
请求地址:https://github.com/login/oauth/authorize
请求参数:

response_type : code
client_id : xxx
redirect_uri : https://alone88.cn/oauth/redirect
scope : user:email
state : xxx

response_type :请求类型,固定就是code
client_id:申请到的client_id
redirect_uri: Github 授权后跳转的链接地址,和申请时填一样
scope : 要申请什么权限
state:随机字符,防跨站攻击

获取 code

获取跳到 github 后,github 会判断用户是否已经登陆,没有登陆会让你登陆
Snipaste_2019-06-14_14-51-01.png

登陆之后会跳到授权页面,用户同意授权之后,Github 会返回一个 code授权码 到A 网站

Snipaste_2019-06-14_14-52-50.png

返回信息

code : xxx
state: xxx

code : Github 返回的授权码,A网站用来向Github 申请令牌用的
state: 上一步生产的state,可以校验跨站攻击

获取令牌

上一步已经拿到code,然后就可以向Github申请令牌了

请求方式:POST
请求地址:https://github.com/login/oauth/access_token
请求参数:

grant_type: authorization_code
code: xxx
client_id: xxx
client_secret: xxx
redirect_uri: https://alone88.cn/oauth/redirect
state: xxx

code :上一步申请的code
client_idGithub提供的client_id
client_secretgithub 提供的client_secret
redirect_urihttps://alone88.cn/oauth/redirect
statexxx

返回的参数

token_type:Bearer 
access_token:access_token

token_type:token 类型一般是 Bearer;
access_token:Github提供的令牌,有了这个令牌,就可以去获取用户的数据了

获取用户数据

请求方式:GET
请求地址:https://api.github.com/user
请求参数:

access_token:xxx //上一步获取的access_token令牌

获取信息之后就可以得到用户身份了

Responses