したがって、これは「間違っています」の下に提出する必要があるかもしれませんが、デフォルトの VS2013 MVC5/WebApi プロジェクト テンプレートによって返された OAuth access_token を取得して、WebApi 要求を正常に認証することはできません。興味深いことに、VS2013 SPA プロジェクト テンプレートは正常に機能しているようです。
これは、次の手順で再現できるはずです。
- VS2013 では、[ファイル] -> [新しいプロジェクト] -> [Web] -> [単一ページ アプリケーション] を実行します。
Startup.Auth.cs で、次の行のコメントを外します。
app.UseGoogleAuthentication();
新しい WebApi コントローラーと GET アクションを作成してデータを返し、コントローラーに [Authorize] 属性を追加します。
Fiddler を起動し、F5 キーを押してアプリケーションをデバッグし、次の場所を参照します。
http://localhost:<your_port>/api/account/ExternalLogins?returnUrl=%2F&generateState=true
- 手順 4 で返された json ファイルを開き、URL 値全体 (先頭の "/" を除く) をコピーしてアドレス バーのアドレスの末尾に貼り付け、Enter キーを押します。認証のために Google に移動する必要があります。
- 認証が完了すると、SPA アプリにリダイレクトされます。「外部ログインに失敗しました」は無視してください。エラーメッセージ。
- Google で認証した後、アプリへの最初のリクエストの Fiddler トレースを確認します。そのリクエストを強調表示し、[Inspectors] タブをクリックして、レスポンスのヘッダーを表示します。
- Transport セクションの下の Location ヘッダーをコピーしてメモ帳に貼り付け、access_token フラグメントの値のみをコピーします。
- Fiddler で [Composer] タブをクリックし、既定の URL を変更して、上記の手順 3 で作成したコントローラー アクションの URL にします。
Request Headers 領域で、User-Agent ヘッダーの下に以下を追加します。
Authorization: Bearer [access_token]
[access_token] は、上記の手順 8 からコピーした値です。
リクエストを実行すると、Fiddler トレースに HTTP 200 が表示されます。[Inspectors] タブで Raw レスポンスを表示すると、WebApi メソッドから返された値が表示されます。
上記の手順 1 ~ 11 に従って、認証の種類として個別のユーザー アカウントを使用する MVC/WebApi を選択することのみを変更すると、手順 11 で HTTP 200 ではなく HTTP 401 が返され、適切な戻りデータが返されます。
そうは言っても、私のやり方は間違っていますか?私が知る限り、2 つのプロジェクト テンプレートは、OAuth/セキュリティの設定に関してはほぼ同じです (web.config にいくつかの小さな違いがありますが、それらを変更しても違いはないようです)。
あなたが提供できる助けを前もって感謝します-私は過去数晩、机に頭をぶつけていました...
ライアン