【问题标题】:Authentication WebAPI [closed]身份验证 WebAPI [关闭]
【发布时间】:2014-02-26 14:32:49
【问题描述】:

我只是通过使用属性/过滤器为每个 WebAPI 操作开发了一种身份验证机制。我没有使用“内置”授权功能,因为我想使用我的存储过程和表结构。

我要求 WebAPI 用户在每个请求中提供用户名和密码作为请求标头的一部分。用户名和密码以明文形式传输,但 WebAPI 配置为仅通过 HTTPS (SSL) 工作。

我的安全顾问告诉我,即使通过 HTTPS (SSL) 以明文形式传输用户名和密码并要求我加密凭据也不安全。

这样做的简单方法是什么?他建议使用 Cookie,但我不确定 WebAPI 客户端是否可以使用 Cookie,因为 WebAPI 用户不仅是浏览器客户端,一些用法是服务器到服务器。

谢谢

【问题讨论】:

    标签: c# asp.net-mvc-4 ssl asp.net-web-api


    【解决方案1】:

    这不是正确的方法,也不符合OAuth 规范。

    如果您想提供一个在每个请求上都经过重新验证的标头,您应该构建一个授权服务器来生成一个唯一的加密时间戳令牌。在每个请求上传递该令牌并对其进行身份验证,而不是凭据。这样一来,您只需公开一次凭据,并且在您的令牌被成功拦截和解密的情况下,帐户泄露的可能性要小得多。

    如果您在使用具有现有身份验证服务器(google 等)的 OAuth 库时需要帮助,请查看 http://dotnetopenauth.net/

    【讨论】:

    • 我明白你的意思,谢谢。您能解释一下第一次如何加密凭据吗?
    • 当然,根据提供商的不同,您提交您的凭据,授权服务器会为您返回令牌。如果使用 Google 之类的东西作为您的身份验证服务器,用户会提交您从未见过的 google 凭据。如果您创建自己的支持身份验证服务器,用户将向您提交他们的凭据,您将需要颁发加密令牌。但是,您绝不应该返回凭据的加密版本。这会破坏整个观点并造成安全漏洞。
    【解决方案2】:

    如果您使用的是 web api 2,您应该查看基于 owin 的 oauth 身份验证。它的工作方式是您将在第一次登录后获得 oauth 令牌,并且您必须在后续请求中发送 oauth 令牌。欲了解更多信息,请阅读 Dominick Baier 的博客 - http://leastprivilege.com/category/oauth/

    【讨论】:

    • 感谢您的回复。请说明如果使用owin,用户名和密码会在客户端加密,如何加密?
    • 您必须对令牌进行加密。授权服务器将返回加密令牌,并且在后续请求中,您必须将加密令牌传回。
    猜你喜欢
    • 1970-01-01
    • 2012-09-12
    • 2014-04-05
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多