Yii2 Rest API用户身份验证

Nit*_*und 4 yii yii2 yii2-advanced-app

我正在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;
    }
Run Code Online (Sandbox Code Playgroud)

现在,我将如何在控制器操作中获取用户身份?据我所知,访问令牌将从请求标头内的Web服务设置.

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

小智 7

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

双方HttpBearerAuthHttpBasicAuth可以使用findIdentityByAccessToken()配置正确时梅索德.您应该使用的行为取决于您希望用户进行身份验证的方式.

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

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

loginByAccesToken将调用findIdentityByAccesToken方法您可以通过在auth属性中定义闭包来操作此行为,请参阅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

希望这可以帮助