记一次使用Oauth的情况
1.Oauth角色
- 资源服务器(resource server)
- 授权服务器(authorization server)
- 资源所有者(resource owner)
- 客户端(Client)
2.Oauth授权模式
- 授权码模式
- 简化模式
- 密码模式
- 客户端模式
3.业务逻辑(授权码模式)
用户第一次进入客户端首页,先验证是否登录,如果没有登录则跳转至服务端授权登录
进入//用户没有登录则去进行Oauth授权登录 if(!$user){ return (new SSoController())->index($request); } //用户已登录则处理下面的逻辑 ...
index()
方法,检查有没有code
,没有code
的话,则构建authorize请求,去获取code
,这时,认证服务中心判断用户是否登录,没登录,登录用户认证服务中心的账号密码,登录成功之后,返回一个临时code
请求之后,授权服务器会重定向到我们$url = "$this->authorize_url?client_id=$this->client_id&redirect_uri=$this->callback&response_type=code"; header('Location: '.$url); exit;
$url
里面的redirect_uri
这里地址并带上我们code
,这个地址也就是我们的应用入口地址,这时重复上面步骤,有code
之后,则构建认证请求
认证服务中心返回该用户的token,我们拿到token,去资源服务中心获取用户信息,拿到用户信息比对本地用户数据,符合期望让他本地登录成功。$url = "$this->access_token_url?client_id=$this->client_id&client_secret=$this->client_secret&redirect_uri=$this->callback&code=$code&grant_type=authorization_code"; $result = $this->curl_get_https($url);
本作品采用《CC 协议》,转载必须注明作者和本文链接