web-dev-qa-db-ja.com

Symfony2 APIの認証(モバイルアプリ用)

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

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

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

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

ありがとう

21
Marc

ステートレス(Cookieなし)で実行する必要があると思います。

私は同じ問題を抱えていました、私がしたこと:

  • app/config/security.ymlに、以下を追加します。
 security:
 ... 
ファイアウォール:
 rest_webservice:
パターン:/ webservice/rest /.*
ステートレス: true 
 http_basic:
プロバイダー:provider_name 
 ... 
  • これで、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());
    }
}
14
julesbou

これが、 カスタム認証プロバイダーの作成方法 すばらしい記事です。

APIを介してSymfony2アプリケーションに認証するには、次を使用する必要があります。 WS-Security

5
cystbear

はい、マーク、ジュールはhttp_basicで認証をテストする方法を示すためだけに例を示しています。

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

こちらをご覧ください http://wiki.zanox.com/en/RESTful_API_authentication

3
dlondero