我只是使用Attribute / Filter为每个WebAPI Action开发一种身份验证机制。我没有使用“BuiltIn”授权功能,因为我想使用我的存储过程和表结构。
我要求WebAPI用户在每个请求中提供用户名和密码作为请求标头的一部分。用户名和密码作为明文传输,但WebAPI配置为仅通过HTTPS(SSL)工作。
我的安全顾问告诉我,即使通过HTTPS(SSL)将用户名和密码作为明文传输并要求我加密凭据也不安全。
这样做的简单方法是什么?他建议使用Cookie,但我不确定WebAPI客户端是否可以使用Cookie,因为WebAPI用户不仅仅是浏览器客户端,其中一些用户是服务器到服务器。
由于
答案 0 :(得分:3)
这不是正确的方法,也不遵循OAuth规范。
如果要提供在每个请求上重新进行身份验证的标头,则应构建授权服务器以生成唯一的加密时间戳标记。在每个请求上传递该令牌并对其进行身份验证,而不是凭据。这样,您只需公开一次凭证,并且在您的令牌被成功拦截和解密的情况下,帐户受损的可能性要小得多。
如果您需要使用现有身份验证服务器(Google等)的OAuth库提供帮助,请查看http://dotnetopenauth.net/
答案 1 :(得分:0)
如果您使用的是web api 2,则应该查看基于owin的oauth身份验证。它的工作方式是您在首次登录后获得oauth令牌,并且您必须在后续请求中发送oauth令牌。有关更多信息,请阅读Dominick Baier的博客 - http://leastprivilege.com/category/oauth/。