使用Yii2作为REST API时如何验证oAuth2令牌

时间:2015-08-26 18:23:53

标签: rest oauth-2.0 yii2 adfs

我有一个单页应用程序充当CMS(客户端),由使用Yii2构建的API(资源服务器)提供服务。登录是通过Active Directory服务器(授权服务器)处理的,该服务器使用授权代码授权流程实现oAuth2。

当用户点击CMS时,CMS会处理用户登录并交换承载令牌的代码,然后将其传递给请求标头中的API。 API不处理任何登录或交换令牌代码,因此它需要做的就是验证令牌是否有效。

我试图用Yii2做这个,虽然我遇到了一些困惑,因为我可以说这个方法并不是Yii2如何设置来处理的。我们的资源服务器真的不知道用户(我们的数据库中没有用户表),因为要通过Active Directory处理所有用户。有没有办法让我处理编写自定义authclient的令牌验证(扩展yii \ authclient \ OAuth2)或者我是否需要提出一些完全自定义的方法来处理这个问题?

在\ app \ config \ web.php中我已将以下内容添加到配置的组件部分:

'authClientCollection' => [
    'class' => 'yii\authclient\Collection'
    'clients' => [
        'custom' => [
            'class' => 'app\auth\CustomOAuth',
            'clientId' => 'clientIDHere',
            'clientSecret' => 'clientSecretHere',
        ],
    ],
],

在我的基本控制器类中,我添加了以下行为:

public function behaviors() {

    $behaviors = parent::behaviors();
    $behaviors['authenticator'] = [
        'class' => HttpBearerAuth::className(),
    ];
    return $behaviors;
}

然后基本上我不知道在我的findIdentityByAccessToken类的IdentityInterface函数中放入什么(这是在HttpBearerAuth类尝试创建标识时调用的内容用户)BaseOAuth类会在执行任何操作之前检查它自己的OAuthToken内部版本,因​​此我无法调用AuthClient的baseAPI来检查令牌。

是否有一种首选的方法来处理这种情况,其中Yii2只需要检查令牌是否有效而不是实际交换令牌的代码?或者我只需要自己进行原始CURL调用API吗?

0 个答案:

没有答案