私は作成している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。ユーザーデータを処理します。
- ユーザは、クライアント上のユーザー名/パスワードを記入:
は、私は、ユーザーが自分の認証サーバーとのログインにアカウントの用途でアカウントを作成する場合の流れを考え出したと思います。
私はまだワークフローをテストしていませんが、これはうまくいくようです。しかし、サードパーティのログインはより困難であることが証明されています。これは私が今までに持っているものです:
- ユーザークリックはGoogle/Facebook/LinkedInでログインします。
- ユーザーは、クライアントからGoogleの認証サーバーにリダイレクトされます(私のものではありません)。
- ユーザーはuser/passを使用してログインし、クライアントは保護されたリソース(userinfo.email)をフェッチする権限を与えます - これは委任によってユーザーを認証します。
- ユーザーは、GoogleユーザーIDを含むトークン+署名付きJWTを使用して、クライアントにリダイレクトされます。
- クライアントはJWTを検証します。
- クライアントは、クライアント証明書フローを使用してリソースサーバーに接続します。新しいトークンを受け取ります。
- クライアントはトークンをセッションに保存します。
- GoogleのユーザーIDをアプリケーションのユーザーIDに変換するクライアントのリクエスト。 (この接続はサインアップ中に行われました)
- リソースサーバーはアプリケーションユーザーIDを返します。 (署名付きJWT)
- クライアントはトークン+署名付きJWTユーザーIDを使用して、リソースサーバーからデータを要求します。
- リソースサーバーはJWTを検証し、トークンのスコープに応じてデータを返します。
これはうまくいくかもしれませんが、非常に複雑です。確かに、それらのステップのいくつかをスキップする方法が必要ですか?私は特にステップ8-10に興味があります。私が知る限り、ユーザーはサードパーティのログインを使って認証サーバーとやりとりする必要はありません。問題は、Google/Facebook/LinkedInから成功したid_token(または何か)を自分のAPIの「アカウント」リソースにどのようにしっかり接続するかです。
今のところ、私はAPIに接続する他のクライアントは心配していませんが、将来はいつか起こるものです。
を私はこれらのAPIのいずれかがユーザーの電子メールを提供しないと思います。したがって、複数のソーシャルアカウントのログインをグループ化するための一意のIDを持つことはできません。あなたができることは、APIから認証された後で詳細を入力するようにユーザーに依頼することです。 APIの側では、OAuth2 APIフレームワークを使用することをおすすめします。彼らはあなたが他のことを心配するより多くの時間を残すことになるすべての内部を構築している。 :) – astroanu