Rumah >pengaturcaraan harian >pengetahuan PHP >OAuth2.0协议的介绍以及PHP接入

OAuth2.0协议的介绍以及PHP接入

安安杰尼
安安杰尼asal
2020-05-15 18:05:52524semak imbas

OAuth2.0的简介

OAuth(Open Authorization,即开放授权)是一个无需告知第三方用户的账号以及密码的情况下,授权用户信息给第三方的一个安全,开放的标准协议。更多关于协议的介绍,读者可以参考RFC 6749 。

下面开始简单的说明下该协议下最为经典的Authorization Code模式,介绍如下图:

0.png

我们说明下,上方流程中一共有四个角色。

  1. ResourceOwner为资源所有者,就是我们的用户自己

  2. User-Agent就是我们访问应用的浏览器

  3. Client为第三方服务

  4. AuthorizationServer为认证服务器,可以理解为用户资源的提供方。

那么调用的流程则为:

  1. 用户本人通过浏览器访问Client第三方的服务,Client通过构造OAuth2链接(参数包括当前第三方服务的身份ID,以及重定向URI),将用户引导到认证服务器的授权页

  2. 此时用户在浏览器上选择是否同意授权

  3. 若用户同意授权,则认证服务器将用户重定向到第一步指定的重定向URI,同时附上一个授权码Code

  4. 第三方服务收到授权码,带上授权码来源的重定向URI,向认证服务器申请凭证。

  5. 认证服务器检查授权码和重定向URI的有效性,通过后颁发AccessToken(调用凭证)

d和e都是在服务端执行的,不需要通过浏览器

OAuth2的设计

18982487-3f99ad9030fa0b5b.png

一、授权登录链接的构造

首先在用户访问一个应用时,前端调用服务端的接口,服务端检测到用户未登录,此时构造一个授权链接。

$redirect_uri = 'https://test.xx.ccom/index';
$this->goUrl('https://auth.xx.com/connect/oauth2/authorize?appid=xxx&redirect_uri='.$redirect_uri);

将该链接返回给到前端,前端直接跳转到该链接。然后https://auth.xx.com/connect/oauth2/authorize

对展示一个是否同意授权的页面,用户通过点击授权,此时认证服务器将直接重定向到redirect_uri并且携带一个Code参数。服务端再接收到这个code参数时,通过该参数前往认证服务器获取access_token。

$code = $_GET['code'];
$res = file_get_contents('.$code );
$access_token = $res['access_token'];

然后服务端再通过这个access_token到认证服务器换取用户信息。

$res = file_get_contents('https://auth.xx.com/user_info?token='.$access_token );
$uid = $res['uid'];
$name = $res['name'];

缓存方案建议

通过该协议获取到了用户可以做一定的缓存,避免认证服务器压力过大。

  1. 第三方可以设计一定的cookie原则,用来存储用户信息避免一直请求认证服务器。

Atas ialah kandungan terperinci OAuth2.0协议的介绍以及PHP接入. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn