这不是问题,而是有关我如何解决问题的报告。特别是重定向uri的问题使我有些头疼。
一段时间以来,我们正在开发一个使用Spring Security OAuth2来针对外部身份提供者对用户进行身份验证的应用程序。该应用程序部署在Kubernetes集群上,其入口将重写URL。
两个主要问题是
重定向网址。重定向网址需要考虑反向代理的路径]
如果应用程序不知道它在反向代理后面,则在检查重定向URL时会遇到问题。
应用程序-302-> idp redirecturl = ... / v2 /回调
idp -302->反向代理... / v2 /回调
反向代理->应用程序... /回调
Spring针对... /回调检查重定向URL ... / v2 /回调,并且验证失败,并带有[invalid_redirect_uri_parameter]
只有一个身份提供者,我们不想显示一个页面来选择身份提供者
设置看起来像这样:
入口
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: {{ .Chart.Name }}
namespace: {{ .Values.namespace }}
annotations:
kubernetes.io/ingress.class: "nginx"
# 1
nginx.ingress.kubernetes.io/affinity: cookie
nginx.ingress.kubernetes.io/session-cookie-path: /v2
nginx.ingress.kubernetes.io/affinity-mode: persistent
# 2
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: $1
# 3
nginx.ingress.kubernetes.io/x-forwarded-prefix: /v2
spec:
rules:
- host: {{ .Values.domain }}
http:
paths:
- path: "/v2(.*)"
backend:
serviceName: myService
servicePort: somePort
application.yml
server:
# 4
forward-headers-strategy: framework
spring:
security:
oauth2:
client:
registration:
myIdp:
client-authentication-method: basic
authorization-grant-type: authorization_code
# 5
redirect-uri: "{baseUrl}/oauth2/callback/code/{registrationId}"
scope:
- openid
- email
WebSecurityConfigurerAdapter
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers(securedPage)
.authenticated()
.oauth2Login()
// 6
.loginPage("/oauth2/authorization/myidp")
.redirectionEndpoint()
// 7
.baseUri("/oauth2/callback/code/myidp");
}
兴趣点
1)粘性会话,可将请求发送回正确的窗格
2)删除前缀的重写规则
3)注释,指示nginx添加x-forwarded-prefix标头
4)配置Spring Boot以处理反向代理标头
5)重定向URL需要考虑反向代理。在配置中,我们不需要关心。 Spring会自动执行此操作
6a),此配置阻止显示IDP选择,因为我们只有一个IDP,我们可以直接重定向到idp的授权端点。这是一种解决方法,将来可能会解决。
6b)另外,此配置还需要考虑反向代理,但是Spring也可以处理。
7)此处相同。没有反向代理路径
希望这对某人有帮助。
问题是答案(Q&A)