Spring5,基本身份验证和base64密码编码器

c9qzyr3d  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(415)

我在所有项目中都使用Spring5。我想为一个端点添加一个只有一个密码/登录名的基本身份验证(请记住,基本身份验证是基于用于对标头进行身份验证的请求” Authorization : Basic ${encryptedInBase64('login:password')} ")
我的问题是,由springweb初始化的基本身份验证对login:secret using base64编码器
但是
spring security不再提出base64密码编码器,“因为加密级别太低”
一个快速的解决办法是
使用不推荐使用的md4passwordencoder,它在base64中编码/解码
实现我自己的“mtbase64passwordencoder”类,他们也这么做。
但他们两个看起来都不干净。
所以我的问题是:在两个spring5项目之间用basic auth连接的干净方法是什么?spring希望我们如何做基本的auth?

zqry0prt

zqry0prt1#

spring密码编码器api用于在存储到数据库之前对密码进行编码,例如,它与基本身份验证无关!
根据定义,基本身份验证必须使用base64,请参阅rfc 7617。它对用户名和密码使用base64编码。
spring security passwordencoder用于创建一种散列,以便安全地存储,并在以后用于检查密码。结果不能被取消编码以获得原始密码!因此 PasswordEncoder 使用base64是个坏主意,因为您总是可以对内容进行反向解码。
从我的观点来看,这个名字 PasswordEncoder 是误导性的,spring团队应该给它命名 PasswordHashFunction 或者类似于澄清它的单向功能。
如果您使用的是当前的spring安全版本,请注意这两个版本 PasswordEncoder 接口: org.springframework.security.authentication.encoding.PasswordEncoder 已弃用
更好地利用 org.springframework.security.crypto.password.PasswordEncoder .

nr7wwzry

nr7wwzry2#

从“基本认证”rfc(https://www.rfc-editor.org/rfc/rfc7617.txt):
本文档定义了“基本”超文本传输协议(http)身份验证方案,该方案以用户id/密码对的形式传输凭据,并使用base64编码。
用base64编码用户/密码对是标准的。因此,除了离开基本身份验证之外,您不应该使用其他任何东西。
base64也不是“弱的”,因为它不是加密,只是编码。它并不比纯文本好。它仍然需要编码,因为用户名和密码都可能包含http头中不允许的字符。

相关问题