最新の安定バージョンについては、Spring Security 6.4.2 を使用してください! |
インメモリ認証
Spring Security の InMemoryUserDetailsManager
は UserDetailsService を実装して、メモリに格納されるユーザー名 / パスワードベースの認証をサポートします。InMemoryUserDetailsManager
は、UserDetailsManager
インターフェースを実装することにより、UserDetails
の管理を提供します。UserDetails
ベースの認証は、Spring Security が認証用のユーザー名 / パスワードを受け入れるように構成されている場合に使用されます。
このサンプルでは、Spring Boot CLI を使用して password
のパスワードをエンコードし、エンコードされた {bcrypt}$2a$10$GRLdNijSQMUvl/au9ofL.eDwmoohzzS7.rmNSJZ.0FxO/BTk76klW
のパスワードを取得します。
Java
XML
Kotlin
@Bean
public 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-service>
<user name="user"
password="{bcrypt}$2a$10$GRLdNijSQMUvl/au9ofL.eDwmoohzzS7.rmNSJZ.0FxO/BTk76klW"
authorities="ROLE_USER" />
<user name="admin"
password="{bcrypt}$2a$10$GRLdNijSQMUvl/au9ofL.eDwmoohzzS7.rmNSJZ.0FxO/BTk76klW"
authorities="ROLE_USER,ROLE_ADMIN" />
</user-service>
@Bean
fun users(): UserDetailsService {
val user = User.builder()
.username("user")
.password("{bcrypt}$2a$10\$GRLdNijSQMUvl/au9ofL.eDwmoohzzS7.rmNSJZ.0FxO/BTk76klW")
.roles("USER")
.build()
val admin = User.builder()
.username("admin")
.password("{bcrypt}$2a$10\$GRLdNijSQMUvl/au9ofL.eDwmoohzzS7.rmNSJZ.0FxO/BTk76klW")
.roles("USER", "ADMIN")
.build()
return InMemoryUserDetailsManager(user, admin)
}
上記のサンプルでは、パスワードは安全な形式で保存されていますが、使い始めの点からは多くのことが望まれています。
以下のサンプルでは、User.withDefaultPasswordEncoder を利用して、メモリに保存されているパスワードが保護されていることを確認します。ただし、ソースコードを逆コンパイルしてパスワードを取得することはできません。このため、User.withDefaultPasswordEncoder
は「使用を開始する」ためにのみ使用する必要があり、本番環境での使用を目的としていません。
Java
Kotlin
@Bean
public UserDetailsService users() {
// The builder will ensure the passwords are encoded before saving in memory
UserBuilder 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);
}
@Bean
fun users(): UserDetailsService {
// The builder will ensure the passwords are encoded before saving in memory
val users = User.withDefaultPasswordEncoder()
val user = users
.username("user")
.password("password")
.roles("USER")
.build()
val admin = users
.username("admin")
.password("password")
.roles("USER", "ADMIN")
.build()
return InMemoryUserDetailsManager(user, admin)
}
XML ベースの構成で User.withDefaultPasswordEncoder
を使用する簡単な方法はありません。デモの場合、または始めたばかりの場合は、パスワードの前に {noop}
を付けて、エンコードを使用しないことを示すことができます。
{noop}
XML 設定 <user-service>
<user name="user"
password="{noop}password"
authorities="ROLE_USER" />
<user name="admin"
password="{noop}password"
authorities="ROLE_USER,ROLE_ADMIN" />
</user-service>