安全的Web身份验证和API访问

时间:2016-03-20 14:48:05

标签: api authentication ssl https hmacsha1

我想设计一个Web应用程序,它可以保证安全身份验证,并且只向授权用户提供API访问权限。基本思路是简单地发送用户名和密码以使用户通过身份验证。并且用户可以使用session_id向服务器发出请求,而无需再次验证自己。

当然,这是非常不安全的。但据我现在所理解,为了不暴露用户的凭据,我们可以应用TLS(https)来加密它。

然而,在我研究的过程中,我熟悉了很多概念,例如 Base64,HMAC_SHA1,API密钥,OAuth1.0 。但我无法理解为什么我们需要除TLS以外的那些机制。任何人都可以帮助解释为什么TSL不足以确保身份验证和API访问是安全的吗?

1 个答案:

答案 0 :(得分:0)

如果您的Web应用程序对用户进行身份验证,发出会话ID并在每次调用时验证ID,则安全会话可以正常工作。您可以将会话ID存储在每个请求都会发回的安全cookie中。

当您在其他域上使用API​​时,事情变得更加复杂。现在,您的Cookie不会自动发送到服务(same-origin policy)。当然,您可以在调用API时将会话ID粘贴到Authorization标头中。但现在您的API需要与同一后端存储区通信,以维护您的会话状态以验证授权。这个后端存储成为可扩展性和单点故障的瓶颈。

为了解决这个问题,现代协议(如OAuth2)会发布安全令牌。这些令牌为digitally signed(使用HMAC),如果签名成功验证,则接收方信任令牌。不需要后端调用来验证令牌,只需要一个简单的加密操作。

API密钥用于允许应用程序获取安全令牌,而无需依赖用户进行身份验证。将它们视为应用程序的密码。

使用安全令牌还允许您使用第三方授权服务器(如Facebook或Google等)并完全退出验证用户,存储密码,发放令牌等业务。