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

标签 c# asp.net facebook asp.net-web-api authentication

我正在尝试构建一个 API(使用 ASP.NET WebApi),该 API 将由学校项目的 native 移动应用程序使用。 (我不关心/开发移动应用程序,这个责任落在不同的成员身上) 我正处于需要实现基于 token 的 Facebook 登录的地步。有很多教程可以介绍如何为基于浏览器的应用程序实现此功能(这非常简单,而且大部分都是内置的),但我不认为我会遵循它如何与 native 应用程序一起使用。我不明白重定向是如何工作的?

根据这个link ,我的服务器不需要专门处理任何事情。而且我不认为我明白这将如何运作?来自 Facebook 的 token 将如何处理?

此外,我应该实现 token 处理的哪一部分,我真的找不到关于 WebApi 外部登录身份验证的好文档。

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

此外,对我来说最大的困惑是我不明白 Facebook 返回的 token 将如何处理。

  1. 我假设 token 将返回给客户端(移动应用程序),我如何在我的服务器上访问它?
  2. 如何从 facebook 的 token 创建本地 token ? 这一切都是由 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

最佳答案

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

我记得您发布的两个链接“Claims and Token Based Authentication”和“ASP.NET Web API 2 external logins with Facebook and Google in AngularJS app”是包含有用信息的链接。

我不能给你一个全面的答案,因为我不记得我必须做的一切,我什至不明白我当时所做的一切,但我可​​以给你一个大概的想法。您走在正确的轨道上。

基本上,我最终使用 Facebook 授予的 token 来确认他们已登录到他们的 Facebook 帐户,根据他们的 Facebook 用户 ID 创建用户,并授予他们我自己的不记名 token ,他们可以使用该 token 访问我的 API。

流程看起来像这样:

  1. 客户端通过任何方法向 Facebook 进行身份验证(我们使用 oauth.io )
    • Facebook 返回给他们一个 token
  2. 客户端将 token 信息发送到我的 WebApi Controller 的注册端点
    • 使用 Facebook 的 Graph API 验证 token ,返回用户信息
    • 用户是通过 ASP.NET Identity 在数据库中创建的,用户的 Facebook 用户 ID 作为 key
  3. 客户端将 token 信息发送到我的 WebApi Controller 的身份验证端点
    • 使用 Facebook 的 Graph API 验证 token ,返回用户信息
    • 用户信息用于在数据库中查找用户,确认他们之前是否注册过
    • ASP.NET Identity 用于为该用户生成新 token
    • 该 token 返回给客户端
  4. 客户端在所有 future 的 HTTP 请求中包含一个授权 header ,其中包含我的服务授予的新 token (例如“授权:Bearer TOKEN”)
    • 如果 WebApi 端点具有 [Authorize] 属性,ASP.NET Identity 将自动验证不记名 token 并在无效时拒绝访问

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

关于c# - 在 ASP.NET WebApi 2 中为移动应用程序实现外部身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33727404/

相关文章:

c# - 如何用 ReadOnlyCollection 之类的东西包装 int[,]?

c# - 访问文档属性 - VB 中的 Excel 工作簿/CSV

c# - 正则表达式添加 ( 和/

c# - Crystal 报告错误 2-3 天后加载报告失败

facebook - HTTPS 和 Facebook Graph API 的 cURL 问题

C# - 如果未提供字节数组,如何传递空值?

c# - 如何在 Windows Phone 8 中使用诺基亚音乐 API

c# - 从桌面客户端调用时 SessionState 集合项消失

javascript - 如何在移动设备上使用 Facebook API?

ios - 现在无法以编程方式在 Facebook 上共享文本 IOS