yii2restapi用户身份验证

yii2restapi用户身份验证,yii,yii2,yii2-advanced-app,Yii,Yii2,Yii2 Advanced App,我正在yii2中实现restapi。我想使用访问令牌对用户进行身份验证。我已参考了以下各种答案 但我不清楚应该使用哪种身份验证方法,以及如何获得用户身份 我已经按照中的建议在我的用户标识类中创建了findIdentityByAccessToken()方法 下面是在我的控制器中实现的行为 public function behaviors() { $behaviors = parent::behaviors(); $behaviors['authentic

我正在yii2中实现restapi。我想使用访问令牌对用户进行身份验证。我已参考了以下各种答案

但我不清楚应该使用哪种身份验证方法,以及如何获得用户身份

我已经按照中的建议在我的用户标识类中创建了
findIdentityByAccessToken()
方法

下面是在我的控制器中实现的
行为

public function behaviors() {
        $behaviors = parent::behaviors();
        $behaviors['authenticator'] = [
            'class' => HttpBasicAuth::className(),
            'except' => ['login','forgot-password']
        ];

        return $behaviors;
    }
现在,我将如何在控制器操作中获取用户标识?据我所知,访问令牌将从请求头中的web服务设置

注意:我正在使用Yii2高级应用程序
请帮帮我。

简单回答实施此行为的可能性不止一种

正确配置后,
HttpBearerAuth
HttpBasicAuth
都可以使用
findIdentityByAccessToken()
方法。您应该使用的行为取决于您希望用户对自己进行身份验证的方式

如果您阅读了
HttpBasisAuth
的文档,您将看到

HttpBasicAuth的默认实现使用用户应用程序组件的loginByAccessToken()方法,并且只传递用户名。此实现用于验证API客户端

loginByAccesToken
将调用
findIdentityByAccesToken
方法 可以通过在auth属性中定义闭包来操纵此行为,请参见

HttpBeareAuth
。它还实现了
loginByAccessToken

那么,是什么让这两个不同呢?简单说明从何处获取数据。其中
HttpBasicAuth
要求客户端设置了基本头示例
header('Authorization:basic'.base64_encode(“user:password”)(PHP对此有内置支持,请参见:)

HttpBearerAuth
需要将头定义为以下
头('Authorization:Bearer'.$token)

因此,您应该使用的解决方案取决于您希望用户/客户端对自己进行身份验证的方式。您还可以使用
QueryParamAuth
,它允许用户使用GET参数对自己进行身份验证,请参见

如果您想使用自定义头,比如说X-API-Token创建您自己的自定义类来实现
AuthMethod
接口,请参见


希望这能有所帮助

什么是不起作用的?如果不想使用访问令牌,请实现HttpBearerAuth行为。如果实现正确,您可以使用Yii::$app->userI访问经过身份验证的用户。我不知道应该使用哪个身份验证行为进行访问令牌验证