我有一个单页应用程序充当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吗?