From b981dff2cbdb52def8a77a975f5e5a8f7ae60612 Mon Sep 17 00:00:00 2001 From: Gunnar Hillert Date: Thu, 20 Dec 2018 11:43:43 -1000 Subject: [PATCH] Add security-ldap-uaa example --- security-ldap-uaa-example/.gitignore | 25 + .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 47610 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 + security-ldap-uaa-example/LICENSE | 201 ++++++ security-ldap-uaa-example/README.adoc | 222 ++++++ security-ldap-uaa-example/dataflow.yml | 9 + .../images/composed-task-success.png | Bin 0 -> 79889 bytes security-ldap-uaa-example/mvnw | 225 ++++++ security-ldap-uaa-example/mvnw.cmd | 143 ++++ security-ldap-uaa-example/pom.xml | 94 +++ security-ldap-uaa-example/reload-user.sh | 8 + security-ldap-uaa-example/setup-uaa.sh | 30 + security-ldap-uaa-example/skipper.yml | 9 + .../ldapserver/LdapserverApplication.java | 53 ++ .../src/main/resources/testUsers.ldif | 157 ++++ .../LdapserverApplicationTests.java | 16 + security-ldap-uaa-example/uaa.yml | 673 ++++++++++++++++++ 17 files changed, 1866 insertions(+) create mode 100644 security-ldap-uaa-example/.gitignore create mode 100644 security-ldap-uaa-example/.mvn/wrapper/maven-wrapper.jar create mode 100644 security-ldap-uaa-example/.mvn/wrapper/maven-wrapper.properties create mode 100644 security-ldap-uaa-example/LICENSE create mode 100644 security-ldap-uaa-example/README.adoc create mode 100644 security-ldap-uaa-example/dataflow.yml create mode 100644 security-ldap-uaa-example/images/composed-task-success.png create mode 100755 security-ldap-uaa-example/mvnw create mode 100644 security-ldap-uaa-example/mvnw.cmd create mode 100644 security-ldap-uaa-example/pom.xml create mode 100755 security-ldap-uaa-example/reload-user.sh create mode 100755 security-ldap-uaa-example/setup-uaa.sh create mode 100644 security-ldap-uaa-example/skipper.yml create mode 100644 security-ldap-uaa-example/src/main/java/com/hillert/scdf/ldapserver/LdapserverApplication.java create mode 100644 security-ldap-uaa-example/src/main/resources/testUsers.ldif create mode 100644 security-ldap-uaa-example/src/test/java/com/hillert/scdf/ldapserver/LdapserverApplicationTests.java create mode 100755 security-ldap-uaa-example/uaa.yml diff --git a/security-ldap-uaa-example/.gitignore b/security-ldap-uaa-example/.gitignore new file mode 100644 index 0000000..82eca33 --- /dev/null +++ b/security-ldap-uaa-example/.gitignore @@ -0,0 +1,25 @@ +/target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/build/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ \ No newline at end of file diff --git a/security-ldap-uaa-example/.mvn/wrapper/maven-wrapper.jar b/security-ldap-uaa-example/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..9cc84ea9b4d95453115d0c26488d6a78694e0bc6 GIT binary patch literal 47610 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 literal 0 HcmV?d00001 diff --git a/security-ldap-uaa-example/.mvn/wrapper/maven-wrapper.properties b/security-ldap-uaa-example/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..6c8c0e0 --- /dev/null +++ b/security-ldap-uaa-example/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.4/apache-maven-3.5.4-bin.zip diff --git a/security-ldap-uaa-example/LICENSE b/security-ldap-uaa-example/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/security-ldap-uaa-example/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/security-ldap-uaa-example/README.adoc b/security-ldap-uaa-example/README.adoc new file mode 100644 index 0000000..2735102 --- /dev/null +++ b/security-ldap-uaa-example/README.adoc @@ -0,0 +1,222 @@ += LDAP Security and UAA Example + +This example provides an example on running +Spring Cloud Data Flow with a https://github.com/cloudfoundry/uaa[CloudFoundry User Account and Authentication (UAA) Server] (UAA) backed by _Lightweight Directory Access Protocol_ (LDAP) security. + +This repository provides an embedded LDAP server, powered by +https://directory.apache.org/[Apache Directory Server] (ApacheDS) and Spring Boot, running on *port 40000* +with pre-configured users. In this example we will use 2 users. + +First user with all roles: + +- username: marlene +- password: supersecret +- assigned LDAP groups: *view*, *create*, *manage* + +Second user with view and manage roles only: + +- username: joe +- password: joespassword +- assigned LDAP groups: *view*, *manage* + +In order to get everything running we need to setup the following server instances: + +* LDAP Server (port `40000`) +* UAA Server (port `8080`) +* Spring Cloud Skipper (secured by UAA, port `7577`) +* Spring Cloud Data Flow (secured by UAA, port `9393`) + +== Build + Start LDAP Server + +* Java 8 +* https://git-scm.com/[Git] +* https://github.com/cloudfoundry/cf-uaac[CloudFoundry UAA Command Line Client] (UACC) + +== Build + Start LDAP Server + +[source,bash] +---- +$ git clone https://github.com/ghillert/ldap-uaa-example.git +$ cd ldap-uaa-example +$ ./mwnw clean package +$ java -jar target/ldapserver-uaa-1.0.0.BUILD-SNAPSHOT.jar +---- + +== Download + Start UAA Server + +Since by default the UAA Server is available as a war file only, we will +use a custom Spring Boot based version that wraps the UAA war file but makes +for an easier startup experience: + +[source,bash] +---- +$ git clone https://github.com/ghillert/uaa-bundled.git +$ cd uaa-bundled +$ export CLOUD_FOUNDRY_CONFIG_PATH=/path/to/dev/ldap-uaa-example +$ ./mwnw clean package +$ java -jar target/uaa-bundled-1.0.0.BUILD-SNAPSHOT.jar +---- + +== Prepare UAA Server + +Simply execute the BASH script `./setup-uaa.sh`. It will execute the following +commands: + +[source,bash] +---- +uaac token client get admin -s adminsecret + +uaac group add "dataflow.view" +uaac group add "dataflow.create" +uaac group add "dataflow.manage" + +uaac group map "cn=view,ou=groups,dc=springframework,dc=org" --name="dataflow.view" --origin=ldap +uaac group map "cn=create,ou=groups,dc=springframework,dc=org" --name="dataflow.create" --origin=ldap +uaac group map "cn=manage,ou=groups,dc=springframework,dc=org" --name="dataflow.manage" --origin=ldap + +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://localhost:9393/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://localhost:7577/login \ + --autoapprove openid \ + --secret skipper \ +---- + +== Quick Test Using Curl + +[source,bash] +---- +$ curl -v -d"username=marlene&password=supersecret&client_id=dataflow&grant_type=password" -u "dataflow:dataflow" http://localhost:8080/uaa/oauth/token + +$ curl -v -d"username=joe&password=joespassword&client_id=skipper&grant_type=password" -u "skipper:skipper" http://localhost:8080/uaa/oauth/token +---- + +This should yield output similar to the following: + +[source,bash] +---- +* Trying ::1... +* TCP_NODELAY set +* Connected to localhost (::1) port 8080 (#0) +* Server auth using Basic with user 'dataflow' +> POST /uaa/oauth/token HTTP/1.1 +> Host: localhost:8080 +> Authorization: Basic ZGF0YWZsb3c6ZGF0YWZsb3c= +> User-Agent: curl/7.54.0 +> Accept: */* +> Content-Length: 76 +> Content-Type: application/x-www-form-urlencoded +> +* upload completely sent off: 76 out of 76 bytes +< HTTP/1.1 200 +< Cache-Control: no-store +< Pragma: no-cache +< X-XSS-Protection: 1; mode=block +< X-Frame-Options: DENY +< X-Content-Type-Options: nosniff +< Content-Type: application/json;charset=UTF-8 +< Transfer-Encoding: chunked +< Date: Thu, 20 Dec 2018 20:09:27 GMT +< +* Connection #0 to host localhost left intact +{"access_token":"eyJhbGciOiJSUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJrZXktaWQtMSIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI2MjQxMTIwNDc1YTA0NzZmYjhmMmQwZWJmOGZhNmJmZSIsInN1YiI6IjMyMTMzMmExLTZmZjAtNGQ1Yy1hYjMzLTE3YzIzYjk4MzcxNSIsInNjb3BlIjpbImRhdGFmbG93LnZpZXciLCJzY2ltLnVzZXJpZHMiLCJvcGVuaWQiLCJjbG91ZF9jb250cm9sbGVyLnJlYWQiLCJwYXNzd29yZC53cml0ZSIsImRhdGFmbG93Lm1hbmFnZSIsImNsb3VkX2NvbnRyb2xsZXIud3JpdGUiLCJkYXRhZmxvdy5jcmVhdGUiXSwiY2xpZW50X2lkIjoiZGF0YWZsb3ciLCJjaWQiOiJkYXRhZmxvdyIsImF6cCI6ImRhdGFmbG93IiwiZ3JhbnRfdHlwZSI6InBhc3N3b3JkIiwidXNlcl9pZCI6IjMyMTMzMmExLTZmZjAtNGQ1Yy1hYjMzLTE3YzIzYjk4MzcxNSIsIm9yaWdpbiI6ImxkYXAiLCJ1c2VyX25hbWUiOiJtYXJsZW5lIiwiZW1haWwiOiJtYXJsZW5lQHVzZXIuZnJvbS5sZGFwLmNmIiwiYXV0aF90aW1lIjoxNTQ1MzM2NTY3LCJyZXZfc2lnIjoiZjg3NjU2MTUiLCJpYXQiOjE1NDUzMzY1NjcsImV4cCI6MTU0NTM0MDE2NywiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3VhYS9vYXV0aC90b2tlbiIsInppZCI6InVhYSIsImF1ZCI6WyJzY2ltIiwiY2xvdWRfY29udHJvbGxlciIsInBhc3N3b3JkIiwiZGF0YWZsb3ciLCJvcGVuaWQiXX0.OrV_UzlfGtv5ME6jgp0Xg_DKptUXyCalV7yNlUL0PxYonECJsfej1yzG3twIBuNJ8LGvNAkUIhIokdbBsRx1bVnn-tudaRxahihZDgbrOBOeTsG6MOOK8DrwyNqI9QksuPseh2IaQ8Q0RaPkwLTa_tmNJvZYpYmVaGSImhNsSvYnmVuxFXLALy0XhkLMhSf_ViTbA9-uyYw8n7u9Gsb46_pU3uGKUh-mSA4dETZvXqjFIalV07BBFJj0NhQ7jQPn3URRkKBULQVga1GWBuQkw18jwOF8Q6PA1ENmOOO6PJfqGJUXV0sCWDUC0TQhYSxLbpDodQOwAHVoqJ2M0lD78g","token_type":"bearer","id_token":"eyJhbGciOiJSUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJrZXktaWQtMSIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIzMjEzMzJhMS02ZmYwLTRkNWMtYWIzMy0xN2MyM2I5ODM3MTUiLCJhdWQiOlsiZGF0YWZsb3ciXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3VhYS9vYXV0aC90b2tlbiIsImV4cCI6MTU0NTM0MDE2NywiaWF0IjoxNTQ1MzM2NTY3LCJhbXIiOlsiZXh0IiwicHdkIl0sImF6cCI6ImRhdGFmbG93Iiwic2NvcGUiOlsib3BlbmlkIl0sImVtYWlsIjoibWFybGVuZUB1c2VyLmZyb20ubGRhcC5jZiIsInppZCI6InVhYSIsIm9yaWdpbiI6ImxkYXAiLCJqdGkiOiI2MjQxMTIwNDc1YTA0NzZmYjhmMmQwZWJmOGZhNmJmZSIsInByZXZpb3VzX2xvZ29uX3RpbWUiOjE1NDUzMzQyMTY1MzYsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiY2xpZW50X2lkIjoiZGF0YWZsb3ciLCJjaWQiOiJkYXRhZmxvdyIsImdyYW50X3R5cGUiOiJwYXNzd29yZCIsInVzZXJfbmFtZSI6Im1hcmxlbmUiLCJyZXZfc2lnIjoiZjg3NjU2MTUiLCJ1c2VyX2lkIjoiMzIxMzMyYTEtNmZmMC00ZDVjLWFiMzMtMTdjMjNiOTgzNzE1IiwiYXV0aF90aW1lIjoxNTQ1MzM2NTY3fQ.JOa9oNiMKIu-bE0C9su2Kaw-Mbl8Pr6r-ALFfMIvFS_iaI9c5_OIrE-wNAFjtPhGvQkVoLL2d_fSdgtv5GyjWIJ0pCjZb-VJdX2AGauNynnumsR7ct6F6nI9CGrTtCS2Khe6Tp54Nu1wxumk09jd42CaPXA1S2pmUcudQBZEa8AELpESjnjnwOYEbPiKba03cnacGJvqPtbMl3jfWGRMmGqxQEM0A-5CKCqQpMzhkAeokUkPnirVOuNsQHQXNERy1gygO7fji9nReRaOiaFKNYL9aS-hKjY_i3uuAawvY_qpe5qRZ3-xCEesi-TqOItqy2I3BBREDp99t9cfAr2UXQ","expires_in":3599,"scope":"dataflow.view scim.userids openid cloud_controller.read password.write dataflow.manage cloud_controller.write dataflow.create","jti":"6241120475a0476fb8f2d0ebf8fa6bfe"} +---- + +== Download + Start Spring Cloud Skipper + +[source,bash] +---- +$ wget http://repo.spring.io/snapshot/org/springframework/cloud/spring-cloud-skipper-server/2.0.0.BUILD-SNAPSHOT/spring-cloud-skipper-server-2.0.0.BUILD-SNAPSHOT.jar +$ java -jar spring-cloud-skipper-server-2.0.0.BUILD-SNAPSHOT.jar \ + --spring.config.additional-location=/path/to/ldap-uaa-example/skipper.yml +---- + +== Download + Start Spring Cloud Data Flow + +[source,bash] +---- +$ wget https://repo.spring.io/milestone/org/springframework/cloud/spring-cloud-dataflow-server-local/2.0.0.BUILD-SNAPSHOT/spring-cloud-dataflow-server-local-2.0.0.BUILD-SNAPSHOT.jar +$ wget https://repo.spring.io/milestone/org/springframework/cloud/spring-cloud-dataflow-shell/2.0.0.BUILD-SNAPSHOT/spring-cloud-dataflow-shell-2.0.0.BUILD-SNAPSHOT.jar +$ java -jar spring-cloud-dataflow-server-local-2.0.0.BUILD-SNAPSHOT.jar --spring.config.additional-location=/path/to/ldap-uaa-example/dataflow.yml +---- + +== Helper Utility + +In case you want to experiment with LDAP users and make changes to them, be aware +that users are cached in UAA. In that case you can use the following helper BASH script +that will reload the user and display the UAA data as well: + +[source,bash] +---- +$ ./reload-user.sh +---- + +== Configure and run a Composed Task + +First start the Spring Cloud Data Flow Shell: + +[source,bash] +---- +$ java -jar spring-cloud-dataflow-shell-2.0.0.BUILD-SNAPSHOT.jar --dataflow.username=marlene --dataflow.password=supersecret +---- + +Now we need to import the Composed Task Runner and the Spring Cloud Task App Starters: + +[source,bash] +---- +dataflow:> app import http://bit.ly/Dearborn-GA-task-applications-maven +---- + +If you want to import _just_ the Composed Task Runner applications: + +[source,bash] +---- +dataflow:> app register --name composed-task-runner --type task --uri maven://org.springframework.cloud.task.app:composedtaskrunner-task:2.0.0.RELEASE +---- + +It is important that use the latest task app starters, so we end up having at +least _Composed Task Runner_ version `2.0.0.RELEASE`. The earlier versions +had [short-comings](https://github.com/spring-cloud-task-app-starters/composed-task-runner/issues/41) +in regards to security. Therefore, don't use the app starters from the *Clark* +release train. + +Create + Run the Composed Task: + +[source,bash] +---- +dataflow:> task create my-composed-task --definition "timestamp && timestamp-batch" +dataflow:> task launch my-composed-task --arguments "--dataflow-server-username=marlene --dataflow-server-password=supersecret" +---- + +This should execute the composed task successfully and yield task executions that look +similar to the following: + +[source,bash] +---- +dataflow:>task execution list +╔════════════════════════════════╤══╤════════════════════════════╤════════════════════════════╤═════════╗ +║ Task Name │ID│ Start Time │ End Time │Exit Code║ +╠════════════════════════════════╪══╪════════════════════════════╪════════════════════════════╪═════════╣ +║my-composed-task-timestamp-batch│3 │Thu Dec 20 09:30:41 HST 2018│Thu Dec 20 09:30:41 HST 2018│0 ║ +║my-composed-task-timestamp │2 │Thu Dec 20 09:30:26 HST 2018│Thu Dec 20 09:30:26 HST 2018│0 ║ +║my-composed-task │1 │Thu Dec 20 09:30:18 HST 2018│Thu Dec 20 09:30:47 HST 2018│0 ║ +╚════════════════════════════════╧══╧════════════════════════════╧════════════════════════════╧═════════╝ + +dataflow:> +---- + +Using the Dashboard, you should see task execution similar to these: + +image::images/composed-task-success.png[Dashboard successful task executions] + diff --git a/security-ldap-uaa-example/dataflow.yml b/security-ldap-uaa-example/dataflow.yml new file mode 100644 index 0000000..32a7933 --- /dev/null +++ b/security-ldap-uaa-example/dataflow.yml @@ -0,0 +1,9 @@ +security: + oauth2: + client: + client-id: dataflow + client-secret: dataflow + access-token-uri: http://dataflow.local:8080/uaa/oauth/token + user-authorization-uri: http://dataflow.local:8080/uaa/oauth/authorize + resource: + user-info-uri: http://dataflow.local:8080/uaa/userinfo \ No newline at end of file diff --git a/security-ldap-uaa-example/images/composed-task-success.png b/security-ldap-uaa-example/images/composed-task-success.png new file mode 100644 index 0000000000000000000000000000000000000000..4fa48c36d73b8118fa1a8effe2ffc53497f17ab3 GIT binary patch literal 79889 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 v^E$;GzhTLYqbiCB3H?uP#TL~j6qyZ \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Migwn, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +echo $MAVEN_PROJECTBASEDIR +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/security-ldap-uaa-example/mvnw.cmd b/security-ldap-uaa-example/mvnw.cmd new file mode 100644 index 0000000..019bd74 --- /dev/null +++ b/security-ldap-uaa-example/mvnw.cmd @@ -0,0 +1,143 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" + +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/security-ldap-uaa-example/pom.xml b/security-ldap-uaa-example/pom.xml new file mode 100644 index 0000000..e97958f --- /dev/null +++ b/security-ldap-uaa-example/pom.xml @@ -0,0 +1,94 @@ + + + 4.0.0 + + com.hillert.scdf + ldapserver-uaa + 1.0.0.BUILD-SNAPSHOT + jar + + ldapserver + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 2.1.0.RC1 + + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-test + test + + + org.apache.directory.server + apacheds-protocol-ldap + 1.5.5 + + + org.springframework.security + spring-security-ldap + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + diff --git a/security-ldap-uaa-example/reload-user.sh b/security-ldap-uaa-example/reload-user.sh new file mode 100755 index 0000000..2b11035 --- /dev/null +++ b/security-ldap-uaa-example/reload-user.sh @@ -0,0 +1,8 @@ +#!/bin/bash +username="$1" +password="$2" +uaac token delete --all +uaac target http://localhost:8080/uaa +uaac token owner get cf $username -s "" -p $password +uaac token client get admin -s adminsecret +uaac user get $username diff --git a/security-ldap-uaa-example/setup-uaa.sh b/security-ldap-uaa-example/setup-uaa.sh new file mode 100755 index 0000000..218906d --- /dev/null +++ b/security-ldap-uaa-example/setup-uaa.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +uaac token client get admin -s adminsecret + +uaac group add "dataflow.view" +uaac group add "dataflow.create" +uaac group add "dataflow.manage" + +uaac group map "cn=view,ou=groups,dc=springframework,dc=org" --name="dataflow.view" --origin=ldap +uaac group map "cn=create,ou=groups,dc=springframework,dc=org" --name="dataflow.create" --origin=ldap +uaac group map "cn=manage,ou=groups,dc=springframework,dc=org" --name="dataflow.manage" --origin=ldap + +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://localhost:9393/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://localhost:7577/login \ + --autoapprove openid \ + --secret skipper \ + diff --git a/security-ldap-uaa-example/skipper.yml b/security-ldap-uaa-example/skipper.yml new file mode 100644 index 0000000..abbf7ab --- /dev/null +++ b/security-ldap-uaa-example/skipper.yml @@ -0,0 +1,9 @@ +security: + oauth2: + client: + client-id: test + client-secret: test + access-token-uri: http://dataflow.local:8080/uaa/oauth/token + user-authorization-uri: http://dataflow.local:8080/uaa/oauth/authorize + resource: + user-info-uri: http://dataflow.local:8080/uaa/userinfo \ No newline at end of file diff --git a/security-ldap-uaa-example/src/main/java/com/hillert/scdf/ldapserver/LdapserverApplication.java b/security-ldap-uaa-example/src/main/java/com/hillert/scdf/ldapserver/LdapserverApplication.java new file mode 100644 index 0000000..5567ff3 --- /dev/null +++ b/security-ldap-uaa-example/src/main/java/com/hillert/scdf/ldapserver/LdapserverApplication.java @@ -0,0 +1,53 @@ +/* + * Copyright 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hillert.scdf.ldapserver; + +import java.io.File; +import java.nio.file.Files; +import java.util.UUID; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.security.ldap.server.ApacheDSContainer; + +/** + * + * @author Gunnar Hillert + * + */ +@SpringBootApplication +public class LdapserverApplication { + + public static void main(String[] args) throws Throwable { + SpringApplication.run(LdapserverApplication.class, args); + } + + @Bean + public ApacheDSContainer apacheDSContainer() throws Exception { + final File temporaryFolder = Files.createTempDirectory("ldap_server").toFile(); + final String ldapFileName = "testUsers.ldif"; + + ApacheDSContainer apacheDSContainer = new ApacheDSContainer("dc=springframework,dc=org", + "classpath:" + ldapFileName); + + apacheDSContainer.setPort(40000); + final File workingDir = new File(temporaryFolder, UUID.randomUUID().toString()); + apacheDSContainer.setWorkingDirectory(workingDir); + return apacheDSContainer; + } +} diff --git a/security-ldap-uaa-example/src/main/resources/testUsers.ldif b/security-ldap-uaa-example/src/main/resources/testUsers.ldif new file mode 100644 index 0000000..80697ba --- /dev/null +++ b/security-ldap-uaa-example/src/main/resources/testUsers.ldif @@ -0,0 +1,157 @@ +dn: ou=groups,dc=springframework,dc=org +objectclass: top +objectclass: organizationalUnit +ou: groups + +dn: ou=subgroups,ou=groups,dc=springframework,dc=org +objectclass: top +objectclass: organizationalUnit +ou: subgroups + +dn: ou=people,dc=springframework,dc=org +objectclass: top +objectclass: organizationalUnit +ou: people + +dn: ou=space cadets,dc=springframework,dc=org +objectclass: top +objectclass: organizationalUnit +ou: space cadets + +dn: ou=\"quoted people\",dc=springframework,dc=org +objectclass: top +objectclass: organizationalUnit +ou: "quoted people" + +dn: ou=otherpeople,dc=springframework,dc=org +objectclass: top +objectclass: organizationalUnit +ou: otherpeople + +dn: uid=ben,ou=people,dc=springframework,dc=org +objectclass: top +objectclass: person +objectclass: organizationalPerson +objectclass: inetOrgPerson +cn: Ben Alex +sn: Alex +uid: ben +userPassword: {SHA}nFCebWjxfaLbHHG1Qk5UU4trbvQ= + +dn: uid=leah,ou=people,dc=springframework,dc=org +objectclass: top +objectclass: person +objectclass: organizationalPerson +objectclass: inetOrgPerson +cn: Leah Berlin +sn: Berlin +uid: leah +userPassword: leahberlin + +dn: uid=marlene,ou=otherpeople,dc=springframework,dc=org +objectclass: top +objectclass: person +objectclass: organizationalPerson +objectclass: inetOrgPerson +cn: Marlene Dietrich +sn: Dietrich +uid: marlene +userPassword: supersecret + +dn: uid=joe,ou=otherpeople,dc=springframework,dc=org +objectclass: top +objectclass: person +objectclass: organizationalPerson +objectclass: inetOrgPerson +cn: Joe Schmidt +sn: Schmidt +uid: joe +userPassword: joespassword + +dn: cn=mouse\, jerry,ou=people,dc=springframework,dc=org +objectclass: top +objectclass: person +objectclass: organizationalPerson +objectclass: inetOrgPerson +cn: Mouse, Jerry +sn: Mouse +uid: jerry +userPassword: jerryspassword + +dn: cn=slash/guy,ou=people,dc=springframework,dc=org +objectclass: top +objectclass: person +objectclass: organizationalPerson +objectclass: inetOrgPerson +cn: slash/guy +sn: Slash +uid: slashguy +userPassword: slashguyspassword + +dn: cn=quote\"guy,ou=\"quoted people\",dc=springframework,dc=org +objectclass: top +objectclass: person +objectclass: organizationalPerson +objectclass: inetOrgPerson +cn: quote\"guy +sn: Quote +uid: quoteguy +userPassword: quoteguyspassword + +dn: uid=space cadet,ou=space cadets,dc=springframework,dc=org +objectclass: top +objectclass: person +objectclass: organizationalPerson +objectclass: inetOrgPerson +cn: Space Cadet +sn: Cadet +uid: space cadet +userPassword: spacecadetspassword + + + +dn: cn=developers,ou=groups,dc=springframework,dc=org +objectclass: top +objectclass: groupOfNames +cn: developers +ou: developer +member: uid=ben,ou=people,dc=springframework,dc=org +member: uid=leah,ou=people,dc=springframework,dc=org + +dn: cn=view,ou=groups,dc=springframework,dc=org +objectclass: top +objectclass: groupOfNames +cn: view +ou: view +member: uid=joe,ou=otherpeople,dc=springframework,dc=org +member: uid=marlene,ou=otherpeople,dc=springframework,dc=org + +dn: cn=create,ou=groups,dc=springframework,dc=org +objectclass: top +objectclass: groupOfNames +cn: create +ou: create +member: uid=marlene,ou=otherpeople,dc=springframework,dc=org + +dn: cn=manage,ou=groups,dc=springframework,dc=org +objectclass: top +objectclass: groupOfNames +cn: manage +ou: manage +member: uid=joe,ou=otherpeople,dc=springframework,dc=org +member: uid=marlene,ou=otherpeople,dc=springframework,dc=org + +dn: cn=managers,ou=groups,dc=springframework,dc=org +objectclass: top +objectclass: groupOfNames +cn: manager +ou: manager +member: uid=ben,ou=people,dc=springframework,dc=org +member: cn=mouse\, jerry,ou=people,dc=springframework,dc=org + +dn: cn=submanagers,ou=subgroups,ou=groups,dc=springframework,dc=org +objectclass: top +objectclass: groupOfNames +cn: submanagers +ou: submanager +member: uid=ben,ou=people,dc=springframework,dc=org diff --git a/security-ldap-uaa-example/src/test/java/com/hillert/scdf/ldapserver/LdapserverApplicationTests.java b/security-ldap-uaa-example/src/test/java/com/hillert/scdf/ldapserver/LdapserverApplicationTests.java new file mode 100644 index 0000000..09981ca --- /dev/null +++ b/security-ldap-uaa-example/src/test/java/com/hillert/scdf/ldapserver/LdapserverApplicationTests.java @@ -0,0 +1,16 @@ +package com.hillert.scdf.ldapserver; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class LdapserverApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/security-ldap-uaa-example/uaa.yml b/security-ldap-uaa-example/uaa.yml new file mode 100755 index 0000000..e4bd234 --- /dev/null +++ b/security-ldap-uaa-example/uaa.yml @@ -0,0 +1,673 @@ +# Configuration in this file is overridden by an external file +# if any of these exist: +# [$UAA_CONFIG_URL, $UAA_CONFIG_PATH/uaa.yml, $CLOUD_FOUNDRY_CONFIG_PATH/uaa.yml] + +#spring_profiles: mysql,default,ldap +#spring_profiles: postgresql,default +spring_profiles: ldap,default,hsqldb +#spring_profiles: saml +#spring_profiles: keystone,default,hsqldb + +#database: +# driverClassName: org.postgresql.Driver +# url: jdbc:postgresql:uaa +# username: pivotal +# password: +# maxactive: 100 +# maxidle: 10 +# minidle: 3 +# removeabandoned: false +# logabandoned: true +# abandonedtimeout: 300 +# evictionintervalms: 15000 +# caseinsensitive: false + +#note - this is not the place to set these properties +# - they are just here for documentation purposes +#database.driverClassName: org.postgresql.Driver +#database.url: jdbc:postgresql:uaa +#database.username: root +#database.password: changeme + +#MS SQL Server Install https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-ubuntu +#sqlserver commands are (first command is to allow contained user authentication for a DB +#sp_configure 'contained database authentication', 1 +#go +#RECONFIGURE +#go +#CREATE DATABASE uaa CONTAINMENT = PARTIAL; +#go +#USE uaa; +#go +#CREATE USER root WITH PASSWORD = 'changemeCHANGEME1234!'; +#go +#EXEC sp_addrolemember N'db_owner', N'root'; +#go + + +#postgresql commands that were run were +#create database uaa; +#create user root with superuser password 'changeme'; + +#database: +# driverClassName: org.mariadb.jdbc.Driver +# url: jdbc:mysql://localhost:3306/uaa +# username: root +# password: blabla + +#mysql commands that were run +#create database uaa; +#SET PASSWORD FOR 'root'@'localhost' = PASSWORD('changeme'); +#CREATE USER 'root'@'127.0.0.1'; +#GRANT ALL TO 'root'@'127.0.0.1' WITH GRANT OPTION; +#SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('changeme'); + +# A comprehensive list of hostnames routed to the UAA default zone. The UAA uses this to resolve subdomains for Identity Zones. +# Defaults to 'localhost' +#zones: +# internal: +# hostnames: +# - host1.domain.com +# - host2 +# - testzone3.localhost +# - testzone4.localhost + +#authentication: +# policy: +# lockoutAfterFailures: 5 +# countFailuresWithinSeconds: 3600 +# lockoutPeriodSeconds: 600 + +# Set this property to true for disabling authentication via the internal IDP. Defaults to false. +#disableInternalAuth: false + +# Set this property to true for disabling access to user management endpoints and controllers. Defaults to false. +#disableInternalUserManagement: true + +#keystone: +# authentication: +# url: http://localhost:35357/v2.0/tokens +# url: http://localhost:5000/v3/auth/tokens + +#ldap: +# profile: +# file: ldap/ldap-simple-bind.xml +# base: +# url: 'ldaps://192.168.3.39:10636/' +# userDnPattern: 'cn={0},ou=Users,dc=test,dc=com;cn={0},ou=OtherUsers,dc=example,dc=com' +# ssl: +# skipverification: false +# sslCertificate: ! '-----BEGIN CERTIFICATE----- +# MIIBfTCCAScCBgFDfaC2yzANBgkqhkiG9w0BAQUFADBCMQswCQYDVQQGEwJVUzEMMAoGA1UEChMD +# QVNGMRIwEAYDVQQLEwlEaXJlY3RvcnkxETAPBgNVBAMTCEFwYWNoZURTMB4XDTE0MDExMDE5Mjg0 +# MVoXDTE1MDExMDE5Mjg0MVowTDELMAkGA1UEBhMCVVMxDDAKBgNVBAoTA0FTRjESMBAGA1UECxMJ +# RGlyZWN0b3J5MRswGQYDVQQDExJmaGFuaWstd29ya3N0YXRpb24wXDANBgkqhkiG9w0BAQEFAANL +# ADBIAkEAuA6Nmto6NFCCJ+CwsBnT2cvMxuYgf26iZ3ckIpLhs2V4ZJ4PFinR6JZUsVnRp0RbYoV5 +# iW6F91XDTVtAMtDTJwIDAQABMA0GCSqGSIb3DQEBBQUAA0EATFGpEIprKYcnc+JuNcSQ8v2P2J7e +# lQ23NhTaljASF0g8AZ7SZEItU8JFYqf/KnNJ7FPwo4LbMbr7Zg6BRKBvnQ== +# -----END CERTIFICATE-----' +# tls: +# externalGroupsWhitelist: +# - admin +# - user +# emailDomain: +# - example.com +# attributeMappings: +# given_name: givenname +# family_name: sn +# phone_number: telephonenumber +# user.attribute.employeeCostCenter: costCenter +# user.attribute.terribleBosses: uaaManager +# providerDescription: 'Human readable description of this provider' + +ldap: + profile: + file: ldap/ldap-search-and-bind.xml + base: + url: 'ldap://localhost:40000/' + userDn: 'uid=leah,ou=people,dc=springframework,dc=org' + password: 'leahberlin' + searchBase: 'ou=otherpeople,dc=springframework,dc=org' + searchFilter: 'uid={0}' + referral: follow +# groups: +# file: 'ldap/ldap-groups-as-scopes.xml' +# searchBase: 'ou=groups,dc=springframework,dc=org' +# groupRoleAttribute: cn +# searchSubtree: true +# groupSearchFilter: 'member={0}' +# maxSearchDepth: 10 +# autoAdd: true + + groups: + file: 'ldap/ldap-groups-map-to-scopes.xml' + searchBase: 'ou=groups,dc=springframework,dc=org' + searchSubtree: true + groupSearchFilter: member={0} + maxSearchDepth: 10 + autoAdd: true + +#ldap: +# profile: +# file: ldap/ldap-search-and-compare.xml +# base: +# url: 'ldap://localhost:10389/' +# userDn: 'cn=admin,dc=test,dc=com' +# password: 'password' +# searchBase: '' +# searchFilter: 'cn={0}' +# passwordAttributeName: userPassword +# passwordEncoder: org.cloudfoundry.identity.uaa.provider.ldap.DynamicPasswordComparator +# localPasswordCompare: true + +#password: +# policy: +# minLength: 0 +# maxLength: 128 +# requireUpperCaseCharacter: 0 +# requireLowercaseCharacter: 0 +# requireDigit: 0 +# requireSpecialCharacter: 0 +# expirePasswordInMonths: 0 +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: + 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 +# client: +# secret: +# policy: +# minLength: 0 +# maxLength: 128 +# requireUpperCaseCharacter: 0 +# requireLowerCaseCharacter: 0 +# requireDigit: 0 +# requireSpecialCharacter: 0 + +# Default token signing key. Each installation MUST provide a unique key +# in order for tokens to be usable only on that installation. +jwt: + token: + verification-key: | + -----BEGIN PUBLIC KEY----- + MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0m59l2u9iDnMbrXHfqkO + rn2dVQ3vfBJqcDuFUK03d+1PZGbVlNCqnkpIJ8syFppW8ljnWweP7+LiWpRoz0I7 + fYb3d8TjhV86Y997Fl4DBrxgM6KTJOuE/uxnoDhZQ14LgOU2ckXjOzOdTsnGMKQB + LCl0vpcXBtFLMaSbpv1ozi8h7DJyVZ6EnFQZUWGdgTMhDrmqevfx95U/16c5WBDO + kqwIn7Glry9n9Suxygbf8g5AzpWcusZgDLIIZ7JTUldBb8qU2a0Dl4mvLZOn4wPo + jfj9Cw2QICsc5+Pwf21fP+hzf+1WSRHbnYv8uanRO0gZ8ekGaghM/2H6gqJbo2nI + JwIDAQAB + -----END PUBLIC KEY----- + signing-key: | + -----BEGIN RSA PRIVATE KEY----- + MIIEowIBAAKCAQEA0m59l2u9iDnMbrXHfqkOrn2dVQ3vfBJqcDuFUK03d+1PZGbV + lNCqnkpIJ8syFppW8ljnWweP7+LiWpRoz0I7fYb3d8TjhV86Y997Fl4DBrxgM6KT + JOuE/uxnoDhZQ14LgOU2ckXjOzOdTsnGMKQBLCl0vpcXBtFLMaSbpv1ozi8h7DJy + VZ6EnFQZUWGdgTMhDrmqevfx95U/16c5WBDOkqwIn7Glry9n9Suxygbf8g5AzpWc + usZgDLIIZ7JTUldBb8qU2a0Dl4mvLZOn4wPojfj9Cw2QICsc5+Pwf21fP+hzf+1W + SRHbnYv8uanRO0gZ8ekGaghM/2H6gqJbo2nIJwIDAQABAoIBAHPV9rSfzllq16op + zoNetIJBC5aCcU4vJQBbA2wBrgMKUyXFpdSheQphgY7GP/BJTYtifRiS9RzsHAYY + pAlTQEQ9Q4RekZAdd5r6rlsFrUzL7Xj/CVjNfQyHPhPocNqwrkxp4KrO5eL06qcw + UzT7UtnoiCdSLI7IL0hIgJZP8J1uPNdXH+kkDEHE9xzU1q0vsi8nBLlim+ioYfEa + Q/Q/ovMNviLKVs+ZUz+wayglDbCzsevuU+dh3Gmfc98DJw6n6iClpd4fDPqvhxUO + BDeQT1mFeHxexDse/kH9nygxT6E4wlU1sw0TQANcT6sHReyHT1TlwnWlCQzoR3l2 + RmkzUsECgYEA8W/VIkfyYdUd5ri+yJ3iLdYF2tDvkiuzVmJeA5AK2KO1fNc7cSPK + /sShHruc0WWZKWiR8Tp3d1XwA2rHMFHwC78RsTds+NpROs3Ya5sWd5mvmpEBbL+z + cl3AU9NLHVvsZjogmgI9HIMTTl4ld7GDsFMt0qlCDztqG6W/iguQCx8CgYEA3x/j + UkP45/PaFWd5c1DkWvmfmi9UxrIM7KeyBtDExGIkffwBMWFMCWm9DODw14bpnqAA + jH5AhQCzVYaXIdp12b+1+eOOckYHwzjWOFpJ3nLgNK3wi067jVp0N0UfgV5nfYw/ + +YoHfYRCGsM91fowh7wLcyPPwmSAbQAKwbOZKfkCgYEAnccDdZ+m2iA3pitdIiVr + RaDzuoeHx/IfBHjMD2/2ZpS1aZwOEGXfppZA5KCeXokSimj31rjqkWXrr4/8E6u4 + PzTiDvm1kPq60r7qi4eSKx6YD15rm/G7ByYVJbKTB+CmoDekToDgBt3xo+kKeyna + cUQqUdyieunM8bxja4ca3ukCgYAfrDAhomJ30qa3eRvFYcs4msysH2HiXq30/g0I + aKQ12FSjyZ0FvHEFuQvMAzZM8erByKarStSvzJyoXFWhyZgHE+6qDUJQOF6ruKq4 + DyEDQb1P3Q0TSVbYRunOWrKRM6xvJvSB4LUVfSvBDsv9TumKqwfZDVFVn9yXHHVq + b6sjSQKBgDkcyYkAjpOHoG3XKMw06OE4OKpP9N6qU8uZOuA8ZF9ZyR7vFf4bCsKv + QH+xY/4h8tgL+eASz5QWhj8DItm8wYGI5lKJr8f36jk0JLPUXODyDAeN6ekXY9LI + fudkijw0dnh28LJqbkFF5wLNtATzyCfzjp+czrPMn9uqLNKt/iVD + -----END RSA PRIVATE KEY----- + claims: + exclude: + - authorities + policy: + # Will override global validity policies for the default zone only. + accessTokenValiditySeconds: 3600 + refreshTokenValiditySeconds: 3600 + activeKeyId: key-id-1 + keys: + key-id-1: + signingKey: | + -----BEGIN RSA PRIVATE KEY----- + MIIEowIBAAKCAQEA0m59l2u9iDnMbrXHfqkOrn2dVQ3vfBJqcDuFUK03d+1PZGbV + lNCqnkpIJ8syFppW8ljnWweP7+LiWpRoz0I7fYb3d8TjhV86Y997Fl4DBrxgM6KT + JOuE/uxnoDhZQ14LgOU2ckXjOzOdTsnGMKQBLCl0vpcXBtFLMaSbpv1ozi8h7DJy + VZ6EnFQZUWGdgTMhDrmqevfx95U/16c5WBDOkqwIn7Glry9n9Suxygbf8g5AzpWc + usZgDLIIZ7JTUldBb8qU2a0Dl4mvLZOn4wPojfj9Cw2QICsc5+Pwf21fP+hzf+1W + SRHbnYv8uanRO0gZ8ekGaghM/2H6gqJbo2nIJwIDAQABAoIBAHPV9rSfzllq16op + zoNetIJBC5aCcU4vJQBbA2wBrgMKUyXFpdSheQphgY7GP/BJTYtifRiS9RzsHAYY + pAlTQEQ9Q4RekZAdd5r6rlsFrUzL7Xj/CVjNfQyHPhPocNqwrkxp4KrO5eL06qcw + UzT7UtnoiCdSLI7IL0hIgJZP8J1uPNdXH+kkDEHE9xzU1q0vsi8nBLlim+ioYfEa + Q/Q/ovMNviLKVs+ZUz+wayglDbCzsevuU+dh3Gmfc98DJw6n6iClpd4fDPqvhxUO + BDeQT1mFeHxexDse/kH9nygxT6E4wlU1sw0TQANcT6sHReyHT1TlwnWlCQzoR3l2 + RmkzUsECgYEA8W/VIkfyYdUd5ri+yJ3iLdYF2tDvkiuzVmJeA5AK2KO1fNc7cSPK + /sShHruc0WWZKWiR8Tp3d1XwA2rHMFHwC78RsTds+NpROs3Ya5sWd5mvmpEBbL+z + cl3AU9NLHVvsZjogmgI9HIMTTl4ld7GDsFMt0qlCDztqG6W/iguQCx8CgYEA3x/j + UkP45/PaFWd5c1DkWvmfmi9UxrIM7KeyBtDExGIkffwBMWFMCWm9DODw14bpnqAA + jH5AhQCzVYaXIdp12b+1+eOOckYHwzjWOFpJ3nLgNK3wi067jVp0N0UfgV5nfYw/ + +YoHfYRCGsM91fowh7wLcyPPwmSAbQAKwbOZKfkCgYEAnccDdZ+m2iA3pitdIiVr + RaDzuoeHx/IfBHjMD2/2ZpS1aZwOEGXfppZA5KCeXokSimj31rjqkWXrr4/8E6u4 + PzTiDvm1kPq60r7qi4eSKx6YD15rm/G7ByYVJbKTB+CmoDekToDgBt3xo+kKeyna + cUQqUdyieunM8bxja4ca3ukCgYAfrDAhomJ30qa3eRvFYcs4msysH2HiXq30/g0I + aKQ12FSjyZ0FvHEFuQvMAzZM8erByKarStSvzJyoXFWhyZgHE+6qDUJQOF6ruKq4 + DyEDQb1P3Q0TSVbYRunOWrKRM6xvJvSB4LUVfSvBDsv9TumKqwfZDVFVn9yXHHVq + b6sjSQKBgDkcyYkAjpOHoG3XKMw06OE4OKpP9N6qU8uZOuA8ZF9ZyR7vFf4bCsKv + QH+xY/4h8tgL+eASz5QWhj8DItm8wYGI5lKJr8f36jk0JLPUXODyDAeN6ekXY9LI + fudkijw0dnh28LJqbkFF5wLNtATzyCfzjp+czrPMn9uqLNKt/iVD + -----END RSA PRIVATE KEY----- + # Sets the default validity for all zones + global: + accessTokenValiditySeconds: 3600 + refreshTokenValiditySeconds: 3600 + # This is a feature flag to turn on/off the refresh token issuance behavior. If set to true, the refresh token is only granted to clients with a scope of refresh_token for offline access. + refresh: + restrict_grant: true + unique: false + format: jwt + +# Configure whitelist for allowing cross-origin XMLHttpRequest requests. +#cors: +# xhr: +# allowed: +# headers: +# - Accept +# - Authorization +# - Content-Type +# - X-Requested-With +# origin: +# - ^localhost$ +# - ^.*\.localhost$ +# uris: +# - ^/uaa/userinfo$ +# - ^/uaa/logout\.do$ +# methods: +# - GET +# - OPTIONS +# default: +# allowed: +# headers: +# - Accept +# - Authorization +# - Content-Type +# - X-Requested-With +# origin: +# - ^localhost$ +# - ^.*\.localhost$ +# uris: +# - ^/uaa/userinfo$ +# - ^/uaa/logout\.do$ +# methods: +# - GET +# - PUT +# - POST +# - DELETE + +# Deprecated: More to follow +# customize static asset source, provides control over visual branding +# (defaults to /resources/oss) +#assetBaseUrl: /resources/pivotal + +#tiles: +# - name: Pivotal Network +# login-link: https://network.gopivotal.com/login +# image: /resources/pivotal/images/network-logo-gray.png +# - name: Pivotal Web Services +# login-link: https://console.10.244.0.34.xip.io +# image: /resources/pivotal/images/pws-logo-gray.png +# - name: Pivotal Partners +# login-link: https://partners.gopivotal.com/login +# image: /resources/pivotal/images/partners-logo-gray.png + +#links: + # Custom self service links (will only be displayed if selfServiceLinksEnabled is true) + # If selfServiceLinksEnabled is true and these custom links are not provided then the Login Server + # will use internal links. +# passwd: /forgot_password +# signup: /create_account + +#notifications: +# url: http://localhost:3001 +#logout: +# redirect: +# url: /login +# parameter: +# whitelist: +# - https://url1.domain1.com/logout-success +# - https://url2.domain2.com/logout-success +issuer: + uri: http://localhost:8080/uaa +login: + # Enable create account and forgot password links on the Login Server (enabled by default) + #selfServiceLinksEnabled: true + #base URL that the login server can be reached at +# oauth: +# providers: +# my-oauth-provider: +# type: oauth2.0 +# authUrl: http://my-auth.com +# tokenUrl: http://my-token.com +# tokenKey: my-token-key +# tokenKeyUrl: +# issuer: token issuer (iss) +# scopes: +# - openid +# - scope.example +# emailDomain: +# - example.com +# linkText: My Oauth Provider +# showLinkText: true +# addShadowUserOnLogin: false +# relyingPartyId: uaa +# relyingPartySecret: secret +# attributeMappings: +# given_name: firstName +# family_name: lastname +# user_name: username +# external_groups: +# - scopes_example_group +# - roles_example_group +# my-oidc-provider: +# type: oidc1.0 +# discoveryUrl: http://my-auth.com +# tokenKey: my-token-key +# issuer: token issuer (iss) +# scopes: +# - openid +# - scope.example +# linkText: My OIDC Provider +# showLinkText: true +# relyingPartyId: identity +# relyingPartySecret: identitysecret +# passwordGrantEnabled: true +# prompts: +# - name: username +# type: text +# text: MyEmail +# - name: password +# type: password +# text: MyPassword +# - name: passcode +# type: password +# text: MyTemporary Authentication Code (Get on at /passcode) + url: http://localhost:8080/uaa +# defaultIdentityProvider: uaa +# idpDiscoveryEnabled: true +# accountChooserEnabled: true + +# mfa: +# enabled: true +# providerName: customProviderName +# providers: +# customProviderName: +# type: google-authenticator +# config: +# issuer: "custom issuer" +# providerDescription: "Default authenticator for uaa zone" + + # SAML Key Configuration + # The location and credentials of the certificate for this SP + # See README.md for details on how to create this. +# serviceProviderKey: | +# -----BEGIN RSA PRIVATE KEY----- +# MIICXQIBAAKBgQDHtC5gUXxBKpEqZTLkNvFwNGnNIkggNOwOQVNbpO0WVHIivig5 +# L39WqS9u0hnA+O7MCA/KlrAR4bXaeVVhwfUPYBKIpaaTWFQR5cTR1UFZJL/OF9vA +# fpOwznoD66DDCnQVpbCjtDYWX+x6imxn8HCYxhMol6ZnTbSsFW6VZjFMjQIDAQAB +# AoGAVOj2Yvuigi6wJD99AO2fgF64sYCm/BKkX3dFEw0vxTPIh58kiRP554Xt5ges +# 7ZCqL9QpqrChUikO4kJ+nB8Uq2AvaZHbpCEUmbip06IlgdA440o0r0CPo1mgNxGu +# lhiWRN43Lruzfh9qKPhleg2dvyFGQxy5Gk6KW/t8IS4x4r0CQQD/dceBA+Ndj3Xp +# ubHfxqNz4GTOxndc/AXAowPGpge2zpgIc7f50t8OHhG6XhsfJ0wyQEEvodDhZPYX +# kKBnXNHzAkEAyCA76vAwuxqAd3MObhiebniAU3SnPf2u4fdL1EOm92dyFs1JxyyL +# gu/DsjPjx6tRtn4YAalxCzmAMXFSb1qHfwJBAM3qx3z0gGKbUEWtPHcP7BNsrnWK +# vw6By7VC8bk/ffpaP2yYspS66Le9fzbFwoDzMVVUO/dELVZyBnhqSRHoXQcCQQCe +# A2WL8S5o7Vn19rC0GVgu3ZJlUrwiZEVLQdlrticFPXaFrn3Md82ICww3jmURaKHS +# N+l4lnMda79eSp3OMmq9AkA0p79BvYsLshUJJnvbk76pCjR28PK4dV1gSDUEqQMB +# qy45ptdwJLqLJCeNoR0JUcDNIRhOCuOPND7pcMtX6hI/ +# -----END RSA PRIVATE KEY----- +# serviceProviderKeyPassword: password +# serviceProviderCertificate: | +# -----BEGIN CERTIFICATE----- +# MIIDSTCCArKgAwIBAgIBADANBgkqhkiG9w0BAQQFADB8MQswCQYDVQQGEwJhdzEO +# MAwGA1UECBMFYXJ1YmExDjAMBgNVBAoTBWFydWJhMQ4wDAYDVQQHEwVhcnViYTEO +# MAwGA1UECxMFYXJ1YmExDjAMBgNVBAMTBWFydWJhMR0wGwYJKoZIhvcNAQkBFg5h +# cnViYUBhcnViYS5hcjAeFw0xNTExMjAyMjI2MjdaFw0xNjExMTkyMjI2MjdaMHwx +# CzAJBgNVBAYTAmF3MQ4wDAYDVQQIEwVhcnViYTEOMAwGA1UEChMFYXJ1YmExDjAM +# BgNVBAcTBWFydWJhMQ4wDAYDVQQLEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmExHTAb +# BgkqhkiG9w0BCQEWDmFydWJhQGFydWJhLmFyMIGfMA0GCSqGSIb3DQEBAQUAA4GN +# ADCBiQKBgQDHtC5gUXxBKpEqZTLkNvFwNGnNIkggNOwOQVNbpO0WVHIivig5L39W +# qS9u0hnA+O7MCA/KlrAR4bXaeVVhwfUPYBKIpaaTWFQR5cTR1UFZJL/OF9vAfpOw +# znoD66DDCnQVpbCjtDYWX+x6imxn8HCYxhMol6ZnTbSsFW6VZjFMjQIDAQABo4Ha +# MIHXMB0GA1UdDgQWBBTx0lDzjH/iOBnOSQaSEWQLx1syGDCBpwYDVR0jBIGfMIGc +# gBTx0lDzjH/iOBnOSQaSEWQLx1syGKGBgKR+MHwxCzAJBgNVBAYTAmF3MQ4wDAYD +# VQQIEwVhcnViYTEOMAwGA1UEChMFYXJ1YmExDjAMBgNVBAcTBWFydWJhMQ4wDAYD +# VQQLEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmExHTAbBgkqhkiG9w0BCQEWDmFydWJh +# QGFydWJhLmFyggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAYvBJ +# 0HOZbbHClXmGUjGs+GS+xC1FO/am2suCSYqNB9dyMXfOWiJ1+TLJk+o/YZt8vuxC +# KdcZYgl4l/L6PxJ982SRhc83ZW2dkAZI4M0/Ud3oePe84k8jm3A7EvH5wi5hvCkK +# RpuRBwn3Ei+jCRouxTbzKPsuCVB+1sNyxMTXzf0= +# -----END CERTIFICATE----- + + # SAML - The entity base url is the location of this application + # (The host and port of the application that will accept assertions) + entityBaseURL: http://localhost:8080/uaa + # The entityID of this SP + entityID: cloudfoundry-saml-login + saml: + #Entity ID Alias to login at /saml/SSO/alias/{login.saml.entityIDAlias} + #entityIDAlias: cloudfoundry-saml-login + #Default nameID if IDP nameID is not set + nameID: 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified' + #Default assertionConsumerIndex if IDP value is not set + assertionConsumerIndex: 0 + #Local/SP metadata - sign metadata + signMetaData: true + #Local/SP metadata - requests signed + signRequest: true + #Local/SP metadata - want incoming assertions signed + #wantAssertionSigned: true + #Algorithm for SAML signatures. Defaults to SHA1. Accepts SHA1, SHA256, SHA512 + #signatureAlgorithm: SHA256 + socket: + # URL metadata fetch - pool timeout + connectionManagerTimeout: 10000 + # URL metadata fetch - read timeout + soTimeout: 10000 +#BEGIN SAML PROVIDERS +# providers: +# okta-signed-or-encrypted: +# idpMetadata: | +# MIICmTCCAgKgAwIBAgIGAUPATqmEMA0GCSqGSIb3DQEBBQUAMIGPMQswCQYDVQQGEwJVUzETMBEG +# A1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEU +# MBIGA1UECwwLU1NPUHJvdmlkZXIxEDAOBgNVBAMMB1Bpdm90YWwxHDAaBgkqhkiG9w0BCQEWDWlu +# Zm9Ab2t0YS5jb20wHhcNMTQwMTIzMTgxMjM3WhcNNDQwMTIzMTgxMzM3WjCBjzELMAkGA1UEBhMC +# VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoM +# BE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRAwDgYDVQQDDAdQaXZvdGFsMRwwGgYJKoZIhvcN +# AQkBFg1pbmZvQG9rdGEuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCeil67/TLOiTZU +# WWgW2XEGgFZ94bVO90v5J1XmcHMwL8v5Z/8qjdZLpGdwI7Ph0CyXMMNklpaR/Ljb8fsls3amdT5O +# Bw92Zo8ulcpjw2wuezTwL0eC0wY/GQDAZiXL59npE6U+fH1lbJIq92hx0HJSru/0O1q3+A/+jjZL +# 3tL/SwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAI5BoWZoH6Mz9vhypZPOJCEKa/K+biZQsA4Zqsuk +# vvphhSERhqk/Nv76Vkl8uvJwwHbQrR9KJx4L3PRkGCG24rix71jEuXVGZUsDNM3CUKnARx4MEab6 +# GFHNkZ6DmoT/PFagngecHu+EwmuDtaG0rEkFrARwe+d8Ru0BN558abFburn:oasis:names:tc:SAML:1.1:nameid-format:emailAddressurn:oasis:names:tc:SAML:1.1:nameid-format:unspecified +# nameID: urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress +# assertionConsumerIndex: 0 +# metadataTrustCheck: true +# showSamlLoginLink: true +# linkText: 'Okta Preview Signed' +# okta-local: +# idpMetadata: https://pivotal.oktapreview.com/app/k36wkjw6EAEJVZXFFDAU/sso/saml/metadata +# nameID: urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress +# assertionConsumerIndex: 0 +# metadataTrustCheck: true +# showSamlLoginLink: true +# linkText: 'Okta Preview 1' +# iconUrl: 'http://link.to/icon.jpg' +# addShadowUserOnLogin: true +# externalGroupsWhitelist: +# - admin +# - user +# emailDomain: +# - example.com +# attributeMappings: +# given_name: firstName +# family_name: surname +# providerDescription: 'Human readable description of this provider' +# okta-local-2: +# idpMetadata: | +# MIICmTCCAgKgAwIBAgIGAUPATqmEMA0GCSqGSIb3DQEBBQUAMIGPMQswCQYDVQQGEwJVUzETMBEG +# A1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEU +# MBIGA1UECwwLU1NPUHJvdmlkZXIxEDAOBgNVBAMMB1Bpdm90YWwxHDAaBgkqhkiG9w0BCQEWDWlu +# Zm9Ab2t0YS5jb20wHhcNMTQwMTIzMTgxMjM3WhcNNDQwMTIzMTgxMzM3WjCBjzELMAkGA1UEBhMC +# VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoM +# BE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRAwDgYDVQQDDAdQaXZvdGFsMRwwGgYJKoZIhvcN +# AQkBFg1pbmZvQG9rdGEuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCeil67/TLOiTZU +# WWgW2XEGgFZ94bVO90v5J1XmcHMwL8v5Z/8qjdZLpGdwI7Ph0CyXMMNklpaR/Ljb8fsls3amdT5O +# Bw92Zo8ulcpjw2wuezTwL0eC0wY/GQDAZiXL59npE6U+fH1lbJIq92hx0HJSru/0O1q3+A/+jjZL +# 3tL/SwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAI5BoWZoH6Mz9vhypZPOJCEKa/K+biZQsA4Zqsuk +# vvphhSERhqk/Nv76Vkl8uvJwwHbQrR9KJx4L3PRkGCG24rix71jEuXVGZUsDNM3CUKnARx4MEab6 +# GFHNkZ6DmoT/PFagngecHu+EwmuDtaG0rEkFrARwe+d8Ru0BN558abFburn:oasis:names:tc:SAML:1.1:nameid-format:emailAddressurn:oasis:names:tc:SAML:1.1:nameid-format:unspecified +# nameID: urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress +# assertionConsumerIndex: 0 +# metadataTrustCheck: true +# showSamlLoginLink: true +# linkText: 'Okta Preview 2' +# addShadowUserOnLogin: true +# vsphere.local: +# idpMetadata: https://win2012-sso2.localdomain:7444/websso/SAML2/Metadata/vsphere.local +# nameID: urn:oasis:names:tc:SAML:2.0:nameid-format:persistent +# assertionConsumerIndex: 0 +# showSamlLoginLink: true +# linkText: 'Log in with vCenter SSO' +# addShadowUserOnLogin: true +# groupMappingMode: EXPLICITLY_MAPPED +# openam-local: +# idpMetadata: http://localhost:8081/openam/saml2/jsp/exportmetadata.jsp?entityid=http://localhost:8081/openam +# nameID: urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress +# assertionConsumerIndex: 0 +# signMetaData: false +# signRequest: false +# showSamlLoginLink: true +# linkText: 'Log in with OpenAM' +# addShadowUserOnLogin: true +# groupMappingMode: AS_SCOPES +#END SAML PROVIDERS + + authorize: + url: http://localhost:8080/uaa/oauth/authorize + +# homeRedirect: http://example.com/ + +# branding: +# consent: +# text: Terms and Conditions +# link: https://example.com +# companyName: My Company +# productLogo: /9j/4AAQSkZJRgABAQEASABIAAD/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/hA39odHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDE0IDc5LjE1Njc5NywgMjAxNC8wOC8yMC0wOTo1MzowMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjMDk4MzFmOC1iYWQ5LTI2NGYtYTI1OS04YWY5OGFiNzBiZWQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODZENzdBMTIxNjkzMTFFNUI4QUJCNkNFRjczRkFCN0UiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODZENzdBMTExNjkzMTFFNUI4QUJCNkNFRjczRkFCN0UiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6YzA5ODMxZjgtYmFkOS0yNjRmLWEyNTktOGFmOThhYjcwYmVkIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmMwOTgzMWY4LWJhZDktMjY0Zi1hMjU5LThhZjk4YWI3MGJlZCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4g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 +# squareLogo: iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABSUlEQVQ4EaVTO04DMRB9YdOTC+QcK46wFU3apclKuQMH4AYUkUxFmyY0PgLac3AB6ImM3kyePYkQDZZ27Zl58+aNP8A/x2J7ixI5Xr6wiHaMX8eIW/L3/tlStisUAZm8fx1acMxWTPFK0BBORhL5ukP2ZQ9UsjHXIqZA4LuVrwjsPjxxenRfAtAh47QenCiQgFL5fb8NpTyjlAf/5KOfa/llk/pG1WvV2T3T0We1wLh8jNAmaSUwyTMMRGC6dxDXIlExtUd7SZb0BKhXU3LIRrTfKKXNpsLU+R7VTWTFKJEpuzGbktNmuFiLjnEj4M52s4OnMVt/CedTYLWjx9Artc1269hG3MSohMps9LAjVCqrc9QWaJgSZCRWOp+GoX5J5u3lvan3nioIphIOnQr711BVXf0LAoGuieRnMt8A438SKEFEsuMDirEf/oirUgza/ucAAAAASUVORK5CYII= +# footerLegalText: This legal text will show up in the footer. +# footerLinks: +# Terms: /exampleTerms +# Privacy Agreement: privacy_example.html +# Licensing: http://example.com/ +# banner: +# logo: iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABSUlEQVQ4EaVTO04DMRB9YdOTC+QcK46wFU3apclKuQMH4AYUkUxFmyY0PgLac3AB6ImM3kyePYkQDZZ27Zl58+aNP8A/x2J7ixI5Xr6wiHaMX8eIW/L3/tlStisUAZm8fx1acMxWTPFK0BBORhL5ukP2ZQ9UsjHXIqZA4LuVrwjsPjxxenRfAtAh47QenCiQgFL5fb8NpTyjlAf/5KOfa/llk/pG1WvV2T3T0We1wLh8jNAmaSUwyTMMRGC6dxDXIlExtUd7SZb0BKhXU3LIRrTfKKXNpsLU+R7VTWTFKJEpuzGbktNmuFiLjnEj4M52s4OnMVt/CedTYLWjx9Artc1269hG3MSohMps9LAjVCqrc9QWaJgSZCRWOp+GoX5J5u3lvan3nioIphIOnQr711BVXf0LAoGuieRnMt8A438SKEFEsuMDirEf/oirUgza/ucAAAAASUVORK5CYII= +# text: Welcome to UAA! We will be undergoing system maintenance tonight. +# textColor: "#000000" +# backgroundColor: "#FFFFFF" +# link: https://example.com + +uaa: + # The hostname of the UAA that this login server will connect to + url: http://localhost:8080/uaa + token: + url: http://localhost:8080/uaa/oauth/token + approvals: + url: http://localhost:8080/uaa/approvals + login: + url: http://localhost:8080/uaa/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 + +# Google Analytics +#analytics: +# code: secret_code +# domain: example.com + +#smtp: +# host: localhost +# port: 2525 +# user: +# password: + +#ldap: +# profile: +# file: ldap/ldap-search-and-bind.xml +# base: +# url: 'ldap://localhost:389/' +# userDn: 'cn=admin,dc=test,dc=com' +# password: 'password' +# searchBase: 'dc=test,dc=com' +# searchFilter: 'cn={0}'