首页 文章

ASP.NET Web API 2:如何使用外部身份验证服务登录?

提问于
浏览
48

根据这篇文章http://www.asp.net/web-api/overview/security/external-authentication-services ...我能够使用本地身份验证服务登录(使用新的Asp.net身份框架)

但无法找到一个walktrough来正确调用(从移动应用程序或Postman)Visual Studio 2013 SPA模板中生成的默认Web api .

谁能帮我?

3 回答

  • -1

    我今天遇到了同样的问题,并找到了以下解决方案:

    首先获得所有可用的提供商

    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 . 您将被重定向到外部提供商的登录页面 . 填写您的凭据,您将被重定向回您的网站 . 现在从网址解析 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] 标头 .

  • 109

    我发现另一个post显示了这种外部认证的工作原理 . 客户端是WPF,服务器使用ASP.NET身份 .

  • 5

    对于那些试图在Android App中使用Web Api 2外部登录和Facebook的人来说,这篇文章只解释了我们要做的第一部分 . 以下是整个图片的一个非常具有说明性的链接:

    [Authenticated access to WebAPI via Facebook token from Android App

相关问题