asp.net-mvc-4 - 使用 API key 保护 ASP.Net Web API

标签 asp.net-mvc-4 asp.net-web-api oauth-2.0 facebook-oauth restful-architecture

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

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

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

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

  3. 还有其他我没看到的方法吗?

非常感谢您提供的任何指导和指向示例的链接。感谢您的宝贵时间。

最佳答案

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

关于asp.net-mvc-4 - 使用 API key 保护 ASP.Net Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18605529/

相关文章:

c# - 将 javascript 与具有深度嵌套的 c# 代码混合。尝试制作外部文件

asp.net-mvc-4 - 如何使用 Redis 缓存自定义列表?

html - 使 HTML5 和 CSS3 网站与旧浏览器兼容?

javascript - 需要 Auth0 RememberLastLogin 参数信息来获取普通链接选项

twitter-bootstrap - hidden-xs 在 Bootstrap 中打印时隐藏 div

ASP.NET Web API - 不允许使用 PUT 和 DELETE 动词 - IIS 8

android - 使用 REST 发送和接收复杂数据

entity-framework - 在 ASP.NET Web API 中序列化对象时出现循环引用错误

java - 如何在 Spring Boot 微服务应用程序之间传递用户 ID

amazon-web-services - Amazon cognito 不提供联合身份提供者提供的刷新 token (谷歌登录)