每个页面上的 yii2 oauth 令牌验证

yii2 oauth token validation on every page

因此我需要在除 site/loginsite/logoutsite/errorsite/auth 之外的每个页面上验证 oauth 令牌。在高级模板的基础上,这显然是在后端。

在 Yii2 中执行此操作的正确方法是什么?

  1. 从某种基本控制器扩展所有控制器?
  2. 在配置中引导 class?
  3. 自定义过滤器?
  4. 行为?

基本上我只需要在除上述 4 以外的每个页面上 运行 的函数。

Yii 2.0 已经有 3 种身份验证方法实现为过滤器:

yii\filters\auth\CompositeAuth可同时使用多个。它们通常附加到行为中的每个控制器:

public function behaviors()
{
    $behaviors = parent::behaviors();
    $behaviors['authenticator'] = [
        'class' => CompositeAuth::className(),
        'authMethods' => [
            HttpBasicAuth::className(),
            HttpBearerAuth::className(),
            QueryParamAuth::className(),
        ],
    ];
    return $behaviors;
}

并且它们都有一个 $except$only 属性来选择您要应用它们的操作。所以你的 SiteController 中可能有这样的东西:

public function behaviors()
{
    $behaviors = parent::behaviors();
    $behaviors['authenticator'] = [
        'class' => HttpBearerAuth::className(),
        'except' => ['login','logout','error','auth']
    ];
    return $behaviors;
}

您可能有相同的行为,但在所有其他控制器中没有 except 属性。或者您可以让所有其他控制器扩展一个通用控制器,在该控制器中实现验证器行为。

这些过滤器将使用内置的 User class(在您的配置文件中设置)实现 IdentityInterface to authenticate a user. That interface has already a findIdentityByAccessToken() method that you can use to validate a token instead of using findIdentity() 来注册登录用户并使其在 Yii::$app->user->identityYii::$app->user->id.

内可访问

我想在这里解释的是关于如何在内置 Yii RESTful API framework 中实现身份验证的总结,在这里可能会更好地解释:

http://www.yiiframework.com/doc-2.0/guide-rest-authentication.html

我认为这是一个很好的例子。还有 this tutorial 描述了访问令牌的身份验证以及它如何在 User class 中实现。它是关于 REST 的,但非 REST 应用程序的技术也应该相同,因为两者都使用 User class.