Yii2 Rest API 用户认证

Yii2 Rest API user authentication

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

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

我已经按照 Yii2 Rest guide .

中的建议在我的用户身份 class 中创建了 findIdentityByAccessToken() 方法

下面是在我的控制器

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

        return $behaviors;
    }

现在,我将如何在我的控制器操作中获取用户身份?据我所知,访问令牌将从请求 header.

内的 Web 服务设置

注意:我使用的是 Yii2 高级应用 请帮助我。

简单的回答有不止一种可能性来实现这个行为。

如果配置正确,HttpBearerAuthHttpBasicAuth 都可以使用 findIdentityByAccessToken() 方法。您应该使用的行为取决于您希望用户验证自己的方式。

如果您阅读 HttpBasisAuth HttpBasicAuth 的文档,您会看到

The default implementation of HttpBasicAuth uses the loginByAccessToken() method of the user application component and only passes the user name. This implementation is used for authenticating API clients.

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

HttpBeareAuth 几乎是一样的。它还实现了 loginByAccessToken

那么两者有什么不同呢?简单的获取数据的位置。其中 HttpBasicAuth 期望客户端已设置基本 header 示例 header('Authorization: Basic '. base64_encode("user:password"));(PHP 已内置对此的支持,请参阅:http://php.net/manual/en/features.http-auth.php

HttpBearerAuth 期望 header 定义如下 header('Authorization: Bearer '. $token);

所以您应该使用的解决方案取决于您希望 users/clients 验证自己的方式。您还可以使用 QueryParamAuth,它使用户可以通过 GET 参数对自己进行身份验证,请参阅 queryparamauth

如果您想使用自定义 header 让我们说 X-API-Token 创建您自己的自定义 class 实现 AuthMethod 接口请参阅 AuthMethod

希望对您有所帮助