我们正在尝试按照文档( https://docs.spring.io/spring-cloud-dataflow/docs/current-SNAPSHOT/reference/htmlsingle/#configuration-security )打开 Spring Cloud Data Flow 的安全性,但我们有一些我们无法填补的知识空白。
根据第 9.2 点,可以使用 OAuth 2.0 配置身份验证并将其与 SSO 集成。我们使用 RedHat SSO,因此我们正在尝试将两者集成,但我们无法使其正常工作,是否可能或使用的 SSO 存在限制?
根据文档,我们设置了这些属性:
- spring.security.oauth2.client.registration.uaa.client-id=xxxxxxx
- spring.security.oauth2.client.registration.uaa.client-secret=xxxxxx
- spring.security.oauth2.client.registration.uaa.redirect-uri='{baseUrl}/login/oauth2/code/{registrationId}'
- spring.security.oauth2.client.registration.uaa.authorization-grant-type=authorization_code
- spring.security.oauth2.client.registration.uaa.scope[0]=openid
- spring.security.oauth2.client.provider.uaa.jwk-set-uri=../openid-connect/certs
- spring.security.oauth2.client.provider.uaa.token-uri=../openid-connect/token
- spring.security.oauth2.client.provider.uaa.user-info-uri=../openid-connect/userinfo
- spring.security.oauth2.client.provider.uaa.user-name-attribute=user_name
- spring.security.oauth2.client.provider.uaa.authorization-uri=../openid-connect/auth
- spring.security.oauth2.resourceserver.opaquetoken.introspection-uri=../openid-connect/token/introspect
- spring.security.oauth2.resourceserver.opaquetoken.client-id=xxxxxxx
- spring.security.oauth2.resourceserver.opaquetoken.client-secret=xxxxxxx
所以我们有一些考虑:
- 令牌的自省需要属性resourceserver.opaquetoken,所以我们很确定当我们收到 REST 请求时它们是必需的,并且它必须具有授权标头
- 如果我们不使用 UAA,属性应该命名为uaa吗?
- 当我们尝试访问de UI时,它会重定向到authorization-uri,因为authorization-grant-type=authorization_code,所以它会登录SSO,对吗?
- 如果我们使用授权类型密码,它将直接请求用户名/密码进行登录,它在哪里验证?
- 用户信息 URI 是强制性的,但它真的被使用了吗?
- 其他 URI(jwk 和令牌)用于什么?
- 为什么重定向 URI 有这种格式?这些变量指向哪里?
最后,我们在 Docker 容器中运行的 SCDF 中测试了配置,但它“什么也没做”:
dataflow-server | DEBUG 1 --- [nio-9393-exec-1] org.apache.tomcat.util.http.Parameters : Set query string encoding to UTF-8
dataflow-server | DEBUG 1 --- [nio-9393-exec-1] o.a.t.util.http.Rfc6265CookieProcessor : Cookies: Parsing b[]: JSESSIONID=55694CBB4F694DD2E345AF61AF90B05D
dataflow-server | DEBUG 1 --- [nio-9393-exec-1] o.a.catalina.connector.CoyoteAdapter : Requested cookie session id is 55694CBB4F694DD2E345AF61AF90B05D
dataflow-server | DEBUG 1 --- [nio-9393-exec-1] o.a.c.authenticator.AuthenticatorBase : Security checking request POST /tasks/executions
dataflow-server | DEBUG 1 --- [nio-9393-exec-1] org.apache.catalina.realm.RealmBase : No applicable constraints defined
dataflow-server | DEBUG 1 --- [nio-9393-exec-1] o.a.c.a.jaspic.AuthConfigFactoryImpl : Loading persistent provider registrations from [/tmp/tomcat.1807897745863872641.9393/conf/jaspic-providers.xml]
dataflow-server | DEBUG 1 --- [nio-9393-exec-1] o.a.c.authenticator.AuthenticatorBase : Not subject to any constraint
dataflow-server | INFO 1 --- [nio-9393-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
dataflow-server | DEBUG 1 --- [nio-9393-exec-1] o.apache.catalina.core.StandardWrapper : Returning non-STM instance
dataflow-server | DEBUG 1 --- [nio-9393-exec-1] org.apache.tomcat.util.http.Parameters : Set encoding to UTF-8
dataflow-server | DEBUG 1 --- [nio-9393-exec-1] org.apache.tomcat.util.http.Parameters : Start processing with input [name=microapabatch&arguments=--my.arguments.sleep=2000+--my.arguments.forceFailure=false]
dataflow-server | TRACE 1 --- [nio-9393-exec-1] s.n.www.protocol.http.HttpURLConnection : ProxySelector Request for https://xxxxxxxxxxxxxxxxxxxxxxxx/openid-connect/token/introspect
dataflow-server | TRACE 1 --- [nio-9393-exec-1] s.n.www.protocol.http.HttpURLConnection : Looking for HttpClient for URL https://xxxxxxxxxxxxxxxxxxxxxxxx/openid-connect/token/introspect and proxy value of DIRECT
dataflow-server | TRACE 1 --- [nio-9393-exec-1] s.n.www.protocol.http.HttpURLConnection : Creating new HttpsClient with url:https://xxxxxxxxxxxxxxxxxxxxxxxx/openid-connect/token/introspect and proxy:DIRECT with connect timeout:-1
dataflow-server | TRACE 1 --- [nio-9393-exec-1] s.n.www.protocol.http.HttpURLConnection : Proxy used: DIRECT
dataflow-server | DEBUG 1 --- [nio-9393-exec-1] o.a.tomcat.util.net.SocketWrapperBase : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@1376a3b7:org.apache.tomcat.util.net.NioChannel@198ec8c7:java.nio.channels.SocketChannel[connected local=/172.18.0.4:9393 remote=/172.18.0.1:33758]], Read from buffer: [0]
dataflow-server | DEBUG 1 --- [nio-9393-exec-1] org.apache.tomcat.util.net.NioEndpoint : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@1376a3b7:org.apache.tomcat.util.net.NioChannel@198ec8c7:java.nio.channels.SocketChannel[connected local=/172.18.0.4:9393 remote=/172.18.0.1:33758]], Read direct from socket: [0]
dataflow-server | DEBUG 1 --- [nio-9393-exec-1] o.apache.coyote.http11.Http11Processor : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@1376a3b7:org.apache.tomcat.util.net.NioChannel@198ec8c7:java.nio.channels.SocketChannel[connected local=/172.18.0.4:9393 remote=/172.18.0.1:33758]], Status in: [OPEN_READ], State out: [OPEN]
dataflow-server | DEBUG 1 --- [nio-9393-exec-1] o.a.coyote.http11.Http11NioProtocol : Pushed Processor [org.apache.coyote.http11.Http11Processor@17492586]
dataflow-server | DEBUG 1 --- [nio-9393-exec-1] org.apache.tomcat.util.net.NioEndpoint : Registered read interest for [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@1376a3b7:org.apache.tomcat.util.net.NioChannel@198ec8c7:java.nio.channels.SocketChannel[connected local=/172.18.0.4:9393 remote=/172.18.0.1:33758]]
似乎问题出在'remote=/172.18.0.1:33758',但是我们无法解释如何在这个本地IP中转换自省uri。