我应该在使用 Yii 2 开发的 api 中使用什么身份验证?

What authentication should I use in an api developed with Yii 2?

我对 Yii Framework 中的 REST API 身份验证有疑问。在登录端点,用户必须输入电子邮件和密码,如果他匹配服务器上的数据,returns 一个访问令牌,该令牌是否会用于其他端点?是这样还是我理解错了?

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

HttpBasicAuth

HttpBearerAuth

QueryParamAuth

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

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

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

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

HttpBearerAuth::className() 的情况下,我们必须在授权 header 中传递访问令牌,例如 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;
}