Asp.net
ASP.NET Web API 2:如何使用外部身份驗證服務登錄?
根據這篇文章<http://www.asp.net/web-api/overview/security/external-authentication-services> …我可以使用本地身份驗證服務登錄(使用新的 ASP.NET 身份框架)
但我找不到正確呼叫(從移動應用程序或Postman)在 Visual Studio 2013 SPA 模板中生成的預設 Web API 的演練。
誰能幫我?
我今天遇到了同樣的問題,並找到了以下解決方案:
首先獲取所有可用的提供者
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"}]現在向您要使用的提供者的 url 發送一個 GET 請求。您將被重定向到外部提供商的登錄頁面。填寫您的憑據,您將被重定向回您的站點。
access_token現在從 url解析。http://localhost:15359/#access_token=[..]&token_type=bearer&expires_in=[..]&state=QotufgXRptkAfJvcthIOWBnGZydgVkZWsx8YrQepeDk1如果使用者已經有一個本地帳戶,
.AspNet.Cookies則設置 cookie 並完成。如果沒有,則僅設置.AspNet.ExternalCookiecookie,您必須註冊一個本地帳戶。有一個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您可以通過再次呼叫來驗證這一點。現在
access_token從 url 中提取。您必須將Authorization: Bearer [access_token]標頭添加到您提出的每個請求中。