我整天都在Google周围转转,但仍然不知道如何通过使用令牌来实现RESTFul httpBasicAuth。
首先,我想问一下我可以在没有Https的情况下使用RESTFul HttpBasicAuth吗?
然后,下面是我的代码,尝试做Yii2 RESTFul HttpBasicAuth身份验证,希望有人可以花一些时间查看我的代码并指导我我的代码有什么问题。
首先,这是我关于User Application组件的yii2配置设置:
'user' => ['identityClass' => 'common\models\Users',
'enableAutoLogin' => false
],
然后下面是我的common \ models \ Users IdentityClass的代码段
命名空间common \ models;
use Yii;
use yii\base\NotSupportedException;
use yii\web\IdentityInterface;
use app\models\Ostoken;
class Users extends \yii\db\ActiveRecord implements IdentityInterface
{
public static function findIdentityByAccessToken($token, $type = null) {
/* Compulsory for RESTFul*/
// die("trying...");
// throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.');
file_put_contents("/var/www/html/y2api/logs/RESTFul_login_".date("Y-m-d"), date("H:i:s").":".$token."\r\n", FILE_APPEND);
$apiUser = Ostoken::find()
->where(['token' => $token])
->one();
return static::findOne(['username' => $apiUser->username]);
}
}
然后我尝试通过http://192.168.33.10/api/Banktransactions?access-token=xxxxxxxx
调用宁静的URL
然后我得到json格式的以下错误:
{
"name": "Unauthorized",
"message": "Your request was made with invalid credentials.",
"code": 0,
"status": 401,
"type": "yii\\web\\UnauthorizedHttpException"
}
如您所见,我在findIdentityByAccessToken
中放入了一个file_put_contents,但是它从未执行。
答案 0 :(得分:1)
第一个问题:
首先,我想问一下我可以在没有Https的情况下使用RESTFul HttpBasicAuth吗?
答案:可以,但是:
由于访问令牌可用于唯一标识和验证用户,因此应始终通过HTTPS发送API请求,以防止中间人(MitM)攻击。 (https://www.yiiframework.com/doc/guide/2.0/en/rest-authentication#authentication)
第二个...问题?
我100%确信这是因为CORS。 看看这个:
https://www.yiiframework.com/doc/api/2.0/yii-filters-cors
是否曾经尝试通过本地主机访问URL?如果是这样并且有效,那么您需要设置一个CORS过滤器以能够向您的服务器发出请求。