我使用spring Boot 作为后端,除了thymeleaf作为模板引擎。Atm,我试图在我的项目中实现oauth2(带keycloak)。
我创建了一个新的领域,添加了一个redirect-uri(“http://172.31.52.123:8000/*“)+创建了用户,并将id、secret等放在我的application.properties文件中。
当我调用http://172.31.52.123:8000/时,我从下面的ViewController得到“hi”消息。当我调用http://172.31.52.123:8000/greeting时,我将被重定向到http://172.31.52.123:8080/oauth2/authorization/appliance,然后到keycloak登录。从那里,我得到这些参数:
response_type: code
client_id: myClientId
state: hpcfsknjW6QCfMSQWS-k...
redirect_uri: http://172.31.52.123:8080/*
然后是keycloak的这些:
state: hpcfsknjW6QCfMSQWS-k...
session_state: f6ca95e5-a117-...
code: 298f32f-f283f ...
登录后,我得到的结果是:
172.31.52.123,您经常会收到该邮件。-〉错误_重定向太多
控制台里什么都没有,我做错了什么?本来应该重定向到http://172.31.52.123:8000/*的。
应用程序.属性
appliance-base-url: https://authServerBlaBla/auth/realms/myRealmName
spring:
security:
oauth2:
client:
registration:
appliance:
authorizationGrantType: authorization_code
redirectUri: http://172.31.52.123:8080/*
clientId: myClientId
clientSecret: myClientSecret
provider:
appliance:
authorization-uri: ${appliance-base-url}/protocol/openid-connect/auth
token-uri: ${appliance-base-url}/protocol/openid-connect/token
user-info-uri: ${appliance-base-url}/protocol/openid-connect/userinfo
安全配置
@EnableWebSecurity
public class SecurityConfiguration {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests(authorizeRequests -> authorizeRequests
.mvcMatchers("/").permitAll()
.anyRequest().authenticated()
)
.oauth2Login(withDefaults());
return http.build();
}
}
视图控制器
@Controller
public class ViewController {
@GetMapping(value = {"/"})
@ResponseBody
public String index() {
return "hi";
}
@GetMapping("/greeting")
@ResponseBody
public String greet() {
String username = SecurityContextHolder.getContext().getAuthentication().getName();
return "Welcome, " + username;
}
}
1条答案
按热度按时间0kjbasz61#
您返回
@ResponseBody
=〉您的应用应配置为resource-server
(而不是client
)。如果您的应用还提供UI元素(使用Thymeleaf、JSF或任何服务器端呈现框架),则必须提供两个不同的过滤器链,使用
securityMatcher
模式指定在何处应用resource-server
安全性以及在何处应用client
安全性。我已经在这个答案中详细说明:将KeycloakSpring适配器与Sping Boot 3配合使用