在不同情况下保护您的Web API的3种方法
安全是任何软件开发中的重要组成部分,API也不例外。即使对于公共API,控制谁可以访问您的服务也是通常的业务要求。
由于Web API本质上是无状态的,因此安全上下文不能取决于服务器会话。向API提出的每个请求都必须附上一些必须在服务器上验证的凭据。
以下是保持网络API并何时使用它们的三种常见方法:
注意:此处讨论的技术是关于身份验证和授权的,并且不加密传输消息。通常使用客户端和服务器共享的HTTPS协议来处理消息加密。
HMAC身份验证
这种安全机制在公共API中很常见,相对易于实施。想要访问您服务的客户或应用程序将需要一个API键和密钥从您作为服务所有者。这些密钥通常是随机生成的字符串,并事先给予客户端。API键是每个客户端/应用程序唯一的。客户端和服务器都将持有API密钥和秘密密钥。
当客户端拨打API时,将使用客户端上的秘密密钥哈希内容来生成HMAC签名。然后,此值以及原始消息和API键将传递到服务器的API。在服务器上,重复相同的过程,但是这次使用存储在服务器上的私钥,该密钥由从客户端发送的相应的API键检索。然后将生成的HMAC签名与客户端发送的签名进行比较。当两个HMAC签名匹配时,请求已授权。
何时使用:当您拥有公共API并想要控制谁可以访问您的API时。
电子签名
数字签名依赖于私人钥匙对是将服务器确保到服务器通信的有用机制。它通过使用私钥签署消息内容来生成可以使用相应的公共密钥(证书)验证的安全签名。钥匙对通常由证书授权提供。
客户端将向服务器提供其公共密钥。然后,通过使用私钥签署消息内容来向服务器提出每个请求。这允许服务器在不知道客户端的私钥的情况下验证消息真实性。
HMAC与此方法的不同之处在于,服务器和客户端没有共享相同的秘密密钥,因此,任何一方都不能相互模仿。
重要的是:私钥的名字表明,所有者必须将其保密。客户持有私钥用于签署消息。服务器保持公钥(证书)用于验证消息签名。
对于两条通信,两家服务器都将握有自己的私钥,并互相交换公共钥匙。
何时使用:何时需要服务器到服务器或两种方式通信。
Oauth
OAuth是流行的安全机制,可广泛用于用户身份验证。类似于在网站上登录的会话的工作方式,OAuth要求客户用户在允许访问其余服务之前“登录” Web API。
这是通过公开登录过程的单个端点来实现的。然后,客户端将将用户凭据传递到API,在该API上,在该API上可以在服务器上对用户进行身份验证。经过身份验证后,将生成安全令牌并存储在服务器上,并将其返回给客户端。
然后,客户将将此令牌传递给API,以访问受限制的端点。令牌在服务器端进行了验证。
何时使用:当您想将API的某些部分限制为仅认证的用户时。
结论
这里讨论的三种安全方法是用于不同情况的行业标准。HMAC身份验证对于确保公共API是常见的,而数字签名则适用于服务器到服务器两种通信。另一方面,当您需要将API的一部分限制为仅认证的用户时,OAuth很有用。
还有其他安全措施,例如IP白色清单,值得探索。我将把他们留给另一个帖子。