【问题标题】:Securing ASP.Net Web API with API Key使用 API 密钥保护 ASP.Net Web API
【发布时间】:2013-09-04 04:41:49
【问题描述】:

我正在开发一个 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. 还有其他我没看到的方法吗?

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 你可以称它为APIKey,我称之为SessionId。
    • 那么您是否建议我的 Web API 应用程序具有某种形式的 UI 视图,用户可以在其中输入用户名/密码或通过 Facebook 等进行身份验证?因此,客户端应用程序尝试访问我的 Web API,Web API 意识到用户未通过身份验证并将他们重定向到登录页面。你不会陷入跨域问题吗?还是您会依赖客户端应用程序进行身份验证(UI 视图)?
    • @Tom,我建议您在第一次 API 调用中获取用户的凭据(通过您的 UI 或内部调用 facebook 身份验证 API 的身份验证 API),对用户进行身份验证,在最后,接下来从 API 调用为客户端提供服务。全球票务预订提供商都在使用这种方法,我发现这是一个非常好的解决方案。
    猜你喜欢
    • 2018-08-30
    • 2018-07-04
    • 2018-07-17
    • 2020-10-31
    • 2016-03-04
    • 2019-11-29
    • 2014-09-27
    • 2012-07-13
    • 1970-01-01
    相关资源
    最近更新 更多