FOSOAuthServerBundle + FOSRestBundle + CamelCase =未进行身份验证

时间:2017-06-09 20:43:08

标签: rest fosrestbundle symfony-2.8 camelcasing fosoauthserverbundle

我一直在使用Symfony 2.8中的服务器,构建一个以camelCase样式返回json对象的rest api,现在的问题是,当我集成OauthServer包时,它会引发此错误Invalid grant_type parameter or parameter missing",我理解发生这种情况是因为我在array_normalizer: fos_rest.normalizer.camel_keys配置中使用fos_rest正文监听器。这是我在configuration.yml中的代码:

fos_rest:
    #other listeners#
    body_listener:
        array_normalizer: fos_rest.normalizer.camel_keys
    zone: 
         - { path: ^/api }

这是我在security.yml中的Oauth配置:

firewalls:
    oauth_token:
        pattern: ^/oauth/v2/token
        security: false
    api:
        pattern: ^/api                             
        fos_oauth: true                            
        stateless: true                            
        anonymous: false   

我发现我不是第一个发生这种情况的人,并且添加了zone属性来缓解这种情况,但就我而言,它仅适用于^/api下的所有内容,因为当我更改模式时,它会按预期使用侦听器停止,但是当我调用^/oauth/v2/token路径时,它似乎忽略了zone给定的路径。

要检索我的令牌,我正在使用下一个POST请求:

{
    grant_type= "password" 
    client_id= "clientId"
    client_secret= "clientSecret"
    username= "user"
    password= "password"
}

我想澄清一下,如果我停用了监听器,我成功获得了令牌,但我的应用程序的其余部分停止工作,因为它在任何地方使用camelCase,我知道一旦替代将在客户端序列化我的数据,但是现在很复杂。

我做错了什么?我无法弄清楚我错过了什么。

1 个答案:

答案 0 :(得分:1)

作为解决方法,您可以使用POSTGET来代替{/ p>

http://example.com/oauth/v2/token?client_id=[CLIENT_ID]&client_secret=[SECRET]&grant_type=password&username=[USERNAME]&password=[PASSWORD]

然后你不必担心身体序列化。