2013-07-25 13 views
5

私は作成しているAPIにOAuth2を使用しようとしていますが、フローがどのように機能するかについての説明を使用できます。私は同様の質問(例:Securing my REST API with OAuth while still allowing authentication via third party OAuth providers (using DotNetOpenAuth))を見つけましたが、第三者によるログインに関しては明確にしていません。カスタムAPIのOAuth2

特に、委任による認証がうまくいく場合は、OpenIDを使用することはありません(とにかく、とにかく)。それはあまりにも複雑で、よくサポートされているライブラリはあまりありません。 - エンドユーザー

  • クライアント - ブラウザ(私のウェブサイト)、モバイル

    • リソース所有者:問題は4(ISH)エンティティに分離され

      を(私はPHP + Laravel 4を使用しています)アプリケーションなど

    • 認証サーバー - 私のOAuth2サーバー
    • リソースサーバー - My API。ユーザーデータを処理します。

      1. ユーザは、クライアント上のユーザー名/パスワードを記入:

    は、私は、ユーザーが自分の認証サーバーとのログインにアカウントの用途でアカウントを作成する場合の流れを考え出したと思います。

  • クライアントは、リソース所有者フローを使用して認証サーバーに接続し、ユーザーを認証し、クライアントを自動的に認証します。
  • ユーザーは、User IDを含むToken + signed JWTを使用して、AUth Serverからクライアントにリダイレクトされます。
  • クライアントはトークンをセッションに保存します。
  • クライアントはトークン+署名付きJWTユーザーIDを使用して、リソースサーバーからデータを要求します。
  • リソースサーバーはJWTを検証し、トークンのスコープに応じてデータを返します。
  • 私はまだワークフローをテストしていませんが、これはうまくいくようです。しかし、サードパーティのログインはより困難であることが証明されています。これは私が今までに持っているものです:

    1. ユーザークリックはGoogle/Facebook/LinkedInでログインします。
    2. ユーザーは、クライアントからGoogleの認証サーバーにリダイレクトされます(私のものではありません)。
    3. ユーザーはuser/passを使用してログインし、クライアントは保護されたリソース(userinfo.email)をフェッチする権限を与えます - これは委任によってユーザーを認証します。
    4. ユーザーは、GoogleユーザーIDを含むトークン+署名付きJWTを使用して、クライアントにリダイレクトされます。
    5. クライアントはJWTを検証します。
    6. クライアントは、クライアント証明書フローを使用してリソースサーバーに接続します。新しいトークンを受け取ります。
    7. クライアントはトークンをセッションに保存します。
    8. GoogleのユーザーIDをアプリケーションのユーザーIDに変換するクライアントのリクエスト。 (この接続はサインアップ中に行われました)
    9. リソースサーバーはアプリケーションユーザーIDを返します。 (署名付きJWT)
    10. クライアントはトークン+署名付きJWTユーザーIDを使用して、リソースサーバーからデータを要求します。
    11. リソースサーバーはJWTを検証し、トークンのスコープに応じてデータを返します。

    これはうまくいくかもしれませんが、非常に複雑です。確かに、それらのステップのいくつかをスキップする方法が必要ですか?私は特にステップ8-10に興味があります。私が知る限り、ユーザーはサードパーティのログインを使って認証サーバーとやりとりする必要はありません。問題は、Google/Facebook/LinkedInから成功したid_token(または何か)を自分のAPIの「アカウント」リソースにどのようにしっかり接続するかです。

    今のところ、私はAPIに接続する他のクライアントは心配していませんが、将来はいつか起こるものです。

    +0

    を私はこれらのAPIのいずれかがユーザーの電子メールを提供しないと思います。したがって、複数のソーシャルアカウントのログインをグループ化するための一意のIDを持つことはできません。あなたができることは、APIから認証された後で詳細を入力するようにユーザーに依頼することです。 APIの側では、OAuth2 APIフレームワークを使用することをおすすめします。彼らはあなたが他のことを心配するより多くの時間を残すことになるすべての内部を構築している。 :) – astroanu

    答えて

    0

    「私の知る限り、ユーザーはサードパーティのログインを使って認証サーバーとやりとりする必要はありません。」 これは部分的にしか当てはまりません。理論的には、サードパーティログインのトークンを自分のものとして使うことができます。だから、通常のリソース要求は次のようになります。

    1. クライアントがリソースを要求する - (サードパーティから)トークンとログインの種類(ログインfacebook /グーグル/など)
    2. Serverは、サードパーティとのトークンをチェックして要求を検証送信しますAuthorization Serverを呼び出し、データを返します。

    APIサーバーは、リクエストが行われるたびに(サードパーティのサーバーからのデータが必要かどうかに関わらず)サードパーティのサーバーと通信する必要があるという欠点があります。代わりに独自のトークンを生成すると、より多くの制御ができ、要求を検証するのが簡単になります。

    私はあなたのワークフローに固執します。私は一度似たようなことをしていて、私の踏みとどころはほぼ同じでした。また、ステップ2-4では、Google、Facebook、coが既に良い仕事をしているので、基本的に何もしなくてはならないということを考慮する必要があります。

    0

    あなたの質問への貢献が遅れました。このリソースはのOAuth2の使用説明が見つかり

    OAuth2 in 8 Steps

    関連する問題