我有一个包含用户及其数据的网站。
实现 Web 服务/API 以使用户的登录凭据和数据安全的最安全方法是什么? oAuth 并不是一个真正的选项,因为不一定会在其他网络应用程序中使用。
我担心的是,将用户名和密码作为输入进行明文传输是危险的,并且令牌也可能被窃取并被恶意重复使用。
我是否需要想出自己的加密和解密数据的方法,或者是否有已经在使用的常见做法?
重点是,它尽可能开放,供世界上的任何人使用,但从定义上来说仍然是安全的。 文档将可供所有人使用。
始终有 WS-Security 标准:
.NET 通过 Microsoft Web 服务增强功能在 .NET 1.1 和 .NET 2.0 中实现:
WSE 2.0(.NET 1.1)
WSE 3.0(.NET 2.0)
它提供了多种方法来在通过网络发送 SOAP 信封之前对其进行加密,从而安全地传输内部数据。
使用 SSL 连接怎么样?
不要编写自己的加密。
SSL 有什么问题吗?对于“常规”WSDL/SOAP 客户端 (asmx),为此使用 SOAP 标头(通过 SSL)并不罕见。
使用 WCF,这被形式化为 TransportWithMessageCredential(只需搜索)。当然,您可以使用证书、联合、kerberos 等...
除了传输安全性 (SSL) 之外,WCF 还支持基于消息的安全性 - 具有可以加密仅安全标头的附加功能。就我个人而言,我喜欢使用 TransportWithMessageCredential(即 SSL)来保持简单。
与第三方共享的任何身份验证方法都可能被利用,您必须在某处划清界限。使用 HTTP/S 和 WS-* 服务来保护连接可能是最好的方法。如果该服务仅由具有固定 IP 地址的已知系统访问,则使用防火墙进一步保护您的设备免受外部干扰。
为什么不使用标准的 WS-Security 来实现这一点?
编辑:只想添加 Justin 的答案,它也在 WCF 中实现。