我使用Spring Authorization Server v.1.0.0。在从数据库检索用户后,我想添加声明,如用户ID。我有自己的UserDetailsService
实现:
override fun loadUserByUsername(username: String): IamUserDetails {
return userRepository.findByEmail(username)
?.let { IamUserDetails(it) } ?: throw UsernameNotFoundException(username)
}
我的扩展用户模型如下所示:
data class IamUserDetails(
private val user: User,
) : UserDetails {
override fun getAuthorities(): MutableCollection<out GrantedAuthority> = mutableListOf()
override fun getPassword() = user.password
override fun getUsername() = user.email
override fun isAccountNonExpired() = true
override fun isAccountNonLocked() = true
override fun isCredentialsNonExpired() = true
override fun isEnabled() = user.enabled
}
user属性包含数据库中用户的ID。当前标记如下所示:
{
"sub": "user@example.com",
"aud": "messaging-client",
"nbf": 1670443075,
"scope": \[
"openid"
\],
"iss": "http://localhost:8080",
"exp": 1670443375,
"iat": 1670443075
}
问题是如何使用声明userId丰富此令牌?
1条答案
按热度按时间fafcakar1#
我发现了一个解决这个问题的方法,我看过很多关于覆盖
jwtDecoder
bean的例子,但是它不适用于Spring授权服务器。我补充道:
和实现,例如:
则JWT包含: