Yii2 Rest API用户认证

尼丁·蓬德

我正在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高级应用程序,请帮助我。

提姆

简单的答案,有一种以上的可能性来实现这种行为。

正确配置后,两者HttpBearerAuthHttpBasicAuth都可以使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章