Spring 安全 REST api 自定义 HTTP 基本身份验证
Spring security REST api custom HTTP basic authentication
对于我的应用程序,我想结合对称加密实现 HTTP 基本身份验证。 base64 编码的用户名和密码在发送时使用加密密钥加密,并在 REST api.
接收时使用相同的密钥解密
到目前为止,我设法实现了 HTTP 基本身份验证。我不确定如何添加额外的加密层。
我对如何完成这项工作有一些想法。到目前为止我得到的是:
- 在 spring 调用身份验证之前,从 headers 检索加密的字符串。
- 使用加密密钥解密字符串
- 将解密后的信息保存在headers
- 使用新的 headers 调用身份验证(现在包含 base64 编码的用户名 + 密码)
我走在正确的轨道上吗?如果是,我该如何在 Spring 中实施它?
不要试图重新发明轮子。只需使用标准 SSL (HTTPS) 安全连接,而不是您的专有对称加密:A) 实现它要容易得多 B) 它比您尝试做的要安全得多。请注意,尽管有更好的方法来验证 REST API.
关于使用 SSL 保护基本身份验证的一些资源:
https://security.stackexchange.com/questions/988/is-basic-auth-secure-if-done-over-https
https://security.stackexchange.com/questions/44811/is-https-and-basic-authentication-secure-enough-for-banking-webservices-restful
正如我所写,有更好的方法可以以无状态方式保护 REST API。例如数字签名的令牌。它可以与 SSL 结合使用。事实上,无论您选择何种身份验证方法,通过 HTTPS 公开您的 API 已成为一种标准。
这是一个广泛的话题,但如果您想了解一些核心 REST 身份验证方法,请查看 JHipster。这是一个很酷的 Web 应用程序生成器(带有 SpringBoot + Angular 1.5 堆栈)。它有据可查,甚至对没有经验的开发人员也很友好。它带有一个向导,您可以在其中选择身份验证方法。查看 JSON Web 令牌 (JWT),它是基于令牌的身份验证的一种实现。我建议您也看看其他身份验证方法(OAuth 是另一个值得一提的方法)。
对于我的应用程序,我想结合对称加密实现 HTTP 基本身份验证。 base64 编码的用户名和密码在发送时使用加密密钥加密,并在 REST api.
接收时使用相同的密钥解密到目前为止,我设法实现了 HTTP 基本身份验证。我不确定如何添加额外的加密层。
我对如何完成这项工作有一些想法。到目前为止我得到的是:
- 在 spring 调用身份验证之前,从 headers 检索加密的字符串。
- 使用加密密钥解密字符串
- 将解密后的信息保存在headers
- 使用新的 headers 调用身份验证(现在包含 base64 编码的用户名 + 密码)
我走在正确的轨道上吗?如果是,我该如何在 Spring 中实施它?
不要试图重新发明轮子。只需使用标准 SSL (HTTPS) 安全连接,而不是您的专有对称加密:A) 实现它要容易得多 B) 它比您尝试做的要安全得多。请注意,尽管有更好的方法来验证 REST API.
关于使用 SSL 保护基本身份验证的一些资源: https://security.stackexchange.com/questions/988/is-basic-auth-secure-if-done-over-https https://security.stackexchange.com/questions/44811/is-https-and-basic-authentication-secure-enough-for-banking-webservices-restful
正如我所写,有更好的方法可以以无状态方式保护 REST API。例如数字签名的令牌。它可以与 SSL 结合使用。事实上,无论您选择何种身份验证方法,通过 HTTPS 公开您的 API 已成为一种标准。
这是一个广泛的话题,但如果您想了解一些核心 REST 身份验证方法,请查看 JHipster。这是一个很酷的 Web 应用程序生成器(带有 SpringBoot + Angular 1.5 堆栈)。它有据可查,甚至对没有经验的开发人员也很友好。它带有一个向导,您可以在其中选择身份验证方法。查看 JSON Web 令牌 (JWT),它是基于令牌的身份验证的一种实现。我建议您也看看其他身份验证方法(OAuth 是另一个值得一提的方法)。