【问题标题】:Yii2 basic REST API authentication errorYii2 基本 REST API 认证错误
【发布时间】:2016-09-01 09:48:45
【问题描述】:

由于某种原因,我的 Yii2 REST API 身份验证不再起作用。

我编写了一个函数来从我的 API 中获取响应:

function getJSON($template_url) {
    $authorization = "Authorization: Bearer " . get_option("auth_key");

    // Create curl resource
    $ch = curl_init();
    // Set URL
    curl_setopt($ch, CURLOPT_URL, $template_url);
    // Return transfer as a string
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    // Set headers
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', $authorization));
    // $output contains output as a string
    $output = curl_exec($ch);
    // Close curl resource
    curl_close($ch);

    return json_decode($output, true);
}

这给了我以下回应:

Array ( [name] => Unauthorized [message] => 您正在使用无效凭据请求。[code] => 0 [status] => 401 [type] => yii\web\UnauthorizedHttpException )

我的控制器中有这个:

public function behaviors(){
    return [
        'contentNegotiator' => [
            'class' => ContentNegotiator::className(),
            'formats' => [
                'application/json' => Response::FORMAT_JSON,
            ],
        ],

        'authenticator' => [
            'class' => CompositeAuth::className(),
            'except' => ['activate'],
            'authMethods' => [
                HttpBearerAuth::className(),
            ],
        ]

    ];
}

这是 User 类中的 findIdentityByAccessToken:

public static function findIdentityByAccessToken($token, $type = null) {
    $query = (new Query())
        ->select([
          'kl.access_token                                            access_token',
        ])
        ->from('klanten kl')
        ->where(['kl.access_token' => $token])
        ->one();
    return $query;
}

数据库表有一个 access_token 列。我检查了我在 getJSON 函数中使用的访问令牌是否在数据库中可用,并且它是可用的。所以我不知道我做错了什么。

【问题讨论】:

    标签: php rest api authentication yii2


    【解决方案1】:

    这也可能是不同 Apache 系统上的请求标头的问题。有时授权标头会丢失。将以下代码添加到您的 htaccess:

     SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
    

    Missing Authorization Header discussion on GitHub

    【讨论】:

    • 我在我的 WordPress 插件中使用了这段代码,所以我无法更改 htaccess。还是 Authorizaiton 标头在 API 上丢失了?
    • 我只是假设这可能是一个问题,正如你告诉For some reason my Yii2 REST API authentication doesnn't work anymore. 的那样——这对我来说意味着它已经在工作了,你可能已经将它移到另一个运行快速/cgi 模式的服务器上,这会丢失身份验证标头。
    • 之前确实有效。我认为唯一改变的是数据库连接。但是数据库完全一样,所以我不知道这是不是问题。
    猜你喜欢
    • 1970-01-01
    • 2015-10-18
    • 2016-06-13
    • 1970-01-01
    • 2016-07-17
    • 2017-11-27
    • 1970-01-01
    • 2017-08-03
    • 2013-05-10
    相关资源
    最近更新 更多