FOSOAuthServerBundle:将access_token嵌入Authorization标头中

时间:2013-09-12 15:06:24

标签: symfony oauth-2.0 fosoauthserverbundle

从我所看到的here,在查询字符串参数中保存敏感数据(如access_token)不是一个好主意。

即:我试图避免这种情况:

http://localhost.dev/web/app_dev.php/api/articles?access_token=NzJhNz.....

因此,我尝试使用Authorization标头中的access_token发出api请求(建议here。 尝试这样做时,我收到以下错误:

{
    "error": "access_denied",
    "error_description": "OAuth2 authentication required"
}

但是,请求与此完全相同,并且令牌似乎已正确设置:

GET /web/app_dev.php/api/articles HTTP/1.1
Host    localhost.dev
Authorization   access_token=N2FmNzhhNGM2MTI5N2JhMWJlYjEdZjA0ZWM3ZTRhMTM1OGM0ODJjMzQzYjM7NTk3ZTEzNTVjZDczZTljMDk2MQ
Accept-Encoding gzip, deflate
Accept  application/json
Accept-Language en;q=1, fr;q=0.9, de;q=0.8, ja;q=0.7, nl;q=0.6, it;q=0.5
Connection  keep-alive
User-Agent  Localhost/1.0 (iPhone; iOS 6.1.4; Scale/2.00)

是否有人知道FOSOAuthServerBundle是否可以这样做?

注意: 我在浏览器中验证过,令牌仍然有效(未过期)。

2 个答案:

答案 0 :(得分:5)

here提到的@alanbem授权标题应如下所示:

Authorization: Bearer N2FmNzhhNGM2MTI5N2JhMWJlYj...

注意: 如果您正在使用AFHTTPClient进行iOS开发,则只需覆盖(void)setAuthorizationHeaderWithToken:(NSString *)token方法。

- (void)setAuthorizationHeaderWithToken:(NSString *)token {
    [self setDefaultHeader:@"Authorization" value:[NSString stringWithFormat:@"Bearer %@", token]];
}

答案 1 :(得分:0)

如@Mick所述,您可以使用授权标题。

如果您在内部,在PHPUnit和任何其他使用Symfony请求的地方进行,您应该使用如下标题:

$headers = ['HTTP_AUTHORIZATION' => 'Bearer  2FmNzhhNGM2MTI5N2JhMWJlYj...'];

当您进行测试并且不想弄乱您的URI或请求参数时,这很重要。