使用API​​密钥保护ASP.Net Web API

时间:2013-09-04 04:41:50

标签: 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密钥。 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 个答案:

答案 0 :(得分:0)

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