Rest yii2api-使用Oauth对用户和网站进行身份验证?
我正在建立一个服务,处理来自不同网站的内容。每个网站都有自己的用户 因此,我需要对访问我的API的网站进行身份验证,并对从该网站登录的用户进行身份验证 由于Yii2不能处理2个并行用户身份,在这种情况下,我不能使用角色。我决定以以下方式构建它: 处理网站 我有一个名为“网站”的表,网站包含两个字段访问令牌和过期令牌 从任何网站(这是一个Yii基本安装)上,他们都可以: 这部分是一个正在进行的工作,因此假设网站将请求登录入口点:Rest yii2api-使用Oauth对用户和网站进行身份验证?,rest,yii2,yii2-api,yii2-authclient,Rest,Yii2,Yii2 Api,Yii2 Authclient,我正在建立一个服务,处理来自不同网站的内容。每个网站都有自己的用户 因此,我需要对访问我的API的网站进行身份验证,并对从该网站登录的用户进行身份验证 由于Yii2不能处理2个并行用户身份,在这种情况下,我不能使用角色。我决定以以下方式构建它: 处理网站 我有一个名为“网站”的表,网站包含两个字段访问令牌和过期令牌 从任何网站(这是一个Yii基本安装)上,他们都可以: 这部分是一个正在进行的工作,因此假设网站将请求登录入口点: > auth > api $client=新客户端([
> auth
> api
$client=新客户端(['baseUrl'=>'https://website.api/index.php?r=v1']);
$response=$client->post('user/login',$data)->send();
回声“;
变量转储($response->content);
回声“;
这是为了获取访问令牌,并检查令牌的过期日期
我的问题是:
这是处理特定场景的API请求的好主意吗?我认为有很多电话可以获取简单的数据。是否需要使用令牌来获取数据
如果我想使用承载令牌来处理内容和用户访问,我会怎么做
因为Yii2无法处理2个并行用户身份
我认为任何程序或系统都不应该维护并行用户会话,至少在这些情况下是这样。您正在构建一个API,因此请将其设置为无状态,不要使用任何会话。让它完全成为一个基于令牌的系统。更多信息请参见此处:
auth
接收用户的login/password
或注册表单相关输入或处理第三方身份验证,然后在成功后生成两个令牌:长寿命刷新\u令牌和短命访问\u令牌,如链接文章中所述。然后,刷新令牌应保存在数据库中,因为它将持续数月、数年或永远,并且仅用于生成访问令牌
另一端的access\u令牌可以保存在内存中,因为它的生存时间很短,每次请求时都会被检索和比较。我认为这是一个存储它的完美地方,因为它支持不同的存储和数据库,如REDIS或MemCache,并且还有一个新的标记,因此当令牌过时时,它会自动删除
auth
应用程序的私有操作,如过期时生成新访问令牌的操作,应该只使用刷新令牌来识别用户,因此它可能有自己的用户类使用该令牌对用户进行身份验证
另一方面,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>";
> auth
> api