【问题标题】:What authentication should I use in an api developed with Yii 2?我应该在使用 Yii 2 开发的 api 中使用什么身份验证?
【发布时间】:2018-04-25 16:17:11
【问题描述】:

我有一个关于 Yii 框架中的 REST API 身份验证的问题。在登录端点,用户必须输入电子邮件和密码,如果他匹配服务器上的数据,返回访问令牌,该令牌是否会用于其他端点?这是还是我误会了?

如果是这样,登录身份验证应该与其他端点不同吗?在每种情况下我应该使用哪种身份验证?

HttpBasicAuth

HttpBearerAuth

查询参数验证

我的另一个问题是关于注册端点,它应该没有任何身份验证吗?如何保护此网址以防止用户伪造多条记录?

【问题讨论】:

    标签: php yii yii2


    【解决方案1】:

    确保您的控制器是从 yii\rest\Controlleryii\rest\ActiveController 扩展而来的。

    对于登录和注册,您应该提交一个 POST 请求并验证用户输入。为避免出现多个虚假记录,您可以通过发送确认链接或验证码来验证电子邮件或电话号码是否唯一。

    对于需要身份验证的其他控制器,您可以使用 HttpBearerAuth::className()QueryParamAuth::className()

    如果是HttpBearerAuth::className(),我们必须在授权标头中传递访问令牌,例如Authorization: Bearer <access token here>

    如果是QueryParamAuth::className(),我们必须将请求 url 中的访问令牌作为参数传递,例如 api-url?access-token=。

    您可以像这样将身份验证方法添加到您的控制器中

    use yii\filters\auth\HttpBearerAuth;
    
    public function behaviors()
    {
        $behaviors = parent::behaviors();
        $behaviors['authenticator'] = [
            'class' => HttpBearerAuth::className(),
        ];
        return $behaviors;
    }
    

    【讨论】:

    • 所以我可以发送一个包含两个电子邮件和密码字段的帖子进行登录,验证它是否有效并返回访问令牌以用于下一次与 Bearer 的申请?
    • 是的,将用户名和密码发布到您的登录 api,验证,返回 access_token。在进一步的请求中使用此访问令牌作为承载令牌或查询参数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 2018-10-09
    • 2020-06-11
    • 2016-03-09
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多