身份验证Web API

时间:2014-02-26 14:32:49

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

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

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

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

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

由于

2 个答案:

答案 0 :(得分:3)

这不是正确的方法,也不遵循OAuth规范。

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

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

答案 1 :(得分:0)

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