scdf2 uaa请求无法从登录重定向到仪表板

时间:2019-08-06 12:39:14

标签: spring-cloud-dataflow cloudfoundry-uaa

使用kubernetes部署程序,我无法使用scdf 2.1.2映像版本通过uaa服务安全性登录到scdf2。

我从uaa服务进入/ login和/ login?code = xxx循环,因为我认为scdf2无法获取“令牌”。.

过程:

1)首次启动uaa服务器。

使用以下配置运行到Pod k8s的uaa服务 [应用https://github.com/making/uaa-on-kubernetes/blob/master/k8s/uaa.yml]

它需要使用证书和密钥部署的机密。 当我创建了csr时,带有证书的CN值是“ uaa-service” 作为有效的主机名 然后,使用https和证书的uaa-service:

apiVersion: v1
kind: Service
metadata:
  name: uaa-service
  labels:
    app: uaa
spec:
  type: LoadBalancer
  ports:
  - port: 8443
    nodePort: 8443  
    name: uaa
  selector:
    app: uaa    
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: uaa
spec:
  replicas: 1
  selector:
    matchLabels:
      app: uaa
  template:
    metadata:
      labels:
        app: uaa
    spec:
      initContainers:
      - image: openjdk:8-jdk-slim
        name: pem-to-keystore
        volumeMounts:
        - name: keystore-volume
          mountPath: /keystores
        - name: uaa-tls
          mountPath: /uaa-tls
        command:          
        - sh
        - -c
        - |
          openssl pkcs12 -export \
                  -name uaa-tls \
                  -in /uaa-tls/tls.crt \
                  -inkey /uaa-tls/tls.key \
                  -out /keystores/uaa.p12 \
                  -password pass:foobar
          keytool -importkeystore \
                  -destkeystore /keystores/uaa.jks \
                  -srckeystore /keystores/uaa.p12 \
                  -deststoretype pkcs12 \
                  -srcstoretype pkcs12 \
                  -alias uaa-tls \
                  -deststorepass changeme \
                  -destkeypass changeme \
                  -srcstorepass foobar \
                  -srckeypass foobar \
                  -noprompt
      containers:
      - name: uaa
        image: making/uaa:4.13.0
        command:
        - sh
        - -c
        - |
          mv /usr/local/tomcat/webapps/uaa.war /usr/local/tomcat/webapps/ROOT.war 
          catalina.sh run
        ports:
        - containerPort: 8443
        volumeMounts:
        - name: uaa-config
          mountPath: /uaa
          readOnly: true
        - name: server-config
          mountPath: /usr/local/tomcat/conf/server.xml
          subPath: server.xml
          readOnly: true
        - name: keystore-volume
          mountPath: /keystores
          readOnly: true
        env:
        - name: _JAVA_OPTIONS
          value: "-Djava.security.policy=unlimited -Djava.security.egd=file:/dev/./urandom"
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8443
            scheme: HTTPS
          initialDelaySeconds: 90
          timeoutSeconds: 30
          failureThreshold: 50
          periodSeconds: 60
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8443
            scheme: HTTPS
          initialDelaySeconds: 90
          timeoutSeconds: 30
          periodSeconds: 60
          failureThreshold: 50
      volumes:
      - name: uaa-config
        configMap:
          name: uaa-config
          items:
          - key: uaa.yml
            path: uaa.yml
          - key: log4j.properties
            path: log4j.properties
      - name: server-config
        configMap:
          name: uaa-config
          items:
          - key: server.xml
            path: server.xml
      - name: keystore-volume
        emptyDir: {}
      - name: uaa-tls
        secret:
          secretName: uaa-tls
          # kubectl create secret tls uaa-tls --cert=uaa-service.crt --key=uaa-service.key
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: uaa-config
data:
  server.xml: |-
    <?xml version='1.0' encoding='utf-8'?>
    <Server port="-1">
      <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
      <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
      <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
      <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
      <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
      <Service name="Catalina">
        <Connector class="org.apache.coyote.http11.Http11NioProtocol" protocol="HTTP/1.1" connectionTimeout="20000"
                   scheme="https"
                   port="8443"
                   SSLEnabled="true"
                   sslEnabledProtocols="TLSv1.2"
                   ciphers="TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
                   secure="true"
                   clientAuth="false"
                   sslProtocol="TLS"
                   keystoreFile="/keystores/uaa.jks"
                   keystoreType="PKCS12"
                   keyAlias="uaa-tls"
                   keystorePass="changeme"
                   bindOnInit="false"/>
        <Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
                   connectionTimeout="20000"
                   port="8989"
                   address="127.0.0.1"
                   bindOnInit="true"/>
        <Engine name="Catalina" defaultHost="localhost">
          <Host name="localhost"
                appBase="webapps"
                unpackWARs="true"
                autoDeploy="false"
                failCtxIfServletStartFails="true">
            <Valve className="org.apache.catalina.valves.RemoteIpValve"
                   remoteIpHeader="x-forwarded-for"
                   protocolHeader="x-forwarded-proto"                   internalProxies="10\.\d{1,3}\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3}|169\.254\.\d{1,3}\.\d{1,3}|127\.\d{1,3}\.\d{1,3}\.\d{1,3}|172\.1[6-9]{1}\.\d{1,3}\.\d{1,3}|172\.2[0-9]{1}\.\d{1,3}\.\d{1,3}|172\.3[0-1]{1}\.\d{1,3}\.\d{1,3}"/>
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                   prefix="localhost_access" suffix=".log" rotatable="false" pattern="%h %l %u %t &quot;%r&quot; %s %b"/>
          </Host>
        </Engine>
      </Service>
    </Server>
  log4j.properties: |-
    PID=????
    log4j.rootCategory=INFO, CONSOLE
    log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
    log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
    log4j.appender.CONSOLE.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss.SSS}] uaa%X{context} - ${PID} [%t] .... %5p --- %c{1}: %m%n
    log4j.category.org.springframework.security=INFO
    log4j.category.org.cloudfoundry.identity=INFO
    log4j.category.org.springframework.jdbc=INFO
    log4j.category.org.apache.http.wire=INFO
  uaa.yml: |-
    logging:
      config: "/uaa/log4j.properties"
    require_https: true
    scim:
      groups:
        zones.read: Read identity zones
        zones.write: Create and update identity zones
        idps.read: Retrieve identity providers
        idps.write: Create and update identity providers
        clients.admin: Create, modify and delete OAuth clients
        clients.write: Create and modify OAuth clients
        clients.read: Read information about OAuth clients
        clients.secret: Change the password of an OAuth client
        scim.write: Create, modify and delete SCIM entities, i.e. users and groups
        scim.read: Read all SCIM entities, i.e. users and groups
        scim.create: Create users
        scim.userids: Read user IDs and retrieve users by ID
        scim.zones: Control a user's ability to manage a zone
        scim.invite: Send invitations to users
        password.write: Change your password
        oauth.approval: Manage approved scopes
        oauth.login: Authenticate users outside of the UAA
        openid: Access profile information, i.e. email, first and last name, and phone number
        groups.update: Update group information and memberships
        uaa.user: Act as a user in the UAA
        uaa.resource: Serve resources protected by the UAA
        uaa.admin: Act as an administrator throughout the UAA
        uaa.none: Forbid acting as a user
        uaa.offline_token: Allow offline access
    oauth:
      clients:
        uaa_admin:
          authorities: clients.read,clients.write,clients.secret,uaa.admin,scim.read,scim.write,password.write
          authorized-grant-types: client_credentials
          override: true
          scope: 'cloud_controller.read,cloud_controller.write,openid,password.write,scim.userids,dataflow.view,dataflow.create,dataflow.manage'
          secret: uaa_secret
          id: uaa_admin
      user:
        authorities:
          - openid
          - scim.me
          - cloud_controller.read
          - cloud_controller.write
          - cloud_controller_service_permissions.read
          - password.write
          - scim.userids
          - uaa.user
          - approvals.me
          - oauth.approvals
          - profile
          - roles
          - user_attributes
          - uaa.offline_token
    issuer:
      uri: https://uaa-service:8443
    login:
      url: https://uaa-service:8443
      entityBaseURL: https://uaa-service:8443
      entityID: cloudfoundry-saml-login
      saml:
        nameID: 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified'
        assertionConsumerIndex: 0
        signMetaData: true
        signRequest: true
        socket:
          connectionManagerTimeout: 10000
          soTimeout: 10000
      authorize:
        url: https://uaa-service:8443/oauth/authorize
    uaa:
      # The hostname of the UAA that this login server will connect to
      url: https://uaa-service:8443
      token:
        url: https://uaa-service:8443/oauth/token
      approvals:
        url: https://uaa-service:8443/approvals
      login:
        url: https://uaa-service:8443/authenticate
      limitedFunctionality:
        enabled: false
        whitelist:
          endpoints:
            - /oauth/authorize/**
            - /oauth/token/**
            - /check_token/**
            - /login/**
            - /login.do
            - /logout/**
            - /logout.do
            - /saml/**
            - /autologin/**
            - /authenticate/**
            - /idp_discovery/**
          methods:
            - GET
            - HEAD
            - OPTIONS


我认为要记住的重要价值观是(对saml存有疑问):

    issuer:
      uri: https://uaa-service:8443
    login:
      url: https://uaa-service:8443
      entityBaseURL: https://uaa-service:8443
      authorize:
        url: https://uaa-service:8443/oauth/authorize
    uaa:
      # The hostname of the UAA that this login server will connect to
      url: https://uaa-service:8443
      token:
        url: https://uaa-service:8443/oauth/token
      approvals:
        url: https://uaa-service:8443/approvals
      login:
        url: https://uaa-service:8443/authenticate

好,部署并运行Pod。记住8443来自uaa_services动作。

2) 升级用于用户管理员以及用户和角色映射的uaa配置。

因为我无法安装uaac gem,所以我使用uaac客户端运行docker imagen: docker run --rm -it cf-uaac bash 然后

>>>>  I need add the ip pod uaa-server to the docker image 
#echo "10.42.0.1   uaa-service" >> /etc/hosts  
#uaac --skip-ssl-validation   target https://uaa-service:8443
Unknown key: Max-Age = 86400
Target: http://uaa-service:8443
#uaac token client get uaa_admin  -s uaa_secret
Unknown key: Max-Age = 86400
Successfully fetched token via client credentials grant.
Target: http://uaa-service:8443
Context: uaa_admin, from client uaa_admin
>>>  Ok i got a uaa_admin token to create admin user, group etc ..
>>>  check token again is valid
# uaac token decode
Note: no key given to validate token signature
  jti: 8067e0122b20433ab817f684e7335d30
  sub: uaa_admin
  authorities: clients.read password.write clients.secret clients.write uaa.admin scim.write scim.read
  scope: clients.read password.write clients.secret clients.write uaa.admin scim.write scim.read
  client_id: uaa_admin
  cid: uaa_admin
  azp: uaa_admin
  grant_type: client_credentials
  rev_sig: 7216b9b8
  iat: 1565017183
  exp: 1565060383
  iss: http://uaa-service:8443/oauth/token
  zid: uaa
  aud: scim uaa_admin password clients uaa**
#uaac user add admin -p password --emails admin@mk.com
root@bf98436ccc82:/# uaac user add admin -p password --emails admin@mk.com
user account successfully added
root@bf98436ccc82:/# uaac user add user  -p password --emails user@mk.com
user account successfully added

=========================================================================================================================================
root@bf98436ccc82:/# uaac group add "dataflow.view"
  id: 9796f596-e540-4f3b-a32c-90b1bac5d0cc
  meta
    version: 0
    created: 2019-08-05T15:00:01.014Z
    lastmodified: 2019-08-05T15:00:01.014Z
  members:
  schemas: urn:scim:schemas:core:1.0
  displayname: dataflow.view
  zoneid: uaa
root@bf98436ccc82:/# uaac group add "dataflow.create"

  id: c798e762-bcae-4d1f-8eef-2f7083df2d45
  meta
    version: 0
    created: 2019-08-05T15:00:01.495Z
    lastmodified: 2019-08-05T15:00:01.495Z
  members:
  schemas: urn:scim:schemas:core:1.0
  displayname: dataflow.create
  zoneid: uaa
root@bf98436ccc82:/# uaac group add "dataflow.manage"
  id: 47aeba32-db27-456c-aa12-d5492127fe1f
  meta
    version: 0
    created: 2019-08-05T15:00:01.986Z
    lastmodified: 2019-08-05T15:00:01.986Z
  members:
  schemas: urn:scim:schemas:core:1.0
  displayname: dataflow.manage
  zoneid: uaa

=========================================================================================================================================
root@bf98436ccc82:/# uaac member add dataflow.view admin
success
root@bf98436ccc82:/# uaac member add dataflow.create admin
success
root@bf98436ccc82:/# uaac member add  dataflow.manage admin
success
=========================================================================================================================================
root@bf98436ccc82:/# uaac member add dataflow.view user
success
root@bf98436ccc82:/# uaac member add dataflow.create user
success
root@bf98436ccc82:/# uaac member add  dataflow.manage user
success

>>>  Now, mapping admin to dataflow uua client 
>>>  Important
>>>  The redirect url MUST THE SAME from http original request
>>>  scdf2-data-flow-skipper:8844 
>>>   this is my login uri to dashboard scdf2 
>>>  i can't get direct connect to pod ... ssh tunnels insteads ..

# uaac client add dataflow \
   --name dataflow \
   --scope cloud_controller.read,cloud_controller.write,openid,password.write,scim.userids,dataflow.view,dataflow.create,dataflow.manage \
   --authorized_grant_types password,authorization_code,client_credentials,refresh_token \
   --authorities uaa.resource \
   --redirect_uri  http://scdf2-data-flow-server:8844/login\
   --autoapprove openid \
   --secret dataflow


#uaac client add skipper \
   --name skipper \
   --scope cloud_controller.read,cloud_controller.write,openid,password.write,scim.userids,dataflow.view,dataflow.create,dataflow.manage \
   --authorized_grant_types password,authorization_code,client_credentials,refresh_token \
   --authorities uaa.resource \
   --redirect_uri http://scdf2-data-flow-skipper:8844/login \
   --autoapprove openid \
   --secret skipper

>>>> Using curl to get a valid token and check that uri's are ok

curl -k -v -d"username=admin&password=password&client_id=dataflow&grant_type=client_credentials" -u "dataflow:dataflow" https://uaa-service:8443/oauth/token                                * Expire in 0 ms for 6 (transfer 0x5632e4386dd0)

*   Trying 10.42.0.1...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x5632e4386dd0)
* Connected to uaa-service (10.42.0.1) port 8443 (#0)
* Server auth using Basic with user 'dataflow'
> POST /oauth/token HTTP/1.1
> Host: uaa-service:8443
> Authorization: Basic ZGF0YWZsb3c6ZGF0YWZsb3c=
> User-Agent: curl/7.64.0
> Accept: */*
> Content-Length: 81
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 81 out of 81 bytes
< HTTP/1.1 200
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: DENY
< X-Content-Type-Options: nosniff
< Cache-Control: no-store
< Pragma: no-cache
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Mon, 05 Aug 2019 15:02:21 GMT
<
* Connection #0 to host uaa-service left intact
{"access_token":"eyJhbGciOiJIUzI1NiIsImtpZCI6ImxlZ2FjeS10b2tlbi1rZXkiLCJ0eXAiOiJKV1QifQ.eyJqdGkiOiJlNmU3YzNiOWVkMmM0ZmI5ODQ5OWE3MmQ2N2EzMjMyYSIsInN1YiI6ImRhdGFmbG93IiwiYXV0aG9yaXRpZXMiOlsidWFhLnJlc291cmNlIl0sInNjb3BlIjpbInVhYS5yZXNvdXJjZSJdLCJjbGllbnRfaWQiOiJkYXRhZmxvdyIsImNpZCI6ImRhdGFmbG93IiwiYXpwIjoiZGF0YWZsb3ciLCJncmFudF90eXBlIjoiY2xpZW50X2NyZWRlbnRpYWxzIiwicmV2X3NpZyI6IjFkMmUwMjVjIiwiaWF0IjoxNTY1MDE3MzQxLCJleHAiOjE1NjUwNjA1NDEsImlzcyI6Imh0dHA6Ly91YWEtc2VydmljZTo4MDgwL29hdXRoL3Rva2VuIiwiemlkIjoidWFhIiwiYXVkIjpbImRhdGFmbG93IiwidWFhIl19.G2f8bIMbUWJOz8kcZYtU37yYhTtMOEJlsrvJFINnUjo","token_type":"bearer","expires_in":43199,"scope":"uaa.resource","jti":"e6e7c3b9ed2c4fb98499a72d67a3232a"}root@bf98436ccc82:/#

