美好的一天。
我正在开发一个在某个端口下运行的spring-boot服务,比如说服务器中的主机名:8080。用户通过apache proxy,url.com/application
访问此服务现在配置了apache:
ProxyRequests Off
ProxyPreserveHost Off
ProxyPass /application http://hostname:8080
ProxyPassReverse /application http://hostname:8080
我使用oauth2进行身份验证,并在authserver.com中进行身份验证
Application.yml:
oauth2:
client:
clientId: username
clientSecret: 123123
accessTokenUri: http://authserver.com/oauth/token
userAuthorizationUri: http://authserver.com/oauth/authorize
clientAuthenticationScheme: form
resource:
userInfoUri: http://authserver.com/oauth/user
preferTokenInfo: false
如何修改Spring Boot配置中的redirect_url?它应该是url.com/application/login。
的pom.xml:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-ws</artifactId>
<version>1.3.0.M2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
</dependecies>
安全配置:
@EnableAutoConfiguration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public static class WebSecurityConfig extends OAuth2SsoConfiguration {
@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/health", "/status", "/ws", "/ws/*", "/mappings", "/beans")
.anonymous();
http.csrf().disable();
super.configure(http);
}
}
使用Spring Cloud Security 1.0.0.RC3
答案 0 :(得分:1)
请按this回答。它解决了我的一天。
1。您必须在Apache代理上设置标头:
<VirtualHost *:443>
ServerName www.myapp.org
ProxyPass / http://127.0.0.1:8080/
RequestHeader set X-Forwarded-Proto https
RequestHeader set X-Forwarded-Port 443
ProxyPreserveHost On
... (SSL directives omitted for readability)
</VirtualHost>
2。您必须告诉Spring Boot应用程序使用这些标头。所以在你的application.properties(或Spring Boots理解属性的任何其他地方)中添加以下行:
server.use-forward-headers=true
答案 1 :(得分:0)
来自OAuth2规范:
3.1.2。重定向端点
完成与资源所有者的交互后, 授权服务器将资源所有者的用户代理引导回 客户端。授权服务器将用户代理重定向到 客户端的重定向端点先前与之建立 客户端注册过程中或授权服务器 提出授权请求。
重定向端点URI必须是由...定义的绝对URI [RFC3986]第4.3节。端点URI可以包括 &#34;应用程序/ X WWW的窗体-urlencoded&#34;格式化(根据附录B)查询 组件([RFC3986]第3.4节),添加时必须保留 其他查询参数。端点URI绝不能包括 片段组件。
如何处理重定向有两个选项
通过将redirect_url传递到OAuth服务器authserver.com/oath/authorize?client_id=username&redirect_url=url.com/login
但触发此重定向的是url.com/application
。因此,您需要更改/配置url.com/application
以将请求重定向到authserver.com/oath/authorize?client_id=username&redirect_url=url.com/application/login
。
如果您在url.com/application
中使用spring security,请更改登录页面配置网址。
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/home").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("authserver.com/oath/authorize?client_id=username&redirect_url=url.com/application/login")
.permitAll()
.and()
.logout()
.permitAll();
}
由于您未显示您的应用程序代码,因此上述代码可能有效,也可能无效。