在ASP.NET WebApi 2中为移动应用程序实现外部身份验证

问题描述 投票:11回答:2

我正在尝试构建一个API(使用ASP.NET WebApi),供学校项目的本机移动应用程序使用。 (我不关心/开发移动应用程序,此责任由其他成员承担)我现在需要实现基于令牌的Facebook登录。有很多教程可用于如何为基于浏览器的应用程序实现此功能(这很简单,并且大部分是内置的),但是我不认为我会遵循此方法与本机应用程序一起工作。我不明白重定向如何工作?

据此link,我的服务器不需要专门处理任何事情。而且我不认为这会如何工作?来自Facebook的令牌将如何处理?

此外,我应该实现令牌处理的哪一部分,我实际上找不到WebApi外部登录身份验证的良好文档。

无论如何,如果有人可以指出确切的令牌交换流程以及ASP.NET默认实现的内容,那将非常有帮助。

而且,对我来说最大的困惑是,我不知道将如何处理Facebook返回的令牌。

  1. 我假设令牌将返回给客户端(移动应用程序),如何在我的服务器上访问它?
  2. 如何从Facebook的令牌创建本地令牌?这都是由ASP.NET内部/自动完成的吗?

对不起,如果我能确定这一点。我做了很多研究,发现自己沉迷于(相关和不相关)信息中。我什至不知道如何搜索所需的信息。

我已阅读某些链接:

Claims And Token Based Authentication (ASP.NET Web API)

Token Based Authentication using ASP.NET Web API 2, Owin, and Identity

ASP.NET Web API 2 external logins with Facebook and Google in AngularJS app

c# asp.net facebook asp.net-web-api login
2个回答
11
投票

我必须为正在开发的应用程序做几乎相同的事情。我也很难找到有关它的信息。看来我发现的一切都接近我所需要的,但并非完全是解决方案。我最终从大量不同的博客文章,文章等中获取了点点滴滴,并将它们放在一起以使其正常工作。

我记得您发布的两个链接“基于声明和令牌的身份验证”和“在AngularJS应用中使用Facebook和Google进行ASP.NET Web API 2外部登录”都是有用的信息。

我无法为您提供全面的答案,因为我不记得自己必须做的所有事情,甚至我当时都不了解我正在做的所有事情,但是我可以给您大致的想法。您在正确的轨道上。

本质上,我最终使用了Facebook授予的令牌来确认他们已登录其Facebook帐户,根据其Facebook用户ID创建了一个用户,并授予了他们我自己的承载令牌,可用于访问我的API。] >

流程看起来像这样:

  1. 客户端通过任何方法向Facebook进行身份验证(我们使用了oauth.io
    • Facebook返回给他们一个令牌
  2. 客户端将令牌信息发送到我的WebApi控制器的注册端点
    • 使用Facebook的Graph API验证令牌,该API返回用户信息
    • 通过ASP.NET Identity在数据库中创建一个用户,并将其Facebook用户ID作为关键字
  3. 客户端将令牌信息发送到我的WebApi控制器的身份验证端点
    • 使用Facebook的Graph API验证令牌,该API返回用户信息
    • 用户信息用于在数据库中查找用户,确认他们先前已注册
    • ASP.NET身份用于为该用户生成新令牌
    • 该令牌已返回给客户端
  4. 客户端在所有将来的HTTP请求中都包含一个授权标头,并带有我的服务授予的新令牌(例如,“授权:承载TOKEN
  5. ”)
  • 如果WebApi端点具有[Authorize]属性,则ASP.NET Identity将自动验证承载者令牌,并在无效时拒绝访问。

最终有很多用于使用ASP.NET Identity实现OAuth内容的自定义代码,并且您包括的那些链接向您展示了其中的一些内容。希望这些信息能对您有所帮助,对不起,我无济于事。


0
投票

我关注了this article。流程基本上是这个

© www.soinside.com 2019 - 2024. All rights reserved.