这时,看来uaa服务器运行正常,我可以从“泊坞窗”进程中获取...让我们继续使用pods ...

3)使用安全性uaa部署skipper和scdf2。

Skipper和scdf2使用相同的值进行部署(当然更改为client_ide值:

LOGGING_LEVEL_ROOT: DEBUG
KUBERNETES_NAMESPACE: (v1:metadata.namespace)
SERVER_PORT: 8080
SPRING_CLOUD_CONFIG_ENABLED: false
SPRING_CLOUD_DATAFLOW_FEATURES_ANALYTICS_ENABLED: false
SPRING_CLOUD_KUBERNETES_SECRETS_ENABLE_API: true
SPRING_CLOUD_DATAFLOW_FEATURES_SCHEDULES_ENABLED: true
SPRING_CLOUD_KUBERNETES_SECRETS_PATHS: /etc/secrets
SPRING_CLOUD_KUBERNETES_CONFIG_NAME: scdf2-data-flow-server
SPRING_CLOUD_SKIPPER_CLIENT_SERVER_URI: http://${SCDF2_DATA_FLOW_SKIPPER_SERVICE_HOST}/api
SPRING_CLOUD_DATAFLOW_SERVER_URI: http://${SCDF2_DATA_FLOW_SERVER_SERVICE_HOST}:${SCDF2_DATA_FLOW_SERVER_SERVICE_PORT}
SPRING_CLOUD_DATAFLOW_SECURITY_CF_USE_UAA: true
SECURITY_OAUTH2_CLIENT_CLIENT_ID: dataflow
SECURITY_OAUTH2_CLIENT_CLIENT_SECRET: dataflow
SECURITY_OAUTH2_CLIENT_SCOPE: openid
SPRING_CLOUD_DATAFLOW_SECURITY_AUTHORIZATION_MAP_OAUTH_SCOPES: true
SECURITY_OAUTH2_CLIENT_ACCESS_TOKEN_URI: https://uaa-service:8443/oauth/token
SECURITY_OAUTH2_CLIENT_USER_AUTHORIZATION_URI: https://uaa-service:8443/oauth/authorize
SECURITY_OAUTH2_RESOURCE_USER_INFO_URI: https://uaa-service:8443/userinfo
SECURITY_OAUTH2_RESOURCE_TOKEN_INFO_URI: https://uaa-service:8443/check_token
SPRING_APPLICATION_JSON: { "com.sun.net.ssl.checkRevocation": "false", "maven": { "local-repository": "myLocalrepoMK", "remote-repositories": { "mk-repository": {"url": "http://${NEXUS_SERVICE_HOST}:${NEXUS_SERVICE_PORT}/repository/maven-releases/","auth": {"username": "admin","password": "admin123"}},"spring-repo": {"url": "https://repo.spring.io/libs-release","auth": {"username": "","password": ""}},"spring-repo-snapshot": {"url": "https://repo.spring.io/libs-snapshot/","auth": {"username": "","password": ""}}}} }

Using 8443 as comunication between pod to pod ... 

船长和scdf2配置映射:

management:
  endpoints:
    web:
      base-path: /management
  security:
    roles: MANAGE
spring:
  cloud:
    dataflow:
      security:
        authorization:
          map-oauth-scopes: true                                 
          role-mappings:
            ROLE_CREATE: dataflow.create                          
            ROLE_DEPLOY: dataflow.deploy
            ROLE_DESTROY: dataflow.destoy
            ROLE_MANAGE: dataflow.manage
            ROLE_MODIFY: dataflow.modify
            ROLE_SCHEDULE: dataflow.schedule
            ROLE_VIEW: dataflow.view
          enabled: true
          rules:
            # About
            - GET    /about                          => hasRole('ROLE_VIEW')
            # Audit                
            - GET /audit-records                     => hasRole('ROLE_VIEW')
            - GET /audit-records/**                  => hasRole('ROLE_VIEW')                
            # Boot Endpoints                
            - GET /management/**                  => hasRole('ROLE_MANAGE')   

在这一点上,我认为为什么看不到定义的登录映射? 我部署了skipper和scdf2,第一个问题是所有运行状况过程都是returno 401 ..好的...让我们继续...

请求未在以下时间进行: http://scdf2-data-flow-server:8844/login?code=ETFX6qfQMw&state=Fudfts

不绕过scdf2的/ login页面并转到仪表板

请求挂起: http://scdf2-data-flow-server:8844/login&response_type=code&scope=openid&state=5HST0f

我认为UAA的所有过程都已终止,并重新定向以登录到scdf安全模型。

login and loop

但是,发生了什么事?

登录请求到达scdf2,scdf2将其检查到uaa一切正确,然后再次作为新请求处理到scdf2中,再将请求发送到uaa服务器...

然后,使用调试日志记录重新启动scdf ... 现在是请求:
GET /login?code=W7luipeEGG&state=7yiI9S HTTP/1.1 和记录:

2019-08-12 15:37:58.413 DEBUG 1 --- [nio-8080-exec-5] o.a.tomcat.util.net.SocketWrapperBase    : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@39c5463b:org.apache.tomcat.util.net.NioChannel@6160a9db:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:58562]], Read from buffer: [0]
2019-08-12 15:37:58.414 DEBUG 1 --- [nio-8080-exec-5] org.apache.tomcat.util.net.NioEndpoint   : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@39c5463b:org.apache.tomcat.util.net.NioChannel@6160a9db:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:58562]], Read direct from socket: [593]
2019-08-12 15:37:58.414 DEBUG 1 --- [nio-8080-exec-5] o.a.coyote.http11.Http11InputBuffer      : Received [GET /login?code=W7luipeEGG&state=7yiI9S HTTP/1.1
Host: scdf2-data-flow-server:8844
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36
DNT: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site: none
Accept-Encoding: gzip, deflate
Accept-Language: es-ES,es;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: JSESSIONID=077168452F9CCF4378715DC3FE20D4B2

]
2019-08-12 15:37:58.414 DEBUG 1 --- [nio-8080-exec-5] o.a.t.util.http.Rfc6265CookieProcessor   : Cookies: Parsing b[]: JSESSIONID=077168452F9CCF4378715DC3FE20D4B2
2019-08-12 15:37:58.414 DEBUG 1 --- [nio-8080-exec-5] o.a.catalina.connector.CoyoteAdapter     :  Requested cookie session id is 077168452F9CCF4378715DC3FE20D4B2
2019-08-12 15:37:58.414 DEBUG 1 --- [nio-8080-exec-5] o.a.c.authenticator.AuthenticatorBase    : Security checking request GET /login
2019-08-12 15:37:58.414 DEBUG 1 --- [nio-8080-exec-5] org.apache.catalina.realm.RealmBase      :   No applicable constraints defined
2019-08-12 15:37:58.414 DEBUG 1 --- [nio-8080-exec-5] o.a.c.authenticator.AuthenticatorBase    :  Not subject to any constraint
2019-08-12 15:37:58.415 DEBUG 1 --- [nio-8080-exec-5] org.apache.tomcat.util.http.Parameters   : Set encoding to UTF-8
2019-08-12 15:37:58.415 DEBUG 1 --- [nio-8080-exec-5] org.apache.tomcat.util.http.Parameters   : Decoding query null UTF-8
2019-08-12 15:37:58.416 DEBUG 1 --- [nio-8080-exec-5] org.apache.tomcat.util.http.Parameters   : Start processing with input [code=W7luipeEGG&state=7yiI9S]
2019-08-12 15:37:58.425 ERROR 1 --- [nio-8080-exec-5] o.s.c.c.s.OAuthSecurityConfiguration     : An error occurred while accessing an authentication REST resource.

但是使用调试错误,现在我可以看到:

019-08-12 15:37:58.416 DEBUG 1 --- [nio-8080-exec-5] org.apache.tomcat.util.http.Parameters   : Start processing with input [code=W7luipeEGG&state=7yiI9S]
2019-08-12 15:37:58.425 ERROR 1 --- [nio-8080-exec-5] o.s.c.c.s.OAuthSecurityConfiguration     : An error occurred while accessing an authentication REST resource.
org.springframework.security.authentication.BadCredentialsException: Could not obtain access token
      at org.springframework.security.oauth2.client.filter.OAuth2ClientAuthenticationProcessingFilter.attemptAuthentication(OAuth2ClientAuthenticationProcessingFilter.java:107)
        at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
        at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:158)
        at 
org.springframework.security.oauth2.client.filter.OAuth2ClientAuthenticationProcessingFilter.attemptAuthentication(OAuth2ClientAuthenticationProcessingFilter.java:105)
        ... 66 common frames omitted
Caused by: org.springframework.web.client.ResourceAccessException: I/O error on POST request for "https://uaa-service:8443/oauth/token": sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; nested exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:744)
        at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:691)
        at org.springframework.security.oauth2.client.token.OAuth2AccessTokenSupport.retrieveToken(OAuth2AccessTokenSupport.java:137)
        ... 72 common frames omitted
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
        at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1946)
        at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:316)
        at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:310)
        at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1639)
        at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:223)
        at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1037)
        at sun.security.ssl.Handshaker.process_record(Handshaker.java:965)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1064)
        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
               at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1621)
        ... 88 common frames omitted
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)
        at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)
        at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)
        at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:392)
        ... 94 common frames omitted
2019-08-12 15:37:58.426 DEBUG 1 --- [nio-8080-exec-5] o.a.c.c.C.[Tomcat].[localhost]           : Processing ErrorPage[errorCode=0, location=/error]
2019-08-12 15:37:58.427 DEBUG 1 --- [nio-8080-exec-5] o.a.c.c.C.[.[.[/].[dispatcherServlet]    :  Disabling the response for further output

好,现在我们得到了

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

jvm似乎需要更多信息到cacerts或类似物中...

然后,如何将新的cacert从uaa-server添加到scdf2的jvm?

这是开始使用scdf2 uaa的新步骤吗?

我在做什么错了?

我是否需要将uaa服务证书从运行的scdf2添加到pod jvm?

请帮助!!!

1 个答案:

答案 0 :(得分:0)

问题是,

在服务器部署中,我删除了以下配置:

#- name: SECURITY_OAUTH2_CLIENT_SCOPE
#  value: 'openid'

请勿在任何地方应用有关范围的任何配置参数。

因为,如果范围被省略或为空,则所有范围都将分配给客户端,并且无需确认第三方权限...

警告,您可以使用此配置将大量示例导入..测试吗?

不将关于uaa的任何配置应用到船长中。...仅将证书用于uaa到jks中