我们正在使用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
您的建议对我们非常有帮助。
答案 0 :(得分:1)
RFC 6750(承载令牌使用)定义了3种将访问令牌传递给受保护资源端点的方法。
在上述情况中,只有第一种方式是强制性的。您的授权服务器似乎不支持第三种方式。
下面是一个支持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,但我的猜测是框架不包含上述代码。