当前位置: 首页 > 面试题库 >

密码编码-BCrypt-不授权哈希密码,仅对纯文本授权

申屠俊发
2023-03-14
问题内容

我有一个宠物项目,我一直在慢慢努力,最近我决定为用户合并BCrypt密码编码。

我遇到的问题是,它启用后,它从未授权任何用户,而且我不知道为什么。

希望你们能提供帮助。

以下是我的SecurityConfig.java文件中的配置

@Autowired
private PasswordEncoder passwordEncoder;

@Override
protected void registerAuthentication(AuthenticationManagerBuilder auth) throws Exception {
    auth.jdbcAuthentication().dataSource(dataSource).passwordEncoder(passwordEncoder);
}


@Bean
public BCryptPasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}

我的控制器注册了新用户并将其登录:

@RequestMapping(value = "/user_create", method = RequestMethod.POST)
public String createUser(@ModelAttribute User user) {
    user.setPlain(user.getPassword());
    user.setPassword(BCrypt.hashpw(user.getPassword(),BCrypt.gensalt()));
    userInterface.saveUser(user);
    return "redirect:/";
}

创建新用户的工作非常完美(将其加载到数据库中),结果如下所示:

ID | USERNAME | PLAIN_PASSWORD | HASHED_PASSWORD
1  | hash     | hash           | $2a$10$BYpLI.Dd06HS1myhxxeyb.lZ/74lfYVXSk9Tuy.iYTzy4t2Yx5FtW

我无法授权用户的原因是什么?

更新1

我还添加了另一个用户(通过后端),所以我有2个用户看起来像这样

ID | USERNAME | PLAIN_PASSWORD | HASHED_PASSWORD
1  | hash     | hash           | $2a$10$BYpLI.Dd06HS1myhxxeyb.lZ/74lfYVXSk9Tuy.iYTzy4t2Yx5FtW
2  | admin    | admin          | admin

通过上面的设置,我可以使用“ admin”和“ admin”登录,即使它没有被散列,甚至可以打开密码编码器。

更新2

数据库由Hibernate管理,设置如下:

@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue
private Integer id;

@NotNull
@Column(name = "username")
private String login;

@NotNull
@Column(name = "hashed_password")
private String password;

@Column(name = "plain_password")
private String plain;

// GETTERS AND SETTERS //
}

问题答案:

我已经确定了问题....而且非常简单。

更改了以下内容:

@Override
protected void registerAuthentication(AuthenticationManagerBuilder auth) throws Exception {
    auth.jdbcAuthentication().dataSource(dataSource).passwordEncoder(passwordEncoder);
}

到下面

@Override
protected void registerAuthentication(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(customUserService).passwordEncoder(passwordEncoder).and
jdbcAuthentication().dataSource(dataSource);
}

从HttpSecurity配置中删除了它。



 类似资料:
  • 问题内容: 我想用散列密码,以后再验证提供的密码是否正确。 散列密码很容易: 如何将纯文本密码与存储的哈希值进行比较? 问题答案: 使用py-bcrypt,您不需要单独存储盐:将盐存储在哈希中。 您可以简单地将哈希用作盐,盐将存储在哈希的开头。

  • 我正在使用spring boot,spring安全,OAuth2和JWT来验证我的应用程序,但我一直得到这个令人讨厌的错误,我不知道什么是错误的。我的类: : : 除: 我的实体模型类是: 实体: 实体: 我在数据库中的密码是正确加密的spring安全BCrypt,它的数据类型是varchar(255),大于60。

  • 问题内容: 来自github: 哈希密码: 要检查密码: 从上面看,比较中如何不包含盐值?我在这里想念什么? 问题答案: 盐合并到哈希中(以纯文本形式)。比较功能只是将盐从哈希表中提取出来,然后使用它来哈希密码并执行比较。

  • 每个人在建构 PHP 应用时终究都会加入用户登录的模块。用户的帐号及密码会被储存在数据库中,在登录时用来验证用户。 在存储密码前正确的 哈希密码 是非常重要的。密码的哈希操作是单向不可逆的,该哈希值是一段固定长度的字符串且无法逆向推算出原始密码。这就代表你可以哈希另一串密码,来比较两者是否是同一个密码,但又无需知道原始的密码。如果你不将密码哈希,那么当未授权的第三者进入你的数据库时,所有用户的帐号

  • 我希望能够对客户机进行身份验证/授权,以产生/消费某些主题的消息。它们将是我们vpn的一部分(包括aws)。根据我对可用文档的理解,唯一的选择是颁发客户端证书并基于客户端DNS设置ACL?不幸的是,我不能使用我的私人CA(我在linux笔记本电脑上创建的)来创建客户端证书。于是出现了以下问题: null 请开导我:) 提前谢谢marcel

  • 我有一个springboot 2.0.1.mvc版本的应用程序,这是我的配置文件 但当我登录到应用程序时,我在日志文件中看到了以下消息: 我不能登录...密码是正确的。我在将我的应用程序从springboot 1更新到springboot 2后出现了这个错误

  • 我是在阅读了一些关于php中会话管理的主题后开始进行安全讨论的,请查看:https://paragonie.com/blog/2015/04/secure-authentication-php-with-long-termer-persistence#title.2 引自章节:胡椒还是不胡椒? 一个更好的解决方案是,在将散列插入数据库之前对其进行加密,如果使用硬件分离,这种解决方案尤其有用。有了这

  • 我执行本问题中描述的步骤: Laravel的5.3护照和api路由 从api的路径来看,一切都很好,我可以注册新用户,读取他们的数据等等。 然后在AuthServiceProvider上添加此命令 护照::代币ExpireIn(碳::现在()- 我以url{{url}}/oauth/token登录邮递员 正文:application/x-www-form-urlencoded { 授权类型:{pa