获得回复“未经授权”#39;通过URI查询参数

时间:2015-11-18 18:55:04

标签: api rest oauth-2.0 yii2

我们正在使用YII框架创建REST API并实现了oAuth 2。

我们正面临一个奇怪的问题,而我们正试图通过"授权请求标题字段"来访问资源并发送访问令牌。我们正在获得预期的产量。 例如 curl -i -H"接受:application / json" -H"授权:Bearer XXXXXX"

而我们正在尝试通过" URI查询参数"发送访问令牌。我们得到的反应是"未经授权"。

e.g。

https://server.example.com/resource?access_token=XXXXXX&p=q

您的建议对我们非常有帮助。

1 个答案:

答案 0 :(得分:1)

RFC 6750(承载令牌使用)定义了3种将访问令牌传递给受保护资源端点的方法。

  1. 通过授权标题。 (2.1. Authorization Request Header Field
  2. 通过表单参数access_token。 (2.2. Form-Encoded Body Parameter
  3. 通过查询参数access_token。 (2.3. URI Query Parameter
  4. 在上述情况中,只有第一种方式是强制性的。您的授权服务器似乎不支持第三种方式。

    添加评论

    下面是一个支持PHP中所有3种方式的示例。有关详细信息以及Ruby和Java中的其他示例,请参阅“3. Extract Access Token”中的“Protected Resource”。

    /**
     * Function to extract an access token from a request.
     */
    function extract_access_token()
    {
        // The value of Authorization header.
        $header = $_SERVER['HTTP_AUTHORIZATION'];
    
        // If the value is in the format of 'Bearer access-token'.
        if ($header != null && preg_match('/^Bearer[ ]+(.+)/i', $header, $captured))
        {
            // Return the value extracted from Authorization header.
            return $captured;
        }
    
        if ($_SERVER['REQUEST_METHOD'] == 'GET')
        {
            // Return the value of 'access_token' query parameter.
            return $_GET['access_token'];
        }
        else
        {
            // Return the value of 'access_token' form parameter.
            return $_POST['access_token'];
        }
    }
    

    我不知道Yii,但我的猜测是框架不包含上述代码。