我正在yii2中实现Rest API。我想使用访问令牌对用户进行身份验证。我已经提到了各种SO答案,如下所示
但是我不清楚应该使用哪种身份验证方法以及如何获得用户身份。
我已经findIdentityByAccessToken()
按照Yii2 Rest指南的建议在我的用户身份类中创建了方法。
下面是behaviour
我的控制器中实现的
public function behaviors() {
$behaviors = parent::behaviors();
$behaviors['authenticator'] = [
'class' => HttpBasicAuth::className(),
'except' => ['login','forgot-password']
];
return $behaviors;
}
现在,如何在控制器操作中获取用户身份?据我所知,访问令牌将从请求标头中的Web服务设置。
注意:我正在使用Yii2高级应用程序,请帮助我。
简单的答案,有一种以上的可能性来实现这种行为。
正确配置后,两者HttpBearerAuth
和HttpBasicAuth
都可以使用findIdentityByAccessToken()
方法。您应使用的行为取决于您希望用户进行身份验证的方式。
如果您阅读HttpBasisAuth
HttpBasicAuth的文档,则会看到
HttpBasicAuth的默认实现使用用户应用程序组件的loginByAccessToken()方法,并且仅传递用户名。此实现用于验证API客户端。
loginByAccesToken
将调用findIdentityByAccesToken
梅索德您可以通过定义在身份验证属性的闭合看到操纵这种行为AUTH属性。
HttpBeareAuth
几乎一样。它还实现了loginByAccessToken
那么,什么使两者彼此不同?简单获取数据的位置。其中HttpBasicAuth
期望客户端已设定的基本报头示例header('Authorization: Basic '. base64_encode("user:password"));
(PHP具有构建在此请参阅支持:http://php.net/manual/en/features.http-auth.php)
在HttpBearerAuth
该首标被定义为下面的期望header('Authorization: Bearer '. $token);
因此,您应该使用的解决方案取决于您希望用户/客户端进行身份验证的方式。您还可以使用,QueryParamAuth
它使用户可以通过GET参数验证自己的身份,请参阅queryparamauth
而且,如果您要使用自定义标头,则假设X-API-Token创建自己的实现该AuthMethod
接口的自定义类,请参见AuthMethod
希望这可以帮助
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句