Den*_*nov 5 java spring spring-security oauth-2.0 openid-connect
我已经配置了资源服务器,用于根据身份验证服务器验证 JWT 令牌。在下面的代码中,您可以看到我已定义的配置(是来自Auth0issuer-uri的 URI )。如果用户在我的公共客户端上针对 Auth0 进行身份验证,则该客户端会从 Auth0 接收 JWT 令牌。当我使用令牌标头调用资源服务器时,用户已获得授权,并且资源可用,但仅包含从 JWT 解析的基本数据,而不包含有关用户的完整信息。我有来自 Auth0 的可用端点,它提供用户名、图片、电子邮件等。SecurityContextHolderuserinfo
我的问题是,我是否可以在资源服务器中设置此用户信息端点,以自动获取此信息,或者最好的方法是什么?我希望将此信息包含在SecurityContextHolder或至少包含用户的电子邮件和用户名中。
@Bean
fun filterChain(http: HttpSecurity): SecurityFilterChain {
http.authorizeRequests().anyRequest().permitAll()
.and()
.oauth2ResourceServer().jwt();
return http.build()
}
Run Code Online (Sandbox Code Playgroud)
和 JWT 解码器 bean
@Bean
fun jwtDecoder(): JwtDecoder? {
val jwtDecoder = JwtDecoders.fromOidcIssuerLocation<JwtDecoder>(issuer) as NimbusJwtDecoder
val audienceValidator: OAuth2TokenValidator<Jwt> = AudienceValidator(audience)
val withIssuer = JwtValidators.createDefaultWithIssuer(issuer)
val withAudience: OAuth2TokenValidator<Jwt> = DelegatingOAuth2TokenValidator(withIssuer, audienceValidator)
jwtDecoder.setJwtValidator(withAudience)
return jwtDecoder
}
Run Code Online (Sandbox Code Playgroud)
文件application.properties
spring.security.oauth2.resourceserver.jwt.issuer-uri=my-domain.com
spring.security.oauth2.resourceserver.jwt.audience=my-audience
Run Code Online (Sandbox Code Playgroud)
编辑这是从 Auth0 收到的 JWT 的有效负载
{
"iss": "https://dev-abcdefgh.us.auth0.com/",
"sub": "google-oauth2|353335637216442227159",
"aud": [
"my-audience",
"https://dev-3ag8q43b.us.auth0.com/userinfo"
],
"iat": 1663100248,
"exp": 1663186648,
"azp": "m01yBdKdQd5erBxriQde24ogfsdAsYvD",
"scope": "openid profile email"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2273 次 |
| 最近记录: |