この投稿によると http://www.asp.net/web-api/overview/security/external-authentication-services ...でログインできますlocal認証サービス(新しいASP.NET IDフレームワークを使用)
しかし、Visual Studio 2013 SPAテンプレートで生成されたデフォルトのWeb APIを(モバイルアプリまたは Postman から)適切に呼び出すためのウォークスルーが見つかりません。
誰も私を助けることができますか?
今日も同じ問題があり、次の解決策が見つかりました。
最初に利用可能なすべてのプロバイダーを取得します
GET /api/Account/ExternalLogins?returnUrl=%2F&generateState=true
応答メッセージはJSON形式のリストです
[{"name":"Facebook",
"url":"/api/Account/ExternalLogin?provider=Facebook&response_type=token&client_id=self&redirect_uri=http%3A%2F%2Flocalhost%3A15359%2F&state=QotufgXRptkAfJvcthIOWBnGZydgVkZWsx8YrQepeDk1",
"state":"QotufgXRptkAfJvcthIOWBnGZydgVkZWsx8YrQepeDk1"}]
GETリクエストを、使用するプロバイダーのURLに送信します。外部プロバイダーのログインページにリダイレクトされます。資格情報を入力すると、サイトにリダイレクトされます。次に、URLからaccess_token
を解析します。
http://localhost:15359/#access_token=[..]&token_type=bearer&expires_in=[..]&state=QotufgXRptkAfJvcthIOWBnGZydgVkZWsx8YrQepeDk1
ユーザーが既にローカルアカウントを持っている場合は、.AspNet.Cookies
Cookieが設定されて完了です。そうでない場合は、.AspNet.ExternalCookie
Cookieのみが設定され、ローカルアカウントを登録する必要があります。
ユーザーが登録されているかどうかを確認するためのAPIがあります。
GET /api/Account/UserInfo
応答は
{"userName":"xxx","hasRegistered":false,"loginProvider":"Facebook"}
ユーザーのローカルアカウントを作成するには、呼び出します
POST /api/Account/RegisterExternal
Authorization: Bearer VPcd1RQ4X... (access_token from url)
Content-Type: application/json
{"UserName":"myusername"}
これで、以前と同じプロバイダーURLで同じリクエストを送信します
GET /api/Account/ExternalLogin?provider=Facebook&response_type=token&client_id=self&redirect_uri=http%3A%2F%2Flocalhost%3A15359%2F&state=QotufgXRptkAfJvcthIOWBnGZydgVkZWsx8YrQepeDk1
しかし、今回はユーザーはすでにアカウントを持ち、認証されます。これを確認するには、/api/Account/UserInfo
を再度呼び出します。
次に、URLからaccess_token
を抽出します。作成するすべてのリクエストにAuthorization: Bearer [access_token]
ヘッダーを追加する必要があります。
別の post が見つかりました。この外部認証の仕組みを詳細に示しています。クライアントはWPFであり、サーバーはASP.NET Identityを使用します。