diff --git a/examples/demo-template/customer-app-js/src/main/webapp/customers/view.html b/examples/demo-template/customer-app-js/src/main/webapp/customers/view.html
index 36ef79f..ee38261 100755
--- a/examples/demo-template/customer-app-js/src/main/webapp/customers/view.html
+++ b/examples/demo-template/customer-app-js/src/main/webapp/customers/view.html
@@ -1,25 +1,52 @@
<html>
<head>
<title>Customer View Page</title>
- <script src="/auth/js/keycloak.js"></script>
+ <script src="http://localhost:8081/auth/js/keycloak.js"></script>
</head>
<body bgcolor="#E3F6CE">
<p>Goto: <a href="#" onclick="keycloak.logout()">logout</a></p>
-User <b id="username"></b> made this request.
+User <b id="subject"></b> made this request.
+<p><b>User details (from <span id="profileType"></span>)</b></p>
+<p>Username: <span id="username"></span></p>
+<p>Email: <span id="email"></span></p>
+<p>Full Name: <span id="name"></span></p>
+<p>First: <span id="givenName"></span></p>
+<p>Last: <span id="familyName"></span></p>
+
<h2>Customer Listing</h2>
<div id="customers"></div>
<script>
var keycloak = Keycloak({
clientId: 'customer-portal',
- clientSecret: 'password',
realm: 'demo',
onload: 'login-required'
});
var loadData = function () {
- document.getElementById('username').innerText = keycloak.username;
+ document.getElementById('subject').innerText = keycloak.subject;
+
+ console.debug(keycloak.idToken);
+ if (keycloak.idToken) {
+ document.getElementById('profileType').innerText = 'IDToken';
+ document.getElementById('username').innerText = keycloak.idToken.preferred_username;
+ document.getElementById('email').innerText = keycloak.idToken.email;
+ document.getElementById('name').innerText = keycloak.idToken.name;
+ document.getElementById('givenName').innerText = keycloak.idToken.given_name;
+ document.getElementById('familyName').innerText = keycloak.idToken.family_name;
+ } else {
+ keycloak.loadUserProfile(function() {
+ document.getElementById('profileType').innerText = 'Account Service';
+ document.getElementById('username').innerText = keycloak.profile.username;
+ document.getElementById('email').innerText = keycloak.profile.email;
+ document.getElementById('name').innerText = keycloak.profile.firstName + ' ' + keycloak.profile.lastName;
+ document.getElementById('givenName').innerText = keycloak.profile.firstName;
+ document.getElementById('familyName').innerText = keycloak.profile.lastName;
+ }, function() {
+ document.getElementById('profileType').innerText = 'Failed to retrieve user details. Please enable claims or account role';
+ });
+ }
var url = 'http://localhost:8080/database/customers';
@@ -50,12 +77,11 @@ User <b id="username"></b> made this request.
};
-
-
var reloadData = function () {
keycloak.onValidAccessToken(loadData, loadFailure);
}
- keycloak.init(loadData);
+
+ keycloak.init(loadData, loadFailure);
</script>
diff --git a/integration/js/src/main/resources/META-INF/resources/js/keycloak.js b/integration/js/src/main/resources/META-INF/resources/js/keycloak.js
index 5253663..b3a6af4 100755
--- a/integration/js/src/main/resources/META-INF/resources/js/keycloak.js
+++ b/integration/js/src/main/resources/META-INF/resources/js/keycloak.js
@@ -194,13 +194,22 @@ var Keycloak = function (options) {
if (token) {
window.oauth.token = token;
kc.token = token;
-
kc.tokenParsed = JSON.parse(atob(token.split('.')[1]));
kc.authenticated = true;
kc.subject = kc.tokenParsed.sub;
kc.realmAccess = kc.tokenParsed.realm_access;
kc.resourceAccess = kc.tokenParsed.resource_access;
+ for (var i = 0; i < idTokenProperties.length; i++) {
+ var n = idTokenProperties[i];
+ if (kc.tokenParsed[n]) {
+ if (!kc.idToken) {
+ kc.idToken = {};
+ }
+ kc.idToken[n] = kc.tokenParsed[n];
+ }
+ }
+
setTimeout(function() {
successCallback && successCallback({ authenticated: kc.authenticated, subject: kc.subject });
}, 0);
@@ -260,6 +269,35 @@ var Keycloak = function (options) {
var uuid = s.join('');
return uuid;
}
+
+ var idTokenProperties = [
+ "name",
+ "given_name",
+ "family_name",
+ "middle_name",
+ "nickname",
+ "preferred_username",
+ "profile",
+ "picture",
+ "website",
+ "email",
+ "email_verified",
+ "gender",
+ "birthdate",
+ "zoneinfo",
+ "locale",
+ "phone_number",
+ "phone_number_verified",
+ "address",
+ "updated_at",
+ "formatted",
+ "street_address",
+ "locality",
+ "region",
+ "postal_code",
+ "country",
+ "claims_locales"
+ ]
}
window.oauth = (function () {
diff --git a/testsuite/integration/src/main/java/org/keycloak/testutils/KeycloakServer.java b/testsuite/integration/src/main/java/org/keycloak/testutils/KeycloakServer.java
index 68d6c5e..0a0e463 100755
--- a/testsuite/integration/src/main/java/org/keycloak/testutils/KeycloakServer.java
+++ b/testsuite/integration/src/main/java/org/keycloak/testutils/KeycloakServer.java
@@ -202,11 +202,12 @@ public class KeycloakServer {
try {
RealmManager manager = new RealmManager(session);
- if (rep.getId() == null) {
- throw new RuntimeException("Realm id not specified");
+ if (rep.getId() != null && manager.getRealm(rep.getId()) != null) {
+ info("Not importing realm " + rep.getRealm() + " realm already exists");
+ return;
}
- if (manager.getRealm(rep.getId()) != null) {
+ if (manager.getRealmByName(rep.getRealm()) != null) {
info("Not importing realm " + rep.getRealm() + " realm already exists");
return;
}
@@ -268,7 +269,7 @@ public class KeycloakServer {
server.deploy(di);
- factory = ((KeycloakApplication)deployment.getApplication()).getFactory();
+ factory = ((KeycloakApplication) deployment.getApplication()).getFactory();
setupDevConfig();