2014-02-26 119 views
0

我只是使用Attribute/Filter为每个WebAPI Action开发一种身份验证机制。我没有使用“BuiltIn”授权功能,因为我想使用我的存储过程和表结构。身份验证WebAPI

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

我的安全顾问告诉我,即使通过HTTPS(SSL)将用户名和密码作为明文传输也不安全,并要求我加密证书。

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

感谢

回答

3

这是不正确的做法,也没有遵循OAuth规范。

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

如果您需要使用OAuth的库与现有的认证服务器(谷歌等)的帮助,看看http://dotnetopenauth.net/

+0

我明白了你的意思,谢谢。你能解释第一次如何加密凭证吗? – Omtechguy

+0

当然,根据提供商的不同,您会提交您的凭证,并且授权服务器会为您返回令牌。如果您的身份验证服务器使用Google之类的内容,用户将提交您从未见过的Google凭据。如果您创建自己的支持验证服务器,用户将向您提交他们的凭据,您需要发出加密的令牌。无论如何,你应该返回一个加密版本的凭证。这破坏了整个点并创建了一个安全循环漏洞。 –

0

如果您正在使用的网络API 2,你应该看看owin基于OAuth认证。它的工作方式是在首次登录后您将获得oauth标记,并且您将不得不在随后的请求中发送oauth标记。欲了解更多信息,请阅读Dominick Baier的博客 - http://leastprivilege.com/category/oauth/

+0

感谢您的回复。请解释一下,如果使用owin,用户名和密码将在客户端加密,并且如何? – Omtechguy

+0

您将不得不对令牌进行加密。授权服务器将返回加密的令牌,并且在随后的请求中,您必须传回加密的令牌。 – Yousuf