【问题标题】:REST API for yii2, the authenticator (HttpBearerAuth) is not working on serveryii2 的 REST API,身份验证器(HttpBearerAuth)在服务器上不起作用
【发布时间】:2015-08-26 03:02:46
【问题描述】:

我刚刚创建了一个使用 REST API 的项目(使用 yii2 框架)。
REST API 的所有问题都在 localhost 上运行得非常好。但是将项目带到服务器上时(也使用相同的数据库),授权不可用。现在我正在使用“yii\filters\auth\HttpBearerAuth”

在“implements IdentityInterface”模型内部,有一个findIdentityByAccessToken的finding-token函数,非常简单,“validateAuthKey”函数总是返回true;见下文:

public static function findIdentityByAccessToken($token, $type = null){  
    return static::findOne(["token" => $token]);  
}

public function validateAuthKey($token)    
{ 
    return true;  
}  

查看任何图片: https://www.flickr.com/photos/40158620@N03/20701523349/in/dateposted-public/ 任何人都可以对这个问题有一些经验,你能告诉我如何解决它吗?谢谢你的好心。

  • 注意:
  • 该项目,我正在关注https://github.com/NguyenDuyPhong/yii2_advanced_api_phong(它在本地主机上工作正常;我还在我的服务器上部署了该项目,它提出了同样的问题)
  • 为确保服务器配置正确:我创建了 2 个操作,1 个已授权,另一个未授权。我检查了未经授权的操作,效果很好。 =======>
  • actionView 未授权 => 获取 API 信息。没问题
  • actionIndex 被 "yii\filters\auth\HttpBearerAuth" 授权 => FAIL

【问题讨论】:

  • 你的服务器使用 Nginx 还是 Apache?
  • 这是我的服务器配置:loyalty.gikapp.com/frontend/web/requirements.php + Web 服务器:Apache 2.4.16 (Unix) + OpenSSL 1.0.1e + PHP 5.5.27
  • Chịu rồi, trước từng gặp vấn đề với NginX còn apache thì chưa bao giờ :D
  • 谢谢,你能告诉我你在 NginX 上的解决方案吗?它可能对我有用。 @@
  • 您找到解决方案了吗?据我所知,我遇到了同样的问题。

标签: yii2 restful-authentication


【解决方案1】:

在我的情况下,问题是服务器删除了授权标头 我需要将此添加到 .htaccess

 SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

【讨论】:

  • 为了 SEO:如果您使用 Plesk,这是必需的,因为 Plesk 的默认设置是删除授权标头。
【解决方案2】:

HttpBearerAuth 使用$user->loginByAccessToken 授权see

"loginByCookie"使用的validateAuthKey(而且在这种情况下似乎没有使用)

尝试使用QueryParamAuth 进行测试(更容易测试)

【讨论】:

  • 您能详细解释一下您的意思吗?我不太确定我是否理解您希望我尝试什么。
  • 可能应该发表评论,而不是回答。但是,尽管如此,还是想了解两个想法: 1:在这种情况下不使用 validateAyutnkey。 2. 尝试使用 QueryParamAuth 并以这种方式授权 .../app-user-tokens?access_token=token。会不会出现401错误?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多