摘要中心身份验证是一个“nonce” 。这是服务器生成的值 。Spring Security的nonce采用以下格式:
示例:摘要语法
base64(expirationTime + ":" + md5Hex(expirationTime + ":" + key))expirationTime:The date and time when the nonce expires, expressed in millisecondskey:A private key to prevent modification of the nonce token
你需要确保你配置了不安全的明文密码存储使用NoOpPasswordEncoder。以下是使用Java配置配置摘要认证的示例:
@AutowiredUserDetailsService userDetailsService;DigestAuthenticationEntryPoint entryPoint() {DigestAuthenticationEntryPoint result = new DigestAuthenticationEntryPoint();result.setRealmName("My App Relam");result.setKey("3028472b-da34-4501-bfd8-a355c42bdf92");}DigestAuthenticationFilter digestAuthenticationFilter() {DigestAuthenticationFilter result = new DigestAuthenticationFilter();result.setUserDetailsService(userDetailsService);result.setAuthenticationEntryPoint(entryPoint());}protected void configure(HttpSecurity http) throws Exception {http// ....exceptionHandling(e -> e.authenticationEntryPoint(authenticationEntryPoint())).addFilterBefore(digestFilter());}
- 基于内存的身份验证
InMemoryUserDetailsManager实现了UserDetailsService,以支持在内存中检索的基于用户名/密码的身份验证 。InMemoryUserDetailsManager通过实现UserDetailsManager接口来提供对UserDetails的管理 。当Spring Security配置为接受用户名/密码进行身份验证时,将使用基于UserDetails的身份验证 。
在这个示例中,我们使用Spring Boot CLI对password的密码进行编码,并获得编码后的密码{bcrypt}$2a$10$
GRLdNijSQMUvl/au9ofL.eDwmoohzzS7.rmNSJZ.0FxO/BTk76klW 。
示例:
InMemoryUserDetailsManager的java配置示例
@Beanpublic UserDetailsService users() {UserDetails user = User.builder().username("user").password("{bcrypt}$2a$10$GRLdNijSQMUvl/au9ofL.eDwmoohzzS7.rmNSJZ.0FxO/BTk76klW").roles("USER").build();UserDetails admin = User.builder().username("admin").password("{bcrypt}$2a$10$GRLdNijSQMUvl/au9ofL.eDwmoohzzS7.rmNSJZ.0FxO/BTk76klW").roles("USER", "ADMIN").build();return new InMemoryUserDetailsManager(user, admin);}
上面的示例以安全的格式存储密码,但是在开始体验方面还有很多不足之处 。在下面的示例中,我们利用了User.withDefaultPasswordEncoder来确保存储在内存中的密码是受保护的 。但是,它不能通过反编译源代码来防止获得密码 。出于这个原因,User.withDefaultPasswordEncoder应该只用于“入门”,而不是用于生产 。
示例:使用
User.withDefaultPasswordEncoder的InMemoryUserDetailsManager
@Beanpublic UserDetailsService users() {// The builder will ensure the passwords are encoded before saving in memoryUserBuilder users = User.withDefaultPasswordEncoder();UserDetails user = users.username("user").password("password").roles("USER").build();UserDetails admin = users.username("admin").password("password").roles("USER", "ADMIN").build();return new InMemoryUserDetailsManager(user, admin);}
- 基于JDBC的身份验证
在下面的内容中,我们将讨论:
- Spring安全JDBC身份验证使用的默认模式
- 设置数据源
- JdbcUserDetailsManager Bean
Spring Security为基于JDBC的身份验证提供默认查询 。本节提供与默认查询相对应的默认模式 。您将需要调整模式,以匹配与您正在使用的查询和数据库方言相匹配的定制 。
用户模式
JdbcDaoImpl需要表来加载用户的密码、帐户状态(启用或禁用)和权限(角色)列表 。需要的默认模式可以在下面找到 。
默认模式也公开为一个名为
org/springframework/security/core/userdetails/jdbc/users.ddl的类路径资源 。
示例:默认用户模式
create table users(username varchar_ignorecase(50) not null primary key,password varchar_ignorecase(500) not null,enabled boolean not null);create table authorities (username varchar_ignorecase(50) not null,authority varchar_ignorecase(50) not null,constraint fk_authorities_users foreign key(username) references users(username));create unique index ix_auth_username on authorities (username,authority);
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 严国华|《罚罪》唐绍文身份曝光,他确实是卧底,但并非听命于严国华
- 肖振邦|《罚罪》仅剩6集!肖振邦的结局注定悲惨,邱涛的真实身份即将暴露
- 浙江卫视|前浙江卫视主持人突然晒娃,曾和杨迪传绯闻,圈外丈夫仍身份成谜
- 李伯东|罚罪:李伯东真实身份曝光,与张秋峰联手上演碟中谍
- 章安仁|《流金岁月》,章安仁或许对蒋南孙有一丝喜欢,更爱的是她的身份
- 赵鹏超|《罚罪》最狠毒之人,为钱抛弃所有亲人,“大王”身份实至名归
- |探秘新钓点鱼影都没见到,却意外钩起一螃蟹,得知身份后高兴坏了
- 陆安然|覆流年:5000两买下的冬青身份不简单,陆安然既送了人情又得忠仆
- |40岁韩国男星染毒被逮!身份被网友找到了!
- 吴镇宇|吴镇宇:坐公交被指责不该坐老人座,无奈掏出身份证,引无限感慨