我正在构建一个处理来自不同网站的内容的服务。每个网站都有自己的用户。
因此,我需要对访问我的 API 的网站进行身份验证,并且我需要对从该网站登录的用户进行身份验证。
由于 Yii2 不能处理 2 个并行用户身份,在这种情况下我不能使用角色。我决定按以下方式构建它:
处理网站
我有一个名为“网站”的表,网站包含 2 个字段 access_token 和 expiration_token。
从任何网站(这是 Yii 的基本安装)他们做:
$data = array();
$data['api_key'] = 'xxxxx';
$data['api_secret'] = 'zzzzzz';
$client = new Client(['baseUrl' => 'https://website.api/index.php?r=v1']);
$response = $client->post('website/get-access-token', $data)->send();
echo "<pre>";
var_dump($response->content);
echo "</pre>";
如果令牌过期,他们可以向入口点“网站/刷新访问令牌”发出另一个请求
然后每个请求 GET 或 POST 他们必须发送这个 access_token,它保存在 SESSION 中(令牌现在每 7 天过期一次)。
这不是通过任何 HTTP 验证来处理的,只是直接向 api 请求令牌。
处理用户
对于这部分,当用户使用电子邮件/密码或社交网络进行身份验证时,我向用户控制器发出请求,我在其中设置了承载令牌:
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['authenticator'] = [
'class' => CompositeAuth::className(),
'authMethods' => [
HttpBearerAuth::className()
]
];
return $behaviors;
}
这部分是一个正在进行的工作,所以假设网站将请求登录入口点:
$client = new Client(['baseUrl' => 'https://website.api/index.php?r=v1']);
$response = $client->post('user/login', $data)->send();
echo "<pre>";
var_dump($response->content);
echo "</pre>";
这假设获取 access_token 并检查令牌到期日期。
我的问题是:
这是为我的特定场景处理 API 请求的好主意吗?我认为有很多电话可以获取简单的数据。获取数据是否需要使用token?
如果我想使用承载令牌来处理内容和用户访问,我会怎么做?