3

我正在开发一个 ASP.Net MVC 4 Web API 应用程序,该应用程序将成为不同移动/Web 客户端应用程序的源数据。我需要对用户进行身份验证,以便为用户返回正确的内容集。我正在考虑使用发送到我的 Web API 应用程序的每个请求的 API 密钥。API 密钥标识用户。我发现这篇文章概述了一个潜在的解决方案:From API Key to User with ASP.NET Web API

我需要支持表单身份验证以及 Facebook、Twitter 等的 oAuth 2.0。所有这些方法都会产生一个令牌,我可以使用它从不同的客户端来回发送到我的 Web API,这样我就可以识别用户。我了解 Facebook 访问令牌已过期。我对处理 Facebook 交互的最佳方式有点困惑。以下哪条路径是最好的方法:

  1. 依靠不同的客户端应用程序对 Facebook(和其他 oAuth 提供程序)进行身份验证以建立 Facebook 访问令牌,然后将其转发到我的 Web API 应用程序?这意味着所有客户端都有责任确保 Facebook 访问令牌未过期。Web API 应用假定访问令牌始终有效。这对我来说似乎很危险。不同的应用程序将对用户进行身份验证,然后将用户信息发送到 WebAPI 应用程序以注册用户,以便用户使用来自我的 Web API 应用程序的数据。这似乎有很多重复。

  2. 让我的 Web API 应用程序代表使用我的 Web API 的所有不同客户端应用程序单独负责与 Facebook(和其他 oAuth 提供者)交互。所以这种方法似乎表明我需要为我的 Web API 应用程序构建某种身份验证 UI。我知道 ASP.Net MVC Web API 可以有视图和前端的东西,但在我看来你总是把东西混在一起。似乎 Web API 应用程序应该特别专注于返回数据。来自所有不同客户端应用程序的用户将通过填写注册表或使用 Facebook、Twitter 等来注册我的 Web Api 应用程序。将 UI 视图与纯 REST Web API 应用程序混合是否可以?然后,您必须开始担心与不同设备上的 UI 相关的一切,等等。

  3. 还有另一种我看不到的方法吗?

我非常感谢您可能拥有的任何指导和示例链接。谢谢你的时间。

4

1 回答 1

0

我建议您采用以下方法:
1. 创建一个身份验证 API,该 API 将对用户进行身份验证。如果用户成功通过身份验证,则为该用户创建一个会话(自行实现,可能是您的数据库中的一条记录)。
2. 下次用户调用您返回该用户的内容的其他 API。在这种情况下,该用户必须提供会话 ID(您在第一步中创建)才能获取内容。如果用户提供的 sessionId 在你端不存在,则表示该用户未通过身份验证。在这种情况下,您可以向用户返回身份验证错误消息,告诉他需要先进行身份验证。它是一种非常灵活、可扩展的解决方案,您可以存储有关该用户会话的许多信息。同样,一旦通过身份验证,用户每次调用您的其他 API 以获取内容时都不需要进行身份验证。它还可以使您免于每次都对用户进行身份验证。

于 2013-09-04T04:49:29.737 回答