【问题标题】:curl command to check authentification in FOSRestBundle?curl 命令检查 FOSRestBundle 中的身份验证?
【发布时间】:2014-05-31 03:05:43
【问题描述】:

FOSRestBundle 在我的项目中运行良好,但没有经过身份验证。现在,我的目标是通过 auth 提出请求。

为此,我在 security.yml 中添加了这个防火墙

firewalls:
    # ...    
    rest_api:
        pattern: ^/api/
        stateless: true
        http_basic:
            provider: fos_userbundle
    # ...    
access_control:
    # ...    
    - { path: ^/api/, role: IS_AUTHENTICATED_FULLY }

为了检查这一点,我使用了这个 shell 命令:

curl -i http://localhost/tuto/web/app_dev.php/api/test/1

结果是:

HTTP/1.1 302 Found
Date: Fri, 11 Apr 2014 13:56:08 GMT
Server: Apache/2.2.22 (Ubuntu)
X-Powered-By: PHP/5.4.9-4ubuntu2.4
Set-Cookie: PHPSESSID=4dtr168vmj1eg523a07kbkjkh1; path=/
Cache-Control: no-cache
Location: http://localhost/tuto/web/app_dev.php/login
Vary: Accept-Language
X-Debug-Token: 220df7
Transfer-Encoding: chunked
Content-Type: application/json

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta http-equiv="refresh" content="1;url=http://localhost/tuto/web/app_dev.php/login" />

        <title>Redirecting to http://localhost/tuto/web/app_dev.php/login</title>
    </head>
    <body>
        Redirecting to <a href="http://localhost/tuto/web/app_dev.php/login">http://localhost/tuto/web/app_dev.php/login</a>.
    </body>
</html>

如您所见,返回的代码是 302 FOUND,因为它的 URL 被重定向到 http://localhost/tuto/web/app_dev.php/login,因为我正在使用 FOSUserBundle。

现在,我想检查身份验证是否运行良好。我试过这个:curl -i http://localhost/tuto/web/app_dev.php/api/test/1 --user user:password 但我仍然有 302 FOUND。

我也试过这个curl -i -H 'Accept:application/json' -H 'Authorization:Basic username:password' http://localhost/tuto/web/app_dev.php/api/test/1,但我仍然有 302 FOUND。

那么有什么建议 curl 命令来检查我的 REST api 中的身份验证吗?

谢谢,

注意:我已经尝试了许多链接中的解决方案,例如:basic authorization command for curl

【问题讨论】:

    标签: rest authentication curl basic-authentication fosuserbundle


    【解决方案1】:

    找到解决方案!

    你所要做的就是:

    1. 像这样更改防火墙:

    防火墙:

    # ...    
    rest_api:
        # pattern: ^/api/ # to be changed as in the next line
        pattern: /api/.*  # the correct way
        stateless: true
        http_basic:
            provider: fos_userbundle
        # ...    
    access_control:
        # ...    
        # - { path: ^/api/, role: IS_AUTHENTICATED_FULLY } # to be removed
    
    1. 对于 curl 命令,它必须是这样的:

    curl -i -H 'Accept:application/json' -H 'Authorization:Basic YW1pbmU6c3RpZ21hdGFn' http://localhost/tuto/web/app_dev.php/api/test/1

    其中 YW1pbmU6c3RpZ21hdGFn 是在 base64 中编码“用户:密码”的结果。

    希望它能帮助其他人。

    【讨论】:

    • 谢谢,base64 的提示帮助了我。由于某种原因,如果您使用“-u user:password”,cURL 不会生成 base64
    猜你喜欢
    • 1970-01-01
    • 2015-11-13
    • 2019-06-15
    • 1970-01-01
    • 2022-01-10
    • 2019-07-20
    • 2017-08-15
    • 1970-01-01
    • 2013-03-11
    相关资源
    最近更新 更多