28

現在取り組んでいるプロジェクト用に RESTful API を構築しています。次の理由により、メイン アプリケーションで API を使用できるようにしたいと考えています。

  1. 維持するコードのセットが1つになる
  2. サードパーティの開発者向けに API を公開することを決定した場合、それは既に完了しています。
  3. それを消費するモバイルアプリケーションを作成する可能性を開きます
  4. 私は本当にそれを行う方法を学びたいです

API はサブドメインでホストされhttps://api.example.com、メインの Web アプリケーションはルート ドメインでホストされますhttps://example.com

概念的にはすべてがどのように機能するかを理解していますが、私の主な質問は、認証フローがどのように変化するかということです。通常、サードパーティのアプリは次のようになります。

  1. からリクエスト トークンを取得します。https://api.example.com/request_token
  2. ユーザーをリダイレクトして認証するhttps://api.authenticate.com/authorize
  3. サードパーティのアプリケーションにリダイレクトされる
  4. からアクセス トークンを取得します。https://api.example.com/access_token

私は両方のドメインを管理しているので、次のようなことはできますか?

  1. ユーザーがログイン画面に到達したときにリクエスト トークンを取得します。https://www.example.com
  2. https://www.example.comユーザーは、同じコードを呼び出すフォームを使用して認証しますhttps://api.example.com/authorize
  3. 認証情報が有効な場合、リクエスト トークンはアクセス トークンと交換されます。
  4. アクセストークンはセッションに保存され、通常のようにユーザーがログアウトすると期限切れになります

手順 3 はコードが重複するため間違っているように感じますが、技術的に異なるドメインであるためhttps://www.example.com、データの送信先のログイン フォームである XSS 攻撃にさらされることはありませんか?https://api.example.com

私はこれを過度に複雑にしていますか?

4

2 に答える 2

20

私は同じ問題に遭遇し、このように解決しました。

1 サードパーティのアプリの場合、私のAPIを使用して、すべてのリクエストでOAuthを介して認証する必要があります。

2 私自身のサードパーティクライアント(モバイル、AIRなど)の場合-OAuthを使用しますが、認証ステップでユーザー名とパスワードを直接送信できるという違いがあります(ネイティブログインダイアログを作成できます)。これは、APIがSSL/HTTPSを介している場合に提供されます。

3 Webアプリケーションでは、Cookie認証を使用してAPIにアクセスします。つまり、ログインした後、ユーザーはAPI:urlsを呼び出すだけで、JSON/XMLを取り戻すことができます。APIをすばやく探索するのにも最適です(ただし、APIGeeのような実際のAPIコンソールの方が優れています)。

于 2011-12-16T17:49:07.787 に答える
0

あなたはそれを少し複雑にしすぎていると思います。コードが適切に分離されていれば、アプリケーションのサービス レイヤー上に薄い REST レイヤーを簡単に構築でき、アプリケーションのコントローラーもサービス レイヤー上の薄いレイヤーになります。

于 2011-12-16T12:42:57.363 に答える