aco*_*or3 48 .net asp.net oauth-2.0 asp.net-web-api asp.net-identity
根据这篇文章http://www.asp.net/web-api/overview/security/external-authentication-services ...我能够使用本地身份验证服务登录(使用新的Asp.net身份框架)
但无法找到一个walktrough来正确调用(从移动应用程序或邮递员)Visual Studio 2013 SPA模板中生成的默认Web api.
谁能帮我?
ber*_*hir 111
我今天遇到了同样的问题,并找到了以下解决方案:
首先获得所有可用的提供商
GET /api/Account/ExternalLogins?returnUrl=%2F&generateState=true
Run Code Online (Sandbox Code Playgroud)
响应消息是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"}]
Run Code Online (Sandbox Code Playgroud)
现在将GET请求发送到您要使用的提供程序的URL.您将被重定向到外部提供商的登录页面.填写您的凭据,您将被重定向回您的网站.现在解析access_tokenurl.
http://localhost:15359/#access_token=[..]&token_type=bearer&expires_in=[..]&state=QotufgXRptkAfJvcthIOWBnGZydgVkZWsx8YrQepeDk1
Run Code Online (Sandbox Code Playgroud)
如果用户已拥有本地帐户,.AspNet.Cookies则会设置cookie并完成操作.如果没有,则只设置.AspNet.ExternalCookiecookie并且您必须注册本地帐户.
有一个api可以找出用户是否已注册:
GET /api/Account/UserInfo
Run Code Online (Sandbox Code Playgroud)
回应是
{"userName":"xxx","hasRegistered":false,"loginProvider":"Facebook"}
Run Code Online (Sandbox Code Playgroud)
要为用户创建本地帐户,请致电
POST /api/Account/RegisterExternal
Authorization: Bearer VPcd1RQ4X... (access_token from url)
Content-Type: application/json
{"UserName":"myusername"}
Run Code Online (Sandbox Code Playgroud)
现在像以前一样使用提供者URL发送相同的请求
GET /api/Account/ExternalLogin?provider=Facebook&response_type=token&client_id=self&redirect_uri=http%3A%2F%2Flocalhost%3A15359%2F&state=QotufgXRptkAfJvcthIOWBnGZydgVkZWsx8YrQepeDk1
Run Code Online (Sandbox Code Playgroud)
但这次用户已经拥有一个帐户并获得身份验证.您可以/api/Account/UserInfo再次致电验证这一点.
现在access_token从url中提取.您必须为Authorization: Bearer [access_token]每个请求添加标头.
| 归档时间: |
|
| 查看次数: |
39584 次 |
| 最近记录: |