21

Symfony2 アプリケーション用の REST API を開発しました。この API はモバイル アプリで使用されます。機能の多くは、現在認証されているユーザーのコンテキストで実行されます。つまり、次のようになります。

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

モバイル アプリが、従来の Web フォームと同じようにログイン アクションに投稿できるようになることを願っています。認証情報がチェックアウトされると、Symfony2 はそれを実行して Cookie を設定します (これは、API にアクセスするモバイル アプリのコンテキストでも機能しますか?)。その後、その携帯電話からの api リクエストは (うまくいけば) symfony2 のネイティブな security.context サービス コンテナーで動作します。

これは機能しますか?API をモバイル開発者に渡す前に、この認証プロセスを理解する必要があります。可能であれば、xAuth などを使用する API 用の新しい認証システムを構築する代わりに、ネイティブの security.context サービスを使用できるようにしたいと考えています。

ありがとう

4

3 に答える 3

14

ステートレス(Cookieなし)で行うべきだと思います。

私は同じ問題を抱えていました。

  • app/config/security.yml に以下を追加します。
安全:
    ...
    ファイアウォール:
        残りのウェブサービス:
            パターン: /webservice/rest/.*
            ステートレス: 真
            http_basic:
                プロバイダー: プロバイダー名
    ...
  • これで、Web サービスにリクエストを送信できます。
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());
    }
}
于 2011-07-21T13:23:17.640 に答える
5

ここに、カスタム認証プロバイダーの素晴らしい記事を作成する方法があります。

API を介して Symfony2 アプリケーションへの認証を行うには、以下を使用する必要があります: WS-Security

于 2011-08-11T23:07:24.157 に答える
3

はい、Marc、jules は、http_basic で認証をテストする方法を示すためだけに例を示しています。

RESTful にするには、Cookie の使用を避ける必要があります。それ以外の場合は、API と呼んでください。認証システムの安全性については、https 経由で http_digest を使用するか、api_key/api_secret アプローチを使用してより安全な署名付きリクエストを使用できます。

ここを見てください http://wiki.zanox.com/en/RESTful_API_authentication

于 2011-07-24T10:09:04.793 に答える