Symfony2 api 的身份验证(用于移动应用程序使用)

发布于 2024-11-25 06:04:04 字数 496 浏览 2 评论 0原文

我为我的 Symfony2 应用程序开发了一个 REST api。该 API 将由移动应用程序使用。大部分功能都是在当前经过身份验证的用户的上下文中完成的,即:

$this->container->get('security.context')->getToken()->getUser()

我希望移动应用程序能够像传统的 Web 表单一样发布到登录操作。如果凭证检查出来,那么 Symfony2 就会执行它的操作并设置一个 cookie(这甚至可以在访问 api 的移动应用程序的上下文中工作吗?)。然后,来自该手机的 api 请求(希望)将与本机 symfony2 security.context 服务容器一起使用。

这行得通吗?在将 API 提供给移动开发人员之前,我需要弄清楚这个授权流程。如果可能的话,我显然希望能够使用本机 security.context 服务,而不是为使用 xAuth 或类似内容的 api 构建新的身份验证系统。

谢谢

I've developed a REST api for my Symfony2 application. This api will be used by a mobile app. Much of the functionality is done in the context of the currently authenticated user, ie:

$this->container->get('security.context')->getToken()->getUser()

I'm hoping that the mobile app will be able to post to the login action just like a traditional web form. If the credentials check out then Symfony2 does it's thing and sets a cookie (does this even work in the context of a mobile app accessing an api?). Then later api requests from that mobile phone will (hopefully) work with the native symfony2 security.context service container.

Would this work? I need to figure out this authorization process before I take the API to the mobile developers. If possible I'd obviously like to be able to use the native security.context service instead of building out a new auth system for the api that uses xAuth or something similar.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

若沐 2024-12-02 06:04:05

是的,Marc,jules 指出的一个示例只是为了向您展示如何使用 http_basic 测试身份验证。

要实现 RESTful,您应该避免使用 cookie,否则就将其称为 API。关于您的身份验证系统的安全性,您可以使用 https 上的 http_digest 或更安全的签名请求,使用 api_key/api_secret 方法。

看看这里 http://wiki.zanox.com/en/RESTful_API_authentication

Yes Marc, jules is pointing to an example just to show you how to test authentication with http_basic.

To be RESTful you should avoid using cookies, otherwise just call it an API. About how secure is your authentication system you can go with http_digest over https or more secure signed request with api_key/api_secret approach.

Have a look here http://wiki.zanox.com/en/RESTful_API_authentication

呆° 2024-12-02 06:04:04

我认为你应该做到无状态(没有cookie)。

我遇到了同样的问题,我做了什么:

  • 在你的 app/config/security.yml 中,添加:
security:
    ...
    firewalls:
        rest_webservice:
            pattern: /webservice/rest/.*
            stateless: true
            http_basic:
                provider: provider_name
    ...
  • 现在你可以向你的网络服务发出请求:
class AuthTest extends WebTestCase 
{
    public function testAuthenticatedWithWebservice() 
    {
        $client = $this->createClient();

        // not authenticated
        $client->request('GET', '/webservice/rest/url');
        $this->assertEquals(401, $client->getResponse()->getStatusCode());

        // authenticated
        $client->request('GET', '/webservice/rest/url', array(), array(), array(
            'PHP_AUTH_USER' => 'username', 
            'PHP_AUTH_PW' => 'password'
        ));
        $this->assertEquals(200, $client->getResponse()->getStatusCode());
    }
}

I think you should do it stateless (without cookie).

I had the same problem, what i did:

  • in your app/config/security.yml, add:
security:
    ...
    firewalls:
        rest_webservice:
            pattern: /webservice/rest/.*
            stateless: true
            http_basic:
                provider: provider_name
    ...
  • Now you can make a request to your webservice:
class AuthTest extends WebTestCase 
{
    public function testAuthenticatedWithWebservice() 
    {
        $client = $this->createClient();

        // not authenticated
        $client->request('GET', '/webservice/rest/url');
        $this->assertEquals(401, $client->getResponse()->getStatusCode());

        // authenticated
        $client->request('GET', '/webservice/rest/url', array(), array(), array(
            'PHP_AUTH_USER' => 'username', 
            'PHP_AUTH_PW' => 'password'
        ));
        $this->assertEquals(200, $client->getResponse()->getStatusCode());
    }
}
情归归情 2024-12-02 06:04:04

这里是如何创建自定义身份验证提供程序很棒的文章。

要通过 api 对 Symfony2 应用程序进行身份验证,您需要使用:
WS 安全

Here you are, How to create a custom Authentication Provider awesome article.

To Authentication to a Symfony2 application through api, you need use:
WS-Security

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文