2011-07-19 13 views
20

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

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

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

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

ありがとうございます。

答えて

13

私はあなたにステートレス(クッキーなし)を行うべきだと思います。

私は私が何をしたか、同じ問題を抱えていた:あなたのアプリ/設定/ security.ymlファイルで

  • 、追加:
 
security: 
    ... 
    firewalls: 
     rest_webservice: 
      pattern: /webservice/rest/.* 
      stateless: true 
      http_basic: 
       provider: 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()); 
    } 
} 
+0

うーん。私はここにすべてを追いかけているとは思えません。あなたは完全な事例を歩き回ることができますか?つまり、ユーザーfooはユーザー名/パスワードをモバイルアプリに提供します。このアプリには、APIへのリクエストごとにそのユーザー名とパスワードが含まれていますか?平文で?それは安全ですか?申し訳ありませんが私はここに何かを誤解している! – Marc

+0

dondleroはクッキーを無効にしなければならないと言いました。そのため、ステートレスパラメータをtrueに追加しています。 Personnaly私は実装が非常に難しいので、私はダイジェスト認証が好きではありません。基本的なHTTPメソッドは簡単で、うまく動作します。ユーザー名とパスワードはすべてのリクエストで表示されます。 SSL証明書を使用する必要があります。 – julesbou

+0

奇妙なことに、私はまだ 'stateless:true'を設定した後でも' Set-Cookie'ヘッダを受け取っています。なぜそれが起こるかもしれないのか? –

3

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

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

はこここちらをご覧http://wiki.zanox.com/en/RESTful_API_authentication

関連する問題