From 62324b95d14b880415c9dc6da0fdb0e7024cc175 Mon Sep 17 00:00:00 2001 From: Pedro Igor Date: Fri, 3 Jun 2016 20:49:26 -0300 Subject: [PATCH] Servlet security quickstart --- SUMMARY.adoc | 1 + images/pep-pattern-diagram.png | Bin 0 -> 22852 bytes images/servlet-authz-app-structure.png | Bin 0 -> 22270 bytes topics/enforcer/jaxrs-enforcer.adoc | 1 - topics/enforcer/overview.adoc | 8 +- topics/getting-started/getting-started.adoc | 4 +- .../hello-world-create-realm.adoc | 202 -------- .../hello-world-entitlement.adoc | 1 - .../hello-world-servlet-authz.adoc | 456 ++++++++++++++++++ topics/getting-started/hello-world.adoc | 8 +- 10 files changed, 474 insertions(+), 207 deletions(-) create mode 100644 images/pep-pattern-diagram.png create mode 100644 images/servlet-authz-app-structure.png delete mode 100755 topics/enforcer/jaxrs-enforcer.adoc delete mode 100755 topics/getting-started/hello-world-create-realm.adoc delete mode 100755 topics/getting-started/hello-world-entitlement.adoc create mode 100755 topics/getting-started/hello-world-servlet-authz.adoc diff --git a/SUMMARY.adoc b/SUMMARY.adoc index bec52f8634..50e174ff17 100755 --- a/SUMMARY.adoc +++ b/SUMMARY.adoc @@ -5,6 +5,7 @@ .. link:topics/overview/terminology.adoc[Terminology] . link:topics/getting-started/getting-started.adoc[Getting Started] .. link:topics/getting-started/hello-world.adoc[Hello Authorization World] + .. link:topics/getting-started/hello-world-servlet-authz.adoc[Securing a Servlet Application] . link:topics/resource-server/overview.adoc[Managing Resource Servers] .. link:topics/resource-server/view.adoc[Viewing Resource Servers] .. link:topics/resource-server/create.adoc[Creating Resource Servers] diff --git a/images/pep-pattern-diagram.png b/images/pep-pattern-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..3e019cce8873ba2b2ac8d4a1ec0c1ef957594da1 GIT binary patch literal 22852 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 Tco*1?Or$8M`l{lEalpR;%H2?8 literal 0 HcmV?d00001 diff --git a/images/servlet-authz-app-structure.png b/images/servlet-authz-app-structure.png new file mode 100644 index 0000000000000000000000000000000000000000..c6b1418bb34eadc81d5361837cf0adb036af2cff GIT binary patch literal 22270 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 z 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 e5d=X#F8&W`T&q?a({MTf0000 + Keycloak Authorization Enforcer + org.keycloak.authorization.policy.enforcer.servlet.KeycloakAdapterEnforcementFilter + + + + Keycloak Authorization Enforcer + /* + +``` +The *org.keycloak.authorization.policy.enforcer.servlet.KeycloakAdapterEnforcementFilter* is shipped with the {{book.project.name}} OIDC Adapters distribution. In order to make it available to +your application at runtime, you must create a *META-INF/jboss-deployment-structure.xml* at the application root directory. If you are using maven, this file can be placed under *src/main/webapp/META-INF/jboss-deployment-structure.xml*: + +```xml + + + + + + + + + + + +``` + +For last, you need to create a *META-INF/keycloak-authz.json*. If you are using Maven, this file goes inside *src/main/resources*: + +```json +{ + "client": { + "configurationUrl": "http://localhost:8080/auth/realms/servlet-authz/authz/uma_configuration", + "clientId": "servlet-authz-app", + "clientSecret": "secret" + }, + "enforcer": {} +} +``` + +=== Running and Using the Application + +All the source code for this application is at *${KEYCLOAK_DEMO_SERVER_DIR}/examples/authz/servlet-authz/*. + +There you can execute the following command to _deploy_ the application to the running server: + +```bash +mvn clean package wildfly:deploy +``` +That should be enough to get the application properly packaged and deployed to a _running_ {{book.project.name}} server. + +If the application was properly deployed, you can try to access it at http://localhost:8080/auth[http://localhost:8080/servlet-authz-app] and use the following credentials to login into the application: + +If everything is correct, you will be redirect to Keycloak login page. You can login to the application with the following credentials: + +* username: alice / password: alice (regular user) +* username: jdoe / password: jdoe (premium user) +* username: admin / password: admin (administrator) + +To _undeploy_ the application, please execute the following command: + +```bash +mvn wildfly:undeploy +``` \ No newline at end of file diff --git a/topics/getting-started/hello-world.adoc b/topics/getting-started/hello-world.adoc index cb175f4732..6075057c7f 100755 --- a/topics/getting-started/hello-world.adoc +++ b/topics/getting-started/hello-world.adoc @@ -10,6 +10,9 @@ This guide will show you how to: The purpose of this guide is to give you a generic overview of {{book.project.name}} {{book.project.module}} so you can understand some core concepts and start protecting your applications and services despite the platform they are running on. +[NOTE] +Before going further, make sure you followed all the instructions in the link:../getting-started/getting-started.html[Getting Started] guide. + === Creating the Hello World AuthZ Realm For this guide, we are going to create a *hello-world-authz* realm. Just import the following JSON file to create the new realm: @@ -94,7 +97,7 @@ It must have a *client_id*, *client_secret* and *Service Account* enabled: "clients" : [ { "clientId" : "hello-world-authz-service", - "secret" : "7801be7c-437a-44ae-be34-67da32f024eb", + "secret" : "password", "serviceAccountsEnabled" : true, ... } @@ -156,6 +159,9 @@ From that page you can create a resource server by manually filling that form or ``` +[NOTE] +All this configuration can also be done using the {{book.project.name}} Administration Console. We are using the import tool just for demonstration purposes + After importing the JSON file above, you would see a page like that: image:../../images/gs-authz-hello-rs-created-page.png[alt="Resource Server Successfully Created"]