75

次のアーキテクチャが必要です (この例の製品名を作成しました)。

1 つのサーバーで実行される Web API 2 アプリケーション http://api.prettypictures.com

別のサーバーで実行されている MVC 5 クライアント アプリ http://www.webpics.com

www.webpics.comクライアント アプリで次の目的で Pretty Pictures API を使用したいと考えています。

  • ユーザー名とパスワードで新しいアカウントを登録する
  • Facebook/Google/Twitter/Microsoft に新しいアカウントを登録する
  • ログイン
  • 写真を取得する

Facebook、Googleなどに外部アカウントを登録することを除いて、上記のすべてが機能します。

API の別のクライアント ユーザーから外部アカウントを作成する正しいフローがわかりません。

次のように、認証フローで利用可能なほとんどのドキュメントを調査しました。 ここに画像の説明を入力

OWIN の新しい ID モデルについて、できることはほとんどすべて読みました。

私は Visual Studio 2013 で SPA テンプレートを調べました。これは、クライアントと API が同じホスト上にある場合にのみ、必要なことのほとんどを実行する方法を示しています。複数のクライアントが自分の API にアクセスし、ユーザーが Google などを介してサインアップできるようにしたい場合、それは機能せず、OWIN 認証フローが壊れていることがわかります。

ここまでの流れは次のとおりです。

  • ユーザーがwww.webpics.com/Loginにアクセスします
  • www.webpics.comはapi.prettypictures.com/Account/ExternalLoginsを呼び出し( www.webpics.comのコールバックに戻るようにreturnUrlを設定)、結果のリンクをユーザーに表示します。
  • ユーザーが「Google」をクリック
  • ブラウザーは、プロバイダーの名前などでapi.prettypictures.com/Account/ExternalLoginにリダイレクトします。
  • API のExternalLoginアクションは、 google.comへのチャレンジをインスタンス化します
  • ブラウザはgoogle.comにリダイレクトされます
  • ユーザーはユーザー名とパスワードを入力します (まだgoogle.comにログインしていない場合) 。
  • google.comは現在、セキュリティ クリアランスを提示しています。「api.prettypictures.com」は、あなたのメール アドレス、名前、妻、子供などへのアクセスを求めています。これでよろしいですか?
  • ユーザーが「はい」をクリックすると、Google が設定した Cookie を使用してapi.prettypictures.com/Account/ExternalLoginに戻ります。

これは私が立ち往生したところです。次に起こることは、ユーザーがgoogle.comで正常に認証されたことをクライアント アプリに何らかの方法で通知し、後でアクセス トークンと交換するための 1 回限りのアクセス コードを与えることです。クライアント アプリには、必要に応じて、 google.comログインに関連付けるユーザー名をユーザーに求める機会が必要です。

これを容易にする方法がわかりません。

実際、この時点でブラウザは、Google からのコールバックの後、 api.prettypictures.com/Account/ExternalLoginエンドポイントに留まっています。API は Google にサインインしていますが、クライアントはその処理方法を知りません。その Cookie をwww.webpics.comに送り返す必要がありますか?

SPA アプリでは、AJAX を介して行われ、google.comはトークンを URL フラグメントとして返します。すべてが 1 つのドメインにあるため、すべてうまく機能します。しかし、それは、複数のクライアントが完全に使用できる「API」を持つという点の多くに反しています。

ヘルプ!

4

1 に答える 1