我一直在为这件事头疼。
我有一个基本的web应用程序,使用Spring Boot在localhost:8082上运行,一个Docked Keyclope服务器在localhost:8081上运行,一个Docked nginx服务器在端口80上运行。
当我在没有Spring Security集成的情况下使用keyCloak时,访问安全资源的用户将被重定向到超文本传输协议://{keyCloak-server}/auth/realms/{myReal}/协议/openid-Connect/auth/...一切都很好。
根据本教程和其他几个教程,当我将Spring Security性添加到组合中时,我的应用程序突然尝试重定向到http://{myapp}/sso/login,其中没有/sso/loginendpoint,因此我得到了一个404。
我只能通过直接访问应用程序来将其路由到正确的登录endpointhttp://localhost:8082以及在KeyClope中为客户端设置重定向urihttp://localhost:8082/*.
我怀疑它可能与nginx config有关,但同样,在我将Spring Security性添加到组合中之前,它是有效的,所以我挠头了。这是我的nginx。形态
worker_processes 2;
events {
worker_connections 1024;
}
http {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
# auth local (keycloak)
server {
listen 80;
server_name auth.local;
location / {
# keycloak
proxy_pass http://host.docker.internal:8081/;
}
}
server {
listen 80;
server_name guardian.local;
location / {
# send to portal
rewrite ^/(.*)$ http://guardian.local/portal/$1 permanent;
}
location /portal {
# guardian web-portal
proxy_pass http://host.docker.internal:8082;
}
}
}
我的安全配置类:
@Configuration
@EnableWebSecurity
@ComponentScan(basePackageClasses = KeycloakSecurityComponents.class)
public class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
// Submits the KeycloakAuthenticationProvider to the AuthenticationManager
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider();
keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper());
auth.authenticationProvider(keycloakAuthenticationProvider);
}
/**
* Used by Spring Security to add Keycloak config from spring config resource (like application.properties).
* @return
*/
@Bean
public KeycloakSpringBootConfigResolver KeycloakConfigResolver() {
return new KeycloakSpringBootConfigResolver();
}
// Specifies the session authentication strategy
@Bean
@Override
protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.authorizeRequests()
.antMatchers("/portal/client*")
.hasRole("user")
.anyRequest()
.permitAll();
}
}
还有我的application.properties
server.port = 8082
keycloak.auth-server-url = http://auth.local/auth
keycloak.realm = myRealm
keycloak.resource = guardian-web-portal
keycloak.public-client = true
keycloak.use-resource-role-mappings = true
keycloak.principal-attribute = preferred_username
在此方面的任何帮助都将不胜感激。我使用的是KeyClope spring boot starter 12.0.4和spring boot starter security 2.4.5。
尝试添加以下内容,并将permitAll()更改为authenticated()
.antMatchers("/login*", "/error*", "/sso*" ).permitAll()
在你的
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.authorizeRequests()
.antMatchers("/portal/client*")
.hasRole("user")
.anyRequest()
.permitAll();
}
所以最后你会有:
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.authorizeRequests()
.antMatchers("/login*", "/error*", "/sso*" ).permitAll()
.antMatchers("/portal/client*")
.hasRole("user")
.anyRequest()
.authenticated();
}
Nginx的配置文件如下: server { listen 80; #此处应该配置你的域名: server_name doc.iminho.me; charset utf-8; #此处配置你的访问日志,请手动创建该目录: access_log /var/log/nginx/webhook.iminho.me/access.log
我怎么能那么做?我也不知道。我在等你的帮助。谢谢。 我的代码:
我有一个机器人,如果你在非命令通道中使用命令,它会发送一条消息,告诉你只在正确的通道中使用命令,但我希望它不会影响员工角色的人,这是我的代码,我得到了这个错误的属性角色我的代码: 我试图这样做是不和谐的。JSV12
有史以来最奇怪的事情是:我从一个模块运行一个程序,该模块调用另一个模块的一些函数。问题是,相同的代码在使用基本函数时可以完美运行,但第三个函数只有在unittest类内部使用时才会失败,消息如下: NoSuchElementException:消息:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:”//*[@id=“app_skeleton”]/tbody/tr[6]/td/
问题内容: 我已经在托管jenkins和其他一些应用程序的ubuntu实例上将nginx设置为反向代理。我正在使用nginx根据相对路径路由到各种应用程序。从客户端到nginx的所有流量都通过https。在防火墙后面,nginx将所有内容通过http路由到配置的路径和端口号。看起来像这样: Nginx配置文件的相关部分是这样的: 问题是jenkins使用简单的身份验证,并且在成功登录后会发送302
主要内容:1. 代理服务器介绍,2. 将请求传递给代理的服务器,3. 传递请求标头,4. 配置缓冲区,5. 选择传出IP地址本文介绍代理服务器的基本配置。 您将学习如何通过不同协议将NGINX请求传递给代理的服务器,修改发送到代理服务器的客户端请求标头,以及配置来自代理服务器的响应缓冲。 代理服务器的基本配置目录 代理服务器介绍 将请求传递给代理的服务器 传递请求标头 配置缓冲区 选择传出IP地址 1. 代理服务器介绍 代理通常用于在多个服务器之间分配负载,无缝地显示来自不同网站的内容,或者通过