Compare commits

...
276 Commits
Author SHA1 Message Date
Stian Thorgersen d26712a1d4 Version bump 2015-01-28 14:23:05 +01:00
Stian Thorgersen db8935444f Fix federation provider example to load users file from it's own ClassLoader instead of Thread CL 2015-01-28 13:23:00 +01:00
Stian Thorgersen 5b769ed829 Updates to migration guide 2015-01-28 12:03:59 +01:00
Stian Thorgersen 7585b5ab49 Added provider section to docs 2015-01-28 11:25:11 +01:00
Stian Thorgersen 95287b2faa Removed details on using deployment overrides, this will need reviewing and adding to 1.2 instead 2015-01-28 10:48:07 +01:00
Stian Thorgersen d707133742 Update Travis CI config 2015-01-28 09:25:03 +01:00
Stian Thorgersen c0e0391a87 Add travis.yml 2015-01-28 09:25:03 +01:00
Stian Thorgersen 7139c683cc KEYCLOAK-999 Load providers from file-system 2015-01-28 09:25:01 +01:00
mposolda 19939068d5 Fixed test failures caused by uncleared Time offset 2015-01-26 17:20:05 +01:00
mposolda 9ffe8287a7 Improve OOTB experience for ssh and jmx authentication in fuse 2015-01-23 20:40:38 +01:00
girirajsharma be74476de1 Updated KeyCloak relative URI as per scheme, host and port of request. 2015-01-21 17:15:34 +01:00
girirajsharma 45c5fa28fc Fixed KeyCloak relative URI optimization with auth-server-url in docbook 2015-01-21 17:15:25 +01:00
mposolda a4bed6e433 Added docs and example for SSH and JMX authentication on fuse 2015-01-21 13:36:00 +01:00
Stian Thorgersen 575943fbb4 KEYCLOAK-980 Password reset is possible with expired link 2015-01-21 13:10:43 +01:00
Stian Thorgersen 46fa593d4a KEYCLOAK-983 Fix login after reset-password 2015-01-21 12:26:58 +01:00
mposolda 9819d9997e Have fuse example working on newest fuse 6.2. Refactoring of ServletReregistrationService to work on fuse 6.1, 6.2 and karaf 3.0.2 2015-01-20 21:42:36 +01:00
Stian Thorgersen cdb0d6b5bf KEYCLOAK-977 Use reflection to find constructor for JBossGenericPrincipal to support EAP 6.4 2015-01-20 13:25:33 +01:00
mposolda ae86028e6e KEYCLOAK-981 Module org.picketlink.federation.bindings doesn't work with EAP6 2015-01-20 11:13:39 +01:00
mposolda 0cfe4c694a Fix SAML examples. Fix links in README files for SAML examples 2015-01-20 11:13:10 +01:00
Stian Thorgersen 034735cd64 KEYCLOAK-975 Client/app secret should be read-only, not disabled 2015-01-19 14:07:55 +01:00
mposolda 7567fea6c1 Update instructions for fuse demo 2015-01-19 13:21:06 +01:00
Stian Thorgersen 3af087e36f Fix OAuthRedirectUriTest 2015-01-19 12:21:26 +01:00
mposolda 45e04944a4 Remove references about installing auth-server on JBoss AS 7.1.1 2015-01-16 17:59:33 +01:00
mposolda 0706e6f778 Make it easier to run demo on different host then auth-server 2015-01-16 17:39:37 +01:00
Stian Thorgersen 655aa6194e Fix OAuthRedirectUriTest 2015-01-16 13:06:27 +01:00
mposolda 862baf2d5b KEYCLOAK-974 ServerVersionResource doesn't handle cors requests 2015-01-16 12:25:13 +01:00
Stian Thorgersen fc148207ce KEYCLOAK-967 Username is displayed as undefined in Cordova example 2015-01-16 11:48:23 +01:00
Stian Thorgersen 095561cb29 KEYCLOAK-964 JS Console has two tabs for Show ID Token 2015-01-16 11:27:52 +01:00
Stian Thorgersen 9bd3f43ce5 KEYCLOAK-965 NPE in TokenManager.verifyAccess if application is deleted 2015-01-16 11:25:24 +01:00
Stian Thorgersen 4ea49a14ea KEYCLOAK-962 Changed access token request to use redirect_uri from initial request instead of the resolved redirect_uri 2015-01-16 11:01:53 +01:00
Stian Thorgersen 12c155cd9c KEYCLOAK-963 Change code output to single-line for 'urn:ietf:wg:oauth:2.0:oob' 2015-01-16 11:01:48 +01:00
mposolda 0249adbacc Typo in packaging 2015-01-15 19:52:29 +01:00
mposolda d69b01ad3c KEYCLOAK-853 Documentation for login modules 2015-01-15 18:58:40 +01:00
mposolda e7dbfecdb0 Documentation for fuse adapter and example 2015-01-15 18:58:40 +01:00
Stian Thorgersen 37b396c106 KEYCLOAK-960 Fix pagination of app sessions 2015-01-15 14:03:29 +01:00
Marek Posolda b03dddccf4 Merge pull request #917 from mposolda/fuse2
KEYCLOAK-539 Fuse adapter. OSGI bundling. OSGI headers in keycloak adapt...
2015-01-15 13:24:27 +01:00
mposolda 1b7e019042 KEYCLOAK-539 Fuse adapter. OSGI bundling. OSGI headers in keycloak adapter maven artifacts. Rename package in jetty-core 2015-01-15 13:11:30 +01:00
Stian Thorgersen 33c47c8441 KEYCLOAK-958 Support role names with '/' and '\' 2015-01-15 12:21:58 +01:00
Stian Thorgersen 8e5325b5d5 KEYCLOAK-959 Warning message in server log after logging out all sessions 2015-01-15 09:54:52 +01:00
Stian Thorgersen e37c6f262b Add redirect_uri to access token request in keycloak.js 2015-01-14 15:17:22 +01:00
Stian Thorgersen 5bebd31b0c KEYCLOAK-955 Fix AeroGear project integration example 2015-01-14 14:31:39 +01:00
Stian Thorgersen cc76dcf58b KEYCLOAK-949 Disabled user with wrong credentials receive wrong error message 2015-01-14 10:10:36 +01:00
Stian Thorgersen d0b614fdcf KEYCLOAK-957 Access Token Request does not verify redirect_uri 2015-01-14 09:59:04 +01:00
Stian Thorgersen c325b9f04d Merge pull request #914 from gerbermichi/email
Passwort reset dialog shows an error message if the user has an invalid email
2015-01-14 09:15:26 +01:00
girirajsharma c311f47d5d Minor changes : Fixed spell/grammatical errors in docbook. 2015-01-14 09:13:28 +01:00
Michael Gerber aa95ff6d84 check if email is null 2015-01-12 20:33:08 +01:00
Stian Thorgersen de566ec741 Merge pull request #912 from gerbermichi/login-hint
Pass login_hint param to Keycloak login page
2015-01-12 10:35:12 +01:00
Michael Gerber 9c484b9938 add test 2015-01-09 14:03:36 +01:00
Michael Gerber 7ce1502bc5 pass login_hint parameter to the keycloak login page 2015-01-09 11:58:44 +01:00
Marek Posolda 78d5b09b4b Merge pull request #911 from mposolda/master
Fix resolving of current hostname and logout bug
2015-01-08 11:44:08 +01:00
mposolda fff8ae9f8a KEYCLOAK-942 Incorrect condition in ResourceAdminManager could cause global logout 2015-01-08 11:09:11 +01:00
mposolda e62858cefd KEYCLOAK-900 Fix resolving of current hostname 2015-01-08 11:09:11 +01:00
Stian Thorgersen 526e25abc7 Fixes for commons-io dep issues in KeycloakServer 2015-01-08 09:53:43 +01:00
Bill Burke dc94fac9f5 Merge pull request #910 from patriot1burke/master
saml persistent and transient id support
2015-01-07 19:31:43 -05:00
Bill Burke 110783ff2f Merge remote-tracking branch 'upstream/master' 2015-01-07 19:23:47 -05:00
Bill Burke 795b1d2893 saml persistent and transient id support 2015-01-07 19:23:33 -05:00
Stian Thorgersen b7dae5c88f Fixes for regression introduced by KEYCLOAK-923 2015-01-07 14:54:18 +01:00
Stian Thorgersen 37d6a79205 Merge pull request #909 from pedroigor/master
[KEYCLOAK-928] - Validate duplicated emails when updating profile.
2015-01-07 14:20:02 +01:00
pedroigor c4892428ae [KEYCLOAK-928] - Validate duplicated emails when updating profile. 2015-01-07 11:09:40 -02:00
Stian Thorgersen 2b1ae89608 KEYCLOAK-933 expose-token setting not working - empty string returned instead of token 2015-01-07 12:58:42 +01:00
Bill Burke 2a7fc53300 Merge pull request #908 from patriot1burke/master
fix cached principal adapter
2015-01-06 15:57:56 -05:00
Marek Posolda f4c06b7cd0 Merge pull request #907 from mposolda/master
KEYCLOAK-929 Don't remove principal on session passivation
2015-01-06 19:57:32 +01:00
Bill Burke 0f4953dcd2 fix cached principal adapter 2015-01-06 13:47:02 -05:00
mposolda c7b0c4fb05 KEYCLOAK-929 Don't remove principal on session passivation 2015-01-06 19:44:07 +01:00
Stian Thorgersen 6aa0cb5e3d Merge pull request #906 from gerbermichi/email-event
add error event if mail can not be send
2015-01-06 13:45:30 +01:00
Michael Gerber 181c1c8b5b add error event if mail can not be send 2015-01-06 13:02:27 +01:00
Stian Thorgersen 74ba508e4a KEYCLOAK-918 Reverse proxy triggers NPE in undertow adapter 2015-01-06 10:14:57 +01:00
Stian Thorgersen 992455e273 KEYCLOAK-923 Login redirect should support query param in keycloak.js 2015-01-06 09:56:03 +01:00
Stian Thorgersen 6c8013182b Merge branch 'gerbermichi-reset-password' 2015-01-05 14:34:57 +01:00
Stian Thorgersen 45a1f4361e Add test 2015-01-05 14:34:08 +01:00
Stian Thorgersen 39daeca09c Merge branch 'reset-password' of https://github.com/gerbermichi/keycloak into gerbermichi-reset-password 2015-01-05 14:26:51 +01:00
gerbermichi 0c73e67372 a disabled user should not receive an email to reset the password 2015-01-05 14:07:03 +01:00
Stian Thorgersen 628437c146 KEYCLOAK-760 OAuth2 refresh token expiration date 2015-01-05 10:50:50 +01:00
Stian Thorgersen 528196f786 Merge pull request #903 from gerbermichi/reset-password-email-feature
Add redirect URI to the reset password email web service
2015-01-05 08:59:19 +01:00
Michael Gerber ec1499cdf6 Merge remote-tracking branch 'upstream/master' into reset-password-email-feature 2015-01-02 14:11:51 +01:00
Michael Gerber 019bb558d1 reset-password-email with redirect_uri and client_id 2015-01-02 14:10:44 +01:00
Stian Thorgersen 6462da2c72 Merge pull request #902 from gerbermichi/reset-password-email-fix
fix reset-password-email
2015-01-02 13:51:08 +01:00
Stian Thorgersen d1119a1c26 KEYCLOAK-830
RestEasy client proxy NullPointerException with Keycloak
2015-01-02 12:52:39 +01:00
Michael Gerber 53e18b3ebe fix reset-password-email 2015-01-02 12:52:21 +01:00
Stian Thorgersen f97b71c207 KEYCLOAK-903
No client session for direct grant
2014-12-30 13:28:08 +01:00
Stian Thorgersen a367473386 KEYCLOAK-902 State should not be required 2014-12-30 10:38:08 +01:00
Stian Thorgersen f157dd7915 Updated instructions to test on PostgreSQL 2014-12-30 10:05:27 +01:00
Stian Thorgersen 2eb2ec50e3 KEYCLOAK-885 Support Liquibase updateSQL 2014-12-29 14:40:00 +01:00
Stian Thorgersen 9d63482759 KEYCLOAK-869 Rename EventEntity time column to entity_time 2014-12-29 14:39:42 +01:00
Stian Thorgersen ebf85cf04b Add test to add/remove RequiredAction to UserTest 2014-12-29 08:56:23 +01:00
Bill Burke 3a9a7976fa Merge pull request #901 from patriot1burke/master
error page adapter support
2014-12-23 16:33:29 -05:00
Bill Burke ec9ce6ef2f error page adapter support 2014-12-23 16:33:08 -05:00
Bill Burke 30cfabb08d Merge pull request #900 from patriot1burke/master
update wildfly distro
2014-12-22 16:40:54 -05:00
Bill Burke a280c11897 update wildfly distro 2014-12-22 16:40:29 -05:00
Bill Burke 358f968429 Merge pull request #899 from patriot1burke/master
RESTEASY-901
2014-12-22 16:06:52 -05:00
Bill Burke e39ea2adaf remove redundant tests 2014-12-22 16:06:19 -05:00
Bill Burke 8a1b7e39af RESTEASY-901 2014-12-22 15:59:25 -05:00
Bill Burke af3efa547c Merge pull request #898 from gerbermichi/master
Fix the java.lang.NoClassDefFoundError: org/xnio/OptionMap error
2014-12-22 14:01:26 -05:00
Bill Burke fdbe5c879e Merge pull request #896 from ssilvert/fix-demo-readme
Fix demo readme.
2014-12-22 10:38:14 -05:00
Michael Gerber 3be930f6cf Not required authentication test cases 2014-12-21 15:32:36 +01:00
Michael Gerber bcbb658ae4 Not required authentication bugfix 2014-12-20 14:16:29 +01:00
Michael Gerber 512a68c5fa Not required authentication bugfix 2014-12-20 14:12:35 +01:00
gerbermichi 1eaafcd3d9 bugfix for excluded post rest services 2014-12-19 16:55:46 +01:00
gerbermichi 2a33b177d5 fix nio bug 2014-12-18 16:58:36 +01:00
gerbermichi 1cbf5a5d99 Merge remote-tracking branch 'upstream/master' 2014-12-18 07:54:23 +01:00
Bill Burke 28a56289d9 Merge pull request #897 from patriot1burke/master
saved requests
2014-12-17 22:29:46 -05:00
Bill Burke 08be04b337 saved requests 2014-12-17 22:29:18 -05:00
Bill Burke 519d051eb0 Merge pull request #895 from ssilvert/KEYCLOAK-880-props-in-subsys
KEYCLOAK-880 Fix use of ${..} props in subsystem XML
2014-12-17 16:08:12 -05:00
Stan Silvert fe10913780 Fix demo readme. 2014-12-17 15:55:32 -05:00
Stan Silvert 0082892f7c KEYCLOAK-880 Fix use of ${..} props in subsystem XML 2014-12-17 15:40:02 -05:00
Stian Thorgersen 3a9de56f9c KEYCLOAK-869 Time field in EventEntity should be escaped 2014-12-17 15:04:53 +01:00
Stian Thorgersen e174802b0d KEYCLOAK-825
Log out user sessions on password reset
2014-12-17 14:54:33 +01:00
Stian Thorgersen e42fe6fb23 KEYCLOAK-891 Create server info page on admin console 2014-12-17 13:24:47 +01:00
Stian Thorgersen 6cf42db584 KEYCLOAK-891 Create server info page on admin console 2014-12-17 13:21:31 +01:00
gerbermichi 2186fe32a9 Bugfix: Can not read keycloak-server.json if the path contains a space
https://issues.jboss.org/browse/KEYCLOAK-892
2014-12-17 12:32:06 +01:00
Stian Thorgersen 7886d2aecc Merge pull request #894 from stianst/master
KEYCLOAK-895 Document polyfillers for IE9 compatibility in keycloak.js
2014-12-17 12:16:21 +01:00
Stian Thorgersen 2030ab159d KEYCLOAK-895 Document polyfillers for IE9 compatibility in keycloak.js 2014-12-17 12:15:46 +01:00
Stian Thorgersen ee62f5b1a1 Merge pull request #891 from nilspreusker/ie9-compatibility
IE9 Compatibility
2014-12-17 10:56:14 +01:00
gerbermichi 0755cb6996 Bugfix: Can not read keycloak-server.json if the path contains a space
https://issues.jboss.org/browse/KEYCLOAK-892
2014-12-16 18:54:48 +01:00
gerbermichi 1650cb33c6 Merge remote-tracking branch 'upstream/master' 2014-12-16 18:50:52 +01:00
gerbermichi c34b3a8017 Bugfix: Can not read keycloak-server.json if the path contains a space
https://issues.jboss.org/browse/KEYCLOAK-892
2014-12-16 18:44:09 +01:00
Bill Burke 000a85fe99 Merge pull request #892 from patriot1burke/master
common eap code
2014-12-16 12:27:32 -05:00
Bill Burke 17a8a92bb3 common eap code 2014-12-16 12:26:56 -05:00
Nils Preusker ce1fd8eedc using JSON.stringify(...) and JSON.parse(...)
see
http://lists.jboss.org/pipermail/keycloak-user/2014-December/thread.html
#1355
2014-12-16 16:14:13 +01:00
Stian Thorgersen 919a4c661b Merge pull request #890 from stianst/master
KEYCLOAK-874
2014-12-16 15:31:33 +01:00
Stian Thorgersen cf11911f6b KEYCLOAK-874
keycloak-example-themes-dist:zip:1.1.0.Beta2 does not exist
2014-12-16 15:31:02 +01:00
Stian Thorgersen f620b04656 Merge pull request #888 from gerbermichi/master
Bugfix: Changed timezone to GMT so IE can store cookie
2014-12-16 14:38:08 +01:00
Marek Posolda a3f5ace895 Merge pull request #889 from mposolda/master
Minor improvements/fixes in documentation
2014-12-16 14:22:25 +01:00
mposolda fbe26e28f1 Minor improvements/fixes in documentation 2014-12-16 14:04:04 +01:00
Michael Gerber 9169a3df76 IE 11 does not store cookie because of wrong time zone
https://issues.jboss.org/browse/KEYCLOAK-875
2014-12-13 21:24:49 +01:00
Marek Posolda 5ee0827a84 Merge pull request #887 from mposolda/master
KEYCLOAK-879 Added missing transport element in clustering documentation
2014-12-12 12:20:06 +01:00
mposolda c4462c6de7 KEYCLOAK-879 Added missing transport element in clustering documentation 2014-12-12 12:19:24 +01:00
Bill Burke 4c6f1b6a60 Merge pull request #886 from patriot1burke/master
bump
2014-12-05 21:10:45 -05:00
Bill Burke 6c04e26376 bump 2014-12-05 21:09:38 -05:00
Bill Burke 2ba266c98a Merge pull request #885 from patriot1burke/master
bump version
2014-12-05 19:04:00 -05:00
Bill Burke c0059a875b bump version 2014-12-05 19:03:13 -05:00
Bill Burke 541f23e1bb Merge pull request #884 from patriot1burke/master
rm adapters from appliance/war-dist
2014-12-05 18:33:12 -05:00
Bill Burke b768d593a2 rm adapters from appliance/war-dist 2014-12-05 18:30:41 -05:00
Bill Burke f5fe5c8d73 Merge pull request #883 from patriot1burke/master
proxy fixes
2014-12-05 17:47:14 -05:00
Bill Burke 2350baee14 Merge remote-tracking branch 'upstream/master' 2014-12-05 17:39:12 -05:00
Bill Burke 38073d2aaa fix proxy 2014-12-05 17:38:56 -05:00
Bill Burke 78be1280d3 Merge pull request #880 from ssilvert/master
Restore old AS7 subsystem
2014-12-04 19:25:22 -05:00
Stan Silvert 952436f129 Restore old AS7 subystem. 2014-12-04 14:53:50 -05:00
Stan Silvert a3002cfee6 Remove keycloak subsystem from AS7 dist. 2014-12-04 14:53:49 -05:00
Bill Burke 85ee8f2d43 Merge pull request #882 from patriot1burke/master
bump undertow version
2014-12-04 10:18:46 -05:00
Bill Burke e94f7ca741 bump undertow version 2014-12-04 10:18:16 -05:00
Stian Thorgersen 7de0c8f78b Merge pull request #881 from rexorient/master
Added CORS preflight support for realms/<realm>/tokens/refresh
2014-12-03 08:39:29 +01:00
apenders f3adf02eea Added CORS preflight support for realms/<realm>/tokens/refresh 2014-12-02 15:33:15 -07:00
Marek Posolda f240b60d4b Merge pull request #879 from mposolda/master
Fix osgi packaging
2014-12-02 21:34:25 +01:00
mposolda cd8bee8e29 Fix osgi packaging 2014-12-02 21:33:22 +01:00
Bill Burke 2195c35c70 Merge pull request #878 from patriot1burke/master
adapter testsuite port
2014-12-02 14:39:58 -05:00
Bill Burke 090162ce8a Merge remote-tracking branch 'upstream/master' 2014-12-02 14:38:57 -05:00
Bill Burke 82c3e4c1bc adapter testsuite port and adapter fixes 2014-12-02 14:38:33 -05:00
Marek Posolda e963f7c905 Merge pull request #877 from mposolda/master
Fix eap63 distribution and docker-cluster tool
2014-12-02 20:31:03 +01:00
mposolda 2802ad4ad5 Fix eap63 distribution and docker-cluster tool 2014-12-02 20:28:27 +01:00
Marek Posolda 8eed641f79 Merge pull request #876 from mposolda/master
KEYCLOAK-863 Osgi packaging for karaf/fuse
2014-12-01 15:12:59 +01:00
mposolda bfab7361f4 KEYCLOAK-863 Osgi packaging for karaf/fuse 2014-12-01 15:10:19 +01:00
Stian Thorgersen 4afcbc0610 Merge branch 'objectiser-RTGOV-620' 2014-12-01 13:47:33 +01:00
Stian Thorgersen e069f303a4 Added full scope to app in JaxrsBasicAuthTest 2014-12-01 13:39:19 +01:00
objectiser 8e01f8ecf1 KEYCLOAK-861 Support basic authentication against user credentials managed by KeyCloak. 2014-12-01 11:43:19 +00:00
Marek Posolda 3e8495f435 Merge pull request #875 from mposolda/master
Allow login modules to be more flexible
2014-11-28 20:08:41 +01:00
mposolda c5d000cefc Allow login modules to be more flexible 2014-11-28 20:06:18 +01:00
Stian Thorgersen 5c2e7df7de Merge pull request #873 from stianst/master
Use HmacSHA256 for code signatures
2014-11-27 10:34:51 +01:00
Stian Thorgersen c1360270d0 Ignore ProxyTest 2014-11-27 10:33:54 +01:00
Stian Thorgersen a843e31c12 KEYCLOAK-862 Use HmacSHA256 for code signatures 2014-11-27 10:02:08 +01:00
Stian Thorgersen 6b3e7c76bd Merge pull request #870 from ssilvert/eap-subsys
KEYCLOAK-856 Merge WildFly and EAP subsystems
2014-11-27 10:02:01 +01:00
Bill Burke fde8316693 Merge pull request #872 from patriot1burke/master
proxy headers
2014-11-25 15:14:01 -05:00
Bill Burke 7d4f28f52d proxy headers 2014-11-25 15:13:11 -05:00
Bill Burke 8c451af3f5 Merge pull request #871 from patriot1burke/master
proxy distro and docs
2014-11-24 19:22:44 -05:00
Bill Burke e14c5adf55 Merge remote-tracking branch 'upstream/master' 2014-11-24 19:16:34 -05:00
Bill Burke cdd751a38b proxy docs 2014-11-24 19:16:20 -05:00
Bill Burke d7dfacabfa proxy testing 2014-11-24 18:31:05 -05:00
Bill Burke d0856e024f proxy distro 2014-11-24 18:12:17 -05:00
Stan Silvert 0e58378489 KEYCLOAK-856 Update docs 2014-11-24 17:22:22 -05:00
Stan Silvert d53b01eb2b KEYCLOAK-856 Rename wildfly-subsystem to keycloak-subsystem 2014-11-24 16:52:16 -05:00
Marek Posolda ba9c3c9142 Merge pull request #869 from mposolda/master
KEYCLOAK-859 Added DirectAccessGrantsLoginModule
2014-11-24 19:08:53 +01:00
mposolda 2a78d0d4d0 KEYCLOAK-859 Added DirectAccessGrantsLoginModule 2014-11-24 18:56:51 +01:00
Stan Silvert 34e18c176d KEYCLOAK-856 Remove EAP subsystem 2014-11-23 09:35:19 -05:00
Bill Burke a6f231abbf Merge pull request #868 from patriot1burke/master
proxy config
2014-11-21 18:53:23 -05:00
Bill Burke 4bad1fea86 Merge remote-tracking branch 'upstream/master' 2014-11-21 18:45:02 -05:00
Bill Burke bc6e7c249b proxy config 2 2014-11-21 18:44:39 -05:00
Marek Posolda 21eb40e2c2 Merge pull request #867 from mposolda/master
KEYCLOAK-858 avoid creating inner DeploymentDelegate for each request
2014-11-21 23:50:20 +01:00
mposolda f1378a6092 KEYCLOAK-858 avoid creating inner DeploymentDelegate for each request 2014-11-21 23:49:29 +01:00
Marek Posolda e0d884ac1a Merge pull request #866 from mposolda/master
KEYCLOAK-857 add getter/setter for principalAttribute to AdapterDeployme...
2014-11-21 22:52:39 +01:00
mposolda 829f9f4386 KEYCLOAK-857 add getter/setter for principalAttribute to AdapterDeploymentContext 2014-11-21 22:51:22 +01:00
Stan Silvert f537661341 KEYCLOAK-856 Merge WildFly and EAP subsystems 2014-11-21 13:33:14 -05:00
Marek Posolda 8abbcca76b Merge pull request #865 from mposolda/master
Minor fixes in testsuite
2014-11-21 17:46:58 +01:00
mposolda e3e47a9246 Fix location of Tomcat6 home to be inside target 2014-11-21 17:34:30 +01:00
mposolda 96d430cd7e Fix CookieTokenStoreAdapterTest sometimes failing 2014-11-21 17:34:30 +01:00
Bill Burke b53707a129 Merge pull request #864 from patriot1burke/master
proxy constraints
2014-11-21 11:21:23 -05:00
Bill Burke 3a95401086 proxy constraints 2014-11-21 11:20:47 -05:00
Bill Burke 0143d71728 Merge pull request #863 from patriot1burke/master
proxy
2014-11-20 21:55:49 -05:00
Bill Burke 21279fc9ed proxy 2014-11-20 21:48:59 -05:00
Stian Thorgersen 0327bc0d5a Merge pull request #862 from stianst/master
KEYCLOAK-791 Denial of Service by invalid character injection
2014-11-18 14:59:01 +01:00
Stian Thorgersen ed1073ca92 KEYCLOAK-791 Denial of Service by invalid character injection 2014-11-18 14:58:20 +01:00
Bill Burke ca946d4b19 Merge pull request #860 from carljmosca/master
added support for Tivoli LDAP unique identifier
2014-11-17 10:52:50 -05:00
Bill Burke 7244e2f173 Merge pull request #859 from patriot1burke/master
tomcat6
2014-11-15 12:00:18 -05:00
Bill Burke 5be045c42b tomcat6 2014-11-15 11:59:33 -05:00
Marek Posolda a991ccf909 Merge pull request #858 from mposolda/master
Fixes to login module
2014-11-15 00:14:57 +01:00
mposolda b08930961f Fixes to login module 2014-11-14 21:06:07 +01:00
Bill Burke e01c634ed7 Merge remote-tracking branch 'upstream/master' 2014-11-14 09:20:17 -05:00
Bill Burke 46983d68f3 move ServerCookie to core 2014-11-14 09:20:03 -05:00
Marek Posolda 4ebca3ca43 Merge pull request #857 from mposolda/master
KEYCLOAK-853 Added jaas login module BearerTokenLoginModule
2014-11-14 13:40:58 +01:00
mposolda 68bff44b2e KEYCLOAK-853 Added jaas login module BearerTokenLoginModule 2014-11-14 13:40:12 +01:00
Carl J. Mosca aedbb8eb87 added support for Tivoli LDAP unique identifier 2014-11-13 16:17:40 -05:00
Bill Burke 41c6aacce8 Merge pull request #856 from patriot1burke/master
tomcat 8
2014-11-12 19:04:04 -05:00
Bill Burke a65560c5e6 tomcat8 2014-11-12 19:03:22 -05:00
Bill Burke e2045907d4 tomcat8 2014-11-12 18:56:18 -05:00
Bill Burke f552057b06 Merge remote-tracking branch 'upstream/master' 2014-11-12 15:38:05 -05:00
Bill Burke 81dc076bae Merge pull request #855 from ssilvert/subsys-enhancements
KEYCLOAK-839 Auth Server overlay enhancements
2014-11-12 15:37:39 -05:00
Stan Silvert 67c0182a49 KEYCLOAK-839 Auth Server overlay enhancements 2014-11-12 13:39:39 -05:00
Stan Silvert c85a31be7f KEYCLOAK-839 Auth Server overlay enhancements 2014-11-12 13:39:38 -05:00
Bill Burke ac2b8af172 overview update 2014-11-12 11:00:48 -05:00
Bill Burke 8b515ae625 Merge pull request #854 from patriot1burke/master
jetty 8 support
2014-11-12 10:44:53 -05:00
Bill Burke 9a622a05b1 jetty 8 docs 2014-11-12 10:44:20 -05:00
Bill Burke eccb295076 fix jsps with bad import 2014-11-12 10:34:21 -05:00
Bill Burke dd8c40b0d8 last jetty8 stuff 2014-11-12 10:32:37 -05:00
Bill Burke 25740508b5 fix artifact 2014-11-12 10:08:42 -05:00
Bill Burke 7f23c0dff8 Merge pull request #853 from patriot1burke/master
fix JWS impl, fix contributor SAML PR
2014-11-11 22:10:10 -05:00
Bill Burke 5c6dd8e0c3 temp fix for contributor SAML PR 2014-11-11 22:09:38 -05:00
Bill Burke 3b347d5f52 Merge remote-tracking branch 'upstream/master' 2014-11-11 21:28:49 -05:00
Bill Burke 0636cd898f fix incorrect JWS implementation 2014-11-11 21:28:35 -05:00
Bill Burke 43cb52b319 Merge pull request #852 from eivim/master
Add SAML NameID Formats and include certificate in signature
2014-11-11 20:42:29 -05:00
Eivind Mikkelsen 24a2773524 Add SAML NameID Formats and include certificate in signature
The NameID Format in the AuthnRequest NameIDPolicy is now respected,
and support has been added for the following NameID Formats:

  - urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
  - urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
  - urn:oasis:names:tc:SAML:2.0:nameid-format:transient

The persistent NameID format was previously used in all responses
and mapped to the principal's username. Now, unspecified is mapped
to the principal's username and used by default if no NameIDPolicy
is specified by the SP.

The persistent format requires generating a pseudo-random identifier
that must be generated by the IdP on first login and stored in the
user's profile. Persistent NameID Format is not yet implemented.

The certificate is now added to the signature to enable support for
integration with Service Providers where only the IdP's certificate
fingerprint is configured (e.g. Zendesk).
2014-11-12 01:24:51 +01:00
Marek Posolda 7f29d4c247 Merge pull request #851 from mposolda/pl-upgrade
PL upgrade to 2.7.0.CR2 and ldap improvements
2014-11-11 15:20:46 +01:00
mposolda 279a70bcb8 Fix failing tests 2014-11-11 15:17:32 +01:00
mposolda 2f0498bb7f KEYCLOAK-827 add entryDN as one of attributes, which can be mapped to username 2014-11-11 13:20:12 +01:00
mposolda 64e777a4f4 Upgrade to picketlink 2.7.0.CR2 and minor LDAP improvements 2014-11-11 12:58:49 +01:00
Bill Burke 3fd8cd66d6 Merge pull request #850 from patriot1burke/master
update readme
2014-11-10 17:11:29 -05:00
Bill Burke d72bcebdf0 update readme 2014-11-10 17:11:07 -05:00
Bill Burke 7e9dbce259 Merge pull request #849 from patriot1burke/master
jetty 8
2014-11-10 17:09:39 -05:00
Bill Burke 3b6f10913c merge 2014-11-10 17:09:00 -05:00
Bill Burke 3fbffc9d7d jetty 8 2014-11-10 16:59:31 -05:00
Marek Posolda b4e0a1e6f5 Merge pull request #848 from mposolda/fuse
KEYCLOAK-835 KEYCLOAK-836
2014-11-10 22:26:11 +01:00
mposolda 63198288df Add jetty modules to distribution 2014-11-10 22:16:20 +01:00
mposolda 07fd8ae9d7 KEYCLOAK-836 Added OsgiJaxrsBearerTokenFilterImpl to be used in fuse 2014-11-10 22:16:20 +01:00
mposolda a94ab5883d KEYCLOAK-835 Move AdapterConstants to different package 2014-11-10 22:16:20 +01:00
mposolda d1e819cef1 KEYCLOAK-836 Refactoring of JaxrsBearerTokenFilter to work with both resteasy and Apache CXF. Added test 2014-11-10 22:16:14 +01:00
Bill Burke ebb795af5a Merge pull request #847 from patriot1burke/master
Jetty 9.x adapters
2014-11-07 21:11:24 -05:00
Bill Burke b0a5161e6b final jetty stuff 2014-11-07 21:10:15 -05:00
Bill Burke 3805510e20 more jetty adapter 2014-11-07 18:34:53 -05:00
Bill Burke 31050e0580 Merge pull request #811 from ssilvert/deploy-auth-in-subsys
KEYCLOAK-795 Move Auth Server into Keycloak Subsystem
2014-11-06 17:57:19 -05:00
Bill Burke 2e9f1908f0 Merge pull request #846 from patriot1burke/master
document truststore classpath:
2014-11-06 17:46:21 -05:00
Bill Burke f12cd5fa09 document truststore classpath: 2014-11-06 17:46:01 -05:00
Bill Burke b487d6c836 Merge pull request #844 from Monezz/master
KEYCLOAK-829 Support loading keystore from classpath
2014-11-06 17:39:37 -05:00
Bill Burke 47ea0f5e23 Merge pull request #845 from patriot1burke/master
jetty adapter
2014-11-06 17:36:48 -05:00
Bill Burke d77f1f090f merge for jetty 2014-11-06 17:36:22 -05:00
Bill Burke 666851a44a Merge remote-tracking branch 'upstream/master' 2014-11-06 17:27:44 -05:00
Bill Burke cd25d7019b jetty adapter 2014-11-06 17:27:31 -05:00
Timon Veenstra 7c9e3f4555 KEYCLOAK-829 Adjustment to KetstoreUtil to support loading keystore from classpath 2014-11-06 21:43:49 +01:00
Marek Posolda c0f377c8c7 Merge pull request #841 from jpkrohling/JPK-KEYCLOAK-821
KEYCLOAK-821 - Support for comma-separated list of file names to import.
2014-11-06 20:32:31 +01:00
Stian Thorgersen 4a38b04e3e Merge pull request #843 from stianst/master
KEYCLOAK-824 Wrong digit shown in Invalid Password message
2014-11-06 13:08:42 +01:00
Stian Thorgersen 9343cf2aca KEYCLOAK-824 Wrong digit shown in Invalid Password message 2014-11-06 12:30:24 +01:00
Marek Posolda 3d70bae994 Merge pull request #842 from mposolda/master
KEYCLOAK-822 More mandatory fields in LDAP configuration in admin consol...
2014-11-05 17:20:31 +01:00
mposolda 8895d0b91e KEYCLOAK-822 More mandatory fields in LDAP configuration in admin console 2014-11-05 17:14:03 +01:00
Juraci Paixão Kröhling cd0ad70952 KEYCLOAK-821 - Support for comma-separated list of file names to import. 2014-11-05 17:04:17 +01:00
Stian Thorgersen 5041d6ed80 Merge pull request #840 from stianst/master
KEYCLOAK-820  Don't expose realm private key through admin endpoints
2014-11-05 15:35:32 +01:00
Stian Thorgersen e7625c2bb1 KEYCLOAK-820 Don't expose realm private key through admin endpoints 2014-11-05 15:34:56 +01:00
Stan Silvert 63712039e7 KEYCLOAK-795: Update CLI 2014-11-05 08:31:09 -05:00
Stan Silvert aa55a86ff6 KEYCLOAK-795 Update documentation. Add latest version of CLI to appliance
dist.
2014-11-05 08:31:08 -05:00
Stan Silvert e8e50d2d1c KEYCLOAK-795 Cleanup appliance dist. 2014-11-05 08:31:07 -05:00
Stan Silvert 3f75ebf029 KEYCLOAK-795 Move Auth Server into Keycloak Subsystem 2014-11-05 08:31:07 -05:00
Stan Silvert f9215e961d Incremental commit because I haven't done one in awhile. 2014-11-05 08:31:06 -05:00
Stan Silvert 4776582a6a Old experiment with keycloak-server.json embedded into standalone.xml 2014-11-05 08:31:05 -05:00
Stian Thorgersen 5091e07555 Fix label for certificate on realm-keys page 2014-11-05 13:57:27 +01:00
Stian Thorgersen 5943af79af Update pom for 'examples/demo-template/example-ear' to not deploy to repo 2014-11-05 13:54:14 +01:00
Stian Thorgersen 875e9ba513 Merge pull request #839 from jpkrohling/JPK-Wildfly-Adapter-Dist-Zip-Bug
KEYCLOAK-816 Removed undertow-adapter as dependency from wildfly-adapter-zip
2014-11-05 13:14:04 +01:00
Juraci Paixão Kröhling 8c8f82d0fd KEYCLOAK-816 - Removed undertow-adapter as dependency from wildfly-adapter-zip 2014-11-05 12:15:37 +01:00
Bill Burke 00167ee76a Merge pull request #838 from patriot1burke/master
doclet fix
2014-11-04 16:05:44 -05:00
Bill Burke 9c175bfb5d Merge remote-tracking branch 'upstream/master' 2014-11-04 15:55:47 -05:00
Bill Burke ede59a4441 fix jax-doclets 2014-11-04 15:55:33 -05:00
Stian Thorgersen e91129db92 Merge pull request #837 from stianst/master
Fixes
2014-11-04 16:00:54 +01:00
Stian Thorgersen ebf04c01c6 Fix version in pom for admin-client 2014-11-04 15:57:14 +01:00
Stian Thorgersen 797c2762c8 Fix for sybase 2014-11-04 14:47:51 +01:00
Stian Thorgersen cfb6fb3d06 Update to server-installation.xml 2014-11-04 14:31:07 +01:00
Stian Thorgersen a147136db0 Minor updates to admin-client and multi-tenant examples 2014-11-04 14:22:07 +01:00
Stian Thorgersen 7327423a03 Fix ResetPasswordTest 2014-11-04 13:05:50 +01:00
Stian Thorgersen 91529ef6fd Fix MultiTenancyTest 2014-11-04 13:05:44 +01:00
Stian Thorgersen 431fa29ef1 Use relative urls for multi-tenant example 2014-11-04 10:33:49 +01:00
Stian Thorgersen 1797f7e704 KEYCLOAK-814 Admin Client Example 2014-11-04 10:33:42 +01:00
Stian Thorgersen 0f8c073354 Version bump 2014-11-04 09:01:06 +01:00
768 changed files with 25914 additions and 2923 deletions

No files matched your search

+2 -1
View File
@@ -9,10 +9,11 @@
.settings
.classpath
# NetBeans #
############
nbactions.xml
nb-configuration.xml
catalog.xml
# Compiled source #
###################
+8
View File
@@ -0,0 +1,8 @@
language: java
cache:
directories:
- $HOME/.m2
sudo: false
after_script: 'misc/.travis/after.sh'
+2 -2
View File
@@ -12,7 +12,7 @@ Here's some of the features:
* Social Broker. Enable Google, Facebook, Yahoo, Twitter social login with no code required.
* Optional LDAP/Active Directory integration
* Optional User Registration
* Password and TOTP support (via Google Authenticator). Client cert auth coming soon.
* Password and TOTP support (via Google Authenticator or FreeOTP). Client cert auth coming soon.
* User session management from both admin and user perspective
* Customizable themes for user facing pages: login, grant pages, account management, emails, and admin console all customizable!
* OAuth Bearer token auth for REST Services
@@ -24,7 +24,7 @@ Here's some of the features:
* Completely centrally managed user and role mapping metadata. Minimal configuration at the application side
* Admin Console for managing users, roles, role mappings, applications, user sessions, allowed CORS web origins, and OAuth clients.
* Deployable as a WAR, appliance, or an Openshift cloud service (SaaS).
* Supports JBoss AS7, EAP 6.x, and Wildfly applications. Plans to support Node.js, RAILS, GRAILS, and other non-Java applications.
* Supports JBoss AS7, EAP 6.x, Wildfly, Tomcat, and Jetty applications. Plans to support Node.js, RAILS, GRAILS, and other non-Java applications.
* Javascript/HTML 5 adapter for pure Javascript apps
* Session management from admin console
* Revocation policies
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -7,8 +7,11 @@ import liquibase.exception.CustomChangeException;
import liquibase.exception.SetupException;
import liquibase.exception.ValidationErrors;
import liquibase.resource.ResourceAccessor;
import liquibase.snapshot.SnapshotGeneratorFactory;
import liquibase.statement.SqlStatement;
import liquibase.statement.core.UpdateStatement;
import liquibase.structure.core.Schema;
import liquibase.structure.core.Table;
import org.keycloak.models.utils.KeycloakModelUtils;
import java.sql.Connection;
@@ -29,25 +32,28 @@ public class AddRealmCodeSecret implements CustomSqlChange {
sb.append("Generated codeSecret for realms: ");
Connection connection = ((JdbcConnection) (database.getConnection())).getWrappedConnection();
ResultSet resultSet = connection.createStatement().executeQuery("SELECT ID FROM REALM WHERE CODE_SECRET IS NULL");
ArrayList<SqlStatement> statements = new ArrayList<SqlStatement>();
while (resultSet.next()) {
String id = resultSet.getString(1);
UpdateStatement statement = new UpdateStatement(null, null, "REALM")
.addNewColumnValue("CODE_SECRET", KeycloakModelUtils.generateCodeSecret())
.setWhereClause("ID='" + id + "'");
statements.add(statement);
String correctedTableName = database.correctObjectName("REALM", Table.class);
if (SnapshotGeneratorFactory.getInstance().has(new Table().setName(correctedTableName), database)) {
ResultSet resultSet = connection.createStatement().executeQuery("SELECT ID FROM REALM WHERE CODE_SECRET IS NULL");
while (resultSet.next()) {
String id = resultSet.getString(1);
if (!resultSet.isFirst()) {
sb.append(", ");
UpdateStatement statement = new UpdateStatement(null, null, correctedTableName)
.addNewColumnValue("CODE_SECRET", KeycloakModelUtils.generateCodeSecret())
.setWhereClause("ID='" + id + "'");
statements.add(statement);
if (!resultSet.isFirst()) {
sb.append(", ");
}
sb.append(id);
}
sb.append(id);
}
if (!statements.isEmpty()) {
confirmationMessage = sb.toString();
if (!statements.isEmpty()) {
confirmationMessage = sb.toString();
}
}
return statements.toArray(new SqlStatement[statements.size()]);
@@ -46,7 +46,7 @@
<column name="CODE_SECRET" type="VARCHAR(255)"/>
</addColumn>
<addColumn tableName="CLIENT">
<column name="NODE_REREG_TIMEOUT" type="INT" defaultValue="0"/>
<column name="NODE_REREG_TIMEOUT" type="INT" defaultValueNumeric="0"/>
</addColumn>
<addPrimaryKey columnNames="CLIENT_ID, NAME" constraintName="CONSTRAINT_3C" tableName="CLIENT_ATTRIBUTES"/>
<addPrimaryKey columnNames="CLIENT_SESSION, NAME" constraintName="CONSTRAINT_5E" tableName="CLIENT_SESSION_NOTE"/>
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.2.xsd">
<changeSet author="sthorger@redhat.com" id="1.1.0.Final">
<renameColumn tableName="EVENT_ENTITY" oldColumnName="TIME" newColumnName="EVENT_TIME" columnDataType="BIGINT"/>
</changeSet>
</databaseChangeLog>
@@ -2,4 +2,5 @@
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.2.xsd">
<include file="META-INF/jpa-changelog-1.0.0.Final.xml"/>
<include file="META-INF/jpa-changelog-1.1.0.Beta1.xml"/>
<include file="META-INF/jpa-changelog-1.1.0.Final.xml"/>
</databaseChangeLog>
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -117,6 +117,10 @@ public class DefaultJpaConnectionProviderFactory implements JpaConnectionProvide
logger.trace("Updating database");
JpaUpdaterProvider updater = session.getProvider(JpaUpdaterProvider.class);
if (updater == null) {
throw new RuntimeException("Can't update database: JPA updater provider not found");
}
connection = getConnection();
if (databaseSchema.equals("update")) {
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -9,7 +9,7 @@ import org.keycloak.connections.mongo.api.types.MapperRegistry;
import org.keycloak.connections.mongo.impl.EntityInfo;
import org.keycloak.connections.mongo.impl.MongoStoreImpl;
import org.keycloak.models.utils.reflection.Property;
import org.keycloak.models.utils.reflection.Types;
import org.keycloak.util.reflections.Types;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
+1 -1
View File
@@ -3,7 +3,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
</parent>
<name>Connections Parent</name>
<description/>
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -31,7 +31,7 @@ public class SkeletonKeyContextResolver implements ContextResolver<ObjectMapper>
@Override
public ObjectMapper getContext(Class<?> type) {
if (type.getPackage().getName().startsWith(getClass().getPackage().getName())) return mapper;
if (type.getPackage() != null && type.getPackage().getName().startsWith(getClass().getPackage().getName())) return mapper;
return null;
}
}
+42 -1
View File
@@ -4,18 +4,26 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-core</artifactId>
<name>Keycloak Core</name>
<packaging>jar</packaging>
<description/>
<properties>
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
<keycloak.osgi.export>
org.keycloak.*
</keycloak.osgi.export>
<keycloak.osgi.import>
net.iharder;version=${base64.version},
*;resolution:=optional
</keycloak.osgi.import>
</properties>
<dependencies>
<dependency>
@@ -60,6 +68,39 @@
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
</execution>
</executions>
<configuration>
<instructions>
<Bundle-ClassPath>.</Bundle-ClassPath>
<Bundle-Name>${project.name}</Bundle-Name>
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
<Import-Package>${keycloak.osgi.import}</Import-Package>
<Export-Package>${keycloak.osgi.export}</Export-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
@@ -1,4 +1,4 @@
package org.keycloak.adapters;
package org.keycloak.constants;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
@@ -0,0 +1,10 @@
package org.keycloak.constants;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class GenericConstants {
public static final String PROTOCOL_CLASSPATH = "classpath:";
}
@@ -1,4 +1,4 @@
package org.keycloak;
package org.keycloak.constants;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
@@ -58,81 +58,148 @@ public class JWSBuilder {
}
}
protected String encode(Algorithm alg, byte[] data, byte[] signature) {
StringBuffer encoding = new StringBuffer();
encoding.append(encodeHeader(alg));
protected String encodeAll(StringBuffer encoding, byte[] signature) {
encoding.append('.');
encoding.append(Base64Url.encode(data));
encoding.append('.');
if (alg != Algorithm.none) {
if (signature != null) {
encoding.append(Base64Url.encode(signature));
}
return encoding.toString();
}
protected void encode(Algorithm alg, byte[] data, StringBuffer encoding) {
encoding.append(encodeHeader(alg));
encoding.append('.');
encoding.append(Base64Url.encode(data));
}
protected byte[] marshalContent() {
return contentBytes;
}
public class EncodingBuilder {
public String none() {
StringBuffer buffer = new StringBuffer();
byte[] data = marshalContent();
return encode(Algorithm.none, data, null);
encode(Algorithm.none, data, buffer);
return encodeAll(buffer, null);
}
public String rsa256(PrivateKey privateKey) {
StringBuffer buffer = new StringBuffer();
byte[] data = marshalContent();
byte[] signature = RSAProvider.sign(data, Algorithm.RS256, privateKey);
return encode(Algorithm.RS256, data, signature);
encode(Algorithm.RS256, data, buffer);
byte[] signature = null;
try {
signature = RSAProvider.sign(buffer.toString().getBytes("UTF-8"), Algorithm.RS256, privateKey);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
return encodeAll(buffer, signature);
}
public String rsa384(PrivateKey privateKey) {
StringBuffer buffer = new StringBuffer();
byte[] data = marshalContent();
byte[] signature = RSAProvider.sign(data, Algorithm.RS384, privateKey);
return encode(Algorithm.RS384, data, signature);
encode(Algorithm.RS384, data, buffer);
byte[] signature = null;
try {
signature = RSAProvider.sign(buffer.toString().getBytes("UTF-8"), Algorithm.RS384, privateKey);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
return encodeAll(buffer, signature);
}
public String rsa512(PrivateKey privateKey) {
StringBuffer buffer = new StringBuffer();
byte[] data = marshalContent();
byte[] signature = RSAProvider.sign(data, Algorithm.RS512, privateKey);
return encode(Algorithm.RS512, data, signature);
encode(Algorithm.RS512, data, buffer);
byte[] signature = null;
try {
signature = RSAProvider.sign(buffer.toString().getBytes("UTF-8"), Algorithm.RS512, privateKey);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
return encodeAll(buffer, signature);
}
public String hmac256(byte[] sharedSecret) {
StringBuffer buffer = new StringBuffer();
byte[] data = marshalContent();
byte[] signature = HMACProvider.sign(data, Algorithm.HS256, sharedSecret);
return encode(Algorithm.HS256, data, signature);
encode(Algorithm.HS256, data, buffer);
byte[] signature = null;
try {
signature = HMACProvider.sign(buffer.toString().getBytes("UTF-8"), Algorithm.HS256, sharedSecret);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
return encodeAll(buffer, signature);
}
public String hmac384(byte[] sharedSecret) {
StringBuffer buffer = new StringBuffer();
byte[] data = marshalContent();
byte[] signature = HMACProvider.sign(data, Algorithm.HS384, sharedSecret);
return encode(Algorithm.HS384, data, signature);
encode(Algorithm.HS384, data, buffer);
byte[] signature = null;
try {
signature = HMACProvider.sign(buffer.toString().getBytes("UTF-8"), Algorithm.HS384, sharedSecret);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
return encodeAll(buffer, signature);
}
public String hmac512(byte[] sharedSecret) {
StringBuffer buffer = new StringBuffer();
byte[] data = marshalContent();
byte[] signature = HMACProvider.sign(data, Algorithm.HS512, sharedSecret);
return encode(Algorithm.HS512, data, signature);
encode(Algorithm.HS512, data, buffer);
byte[] signature = null;
try {
signature = HMACProvider.sign(buffer.toString().getBytes("UTF-8"), Algorithm.HS512, sharedSecret);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
return encodeAll(buffer, signature);
}
public String hmac256(SecretKey sharedSecret) {
StringBuffer buffer = new StringBuffer();
byte[] data = marshalContent();
byte[] signature = HMACProvider.sign(data, Algorithm.HS256, sharedSecret);
return encode(Algorithm.HS256, data, signature);
encode(Algorithm.HS256, data, buffer);
byte[] signature = null;
try {
signature = HMACProvider.sign(buffer.toString().getBytes("UTF-8"), Algorithm.HS256, sharedSecret);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
return encodeAll(buffer, signature);
}
public String hmac384(SecretKey sharedSecret) {
StringBuffer buffer = new StringBuffer();
byte[] data = marshalContent();
byte[] signature = HMACProvider.sign(data, Algorithm.HS384, sharedSecret);
return encode(Algorithm.HS384, data, signature);
encode(Algorithm.HS384, data, buffer);
byte[] signature = null;
try {
signature = HMACProvider.sign(buffer.toString().getBytes("UTF-8"), Algorithm.HS384, sharedSecret);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
return encodeAll(buffer, signature);
}
public String hmac512(SecretKey sharedSecret) {
StringBuffer buffer = new StringBuffer();
byte[] data = marshalContent();
byte[] signature = HMACProvider.sign(data, Algorithm.HS512, sharedSecret);
return encode(Algorithm.HS512, data, signature);
encode(Algorithm.HS512, data, buffer);
byte[] signature = null;
try {
signature = HMACProvider.sign(buffer.toString().getBytes("UTF-8"), Algorithm.HS512, sharedSecret);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
return encodeAll(buffer, signature);
}
}
}
@@ -15,6 +15,7 @@ public class JWSInput {
String encodedHeader;
String encodedContent;
String encodedSignature;
String encodedSignatureInput;
JWSHeader header;
byte[] content;
byte[] signature;
@@ -26,6 +27,7 @@ public class JWSInput {
if (parts.length < 2 || parts.length > 3) throw new IllegalArgumentException("Parsing error");
encodedHeader = parts[0];
encodedContent = parts[1];
encodedSignatureInput = encodedHeader + '.' + encodedContent;
try {
content = Base64Url.decode(encodedContent);
if (parts.length > 2) {
@@ -55,6 +57,9 @@ public class JWSInput {
public String getEncodedSignature() {
return encodedSignature;
}
public String getEncodedSignatureInput() {
return encodedSignatureInput;
}
public JWSHeader getHeader() {
return header;
@@ -74,7 +74,7 @@ public class HMACProvider {
public static boolean verify(JWSInput input, byte[] sharedSecret) {
try {
byte[] signature = sign(input.getContent(), input.getHeader().getAlgorithm(), sharedSecret);
byte[] signature = sign(input.getEncodedSignatureInput().getBytes("UTF-8"), input.getHeader().getAlgorithm(), sharedSecret);
String x = Base64Url.encode(signature);
return x.equals(input.getEncodedSignature());
} catch (Exception e) {
@@ -49,7 +49,7 @@ public class RSAProvider {
try {
Signature verifier = getSignature(input.getHeader().getAlgorithm());
verifier.initVerify(publicKey);
verifier.update(input.getContent());
verifier.update(input.getEncodedSignatureInput().getBytes("UTF-8"));
return verifier.verify(input.getSignature());
} catch (Exception e) {
throw new RuntimeException(e);
@@ -15,6 +15,9 @@ public class AccessTokenResponse {
@JsonProperty("expires_in")
protected long expiresIn;
@JsonProperty("refresh_expires_in")
protected long refreshExpiresIn;
@JsonProperty("refresh_token")
protected String refreshToken;
@@ -46,6 +49,14 @@ public class AccessTokenResponse {
this.expiresIn = expiresIn;
}
public long getRefreshExpiresIn() {
return refreshExpiresIn;
}
public void setRefreshExpiresIn(long refreshExpiresIn) {
this.refreshExpiresIn = refreshExpiresIn;
}
public String getRefreshToken() {
return refreshToken;
}
@@ -16,7 +16,7 @@ import java.util.Map;
"resource", "public-client", "credentials",
"use-resource-role-mappings",
"enable-cors", "cors-max-age", "cors-allowed-methods",
"expose-token", "bearer-only"})
"expose-token", "bearer-only", "enable-basic-auth"})
public class BaseAdapterConfig extends BaseRealmConfig {
@JsonProperty("resource")
protected String resource;
@@ -34,6 +34,8 @@ public class BaseAdapterConfig extends BaseRealmConfig {
protected boolean exposeToken;
@JsonProperty("bearer-only")
protected boolean bearerOnly;
@JsonProperty("enable-basic-auth")
protected boolean enableBasicAuth;
@JsonProperty("public-client")
protected boolean publicClient;
@JsonProperty("credentials")
@@ -97,12 +99,20 @@ public class BaseAdapterConfig extends BaseRealmConfig {
}
public boolean isBearerOnly() {
return bearerOnly;
}
return bearerOnly;
}
public void setBearerOnly(boolean bearerOnly) {
this.bearerOnly = bearerOnly;
}
this.bearerOnly = bearerOnly;
}
public boolean isEnableBasicAuth() {
return enableBasicAuth;
}
public void setEnableBasicAuth(boolean enableBasicAuth) {
this.enableBasicAuth = enableBasicAuth;
}
public Map<String, String> getCredentials() {
return credentials;
@@ -19,6 +19,9 @@ import java.util.Date;
* @version $Revision: 1 $
*/
public class CertificateUtils {
static {
BouncyIntegration.init();
}
public static X509Certificate generateV3Certificate(KeyPair keyPair, PrivateKey caPrivateKey, X509Certificate caCert, String subject) throws Exception {
X509V3CertificateGenerator certGen = new X509V3CertificateGenerator();
@@ -8,29 +8,67 @@ import java.net.UnknownHostException;
*/
public class HostUtils {
// Best effort to find the most proper hostname of this server.
public static String getHostName() {
String jbossHostName = System.getProperty("jboss.host.name");
if (jbossHostName != null) {
return jbossHostName;
} else {
try {
return InetAddress.getLocalHost().getHostName();
} catch (UnknownHostException uhe) {
throw new IllegalStateException(uhe);
}
}
return getHostNameImpl().trim().toLowerCase();
}
public static String getIpAddress() {
try {
String jbossHostName = System.getProperty("jboss.host.name");
if (jbossHostName != null) {
return InetAddress.getByName(jbossHostName).getHostAddress();
} else {
return java.net.InetAddress.getLocalHost().getHostAddress();
}
String hostname = getHostName();
return InetAddress.getByName(hostname).getHostAddress();
} catch (UnknownHostException uhe) {
throw new IllegalStateException(uhe);
}
}
private static String getHostNameImpl() {
// Return bind address if available
String bindAddr = System.getProperty("jboss.bind.address");
if (bindAddr != null && !bindAddr.trim().equals("0.0.0.0")) {
return bindAddr;
}
// Fallback to qualified name
String qualifiedHostName = System.getProperty("jboss.qualified.host.name");
if (qualifiedHostName != null) {
return qualifiedHostName;
}
// If not on jboss env, let's try other possible fallbacks
// POSIX-like OSes including Mac should have this set
qualifiedHostName = System.getenv("HOSTNAME");
if (qualifiedHostName != null) {
return qualifiedHostName;
}
// Certain versions of Windows
qualifiedHostName = System.getenv("COMPUTERNAME");
if (qualifiedHostName != null) {
return qualifiedHostName;
}
try {
return NetworkUtils.canonize(getLocalHost().getHostName());
} catch (UnknownHostException uhe) {
uhe.printStackTrace();
return "unknown-host.unknown-domain";
}
}
/**
* Methods returns InetAddress for localhost
*
* @return InetAddress of the localhost
* @throws UnknownHostException if localhost could not be resolved
*/
private static InetAddress getLocalHost() throws UnknownHostException {
InetAddress addr;
try {
addr = InetAddress.getLocalHost();
} catch (ArrayIndexOutOfBoundsException e) { //this is workaround for mac osx bug see AS7-3223 and JGRP-1404
addr = InetAddress.getByName(null);
}
return addr;
}
}
@@ -2,21 +2,24 @@ package org.keycloak.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.KeyStore;
import org.keycloak.constants.GenericConstants;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class KeystoreUtil {
public static KeyStore loadKeyStore(String filename, String password) throws Exception {
KeyStore trustStore = KeyStore.getInstance(KeyStore
.getDefaultType());
File truststoreFile = new File(filename);
FileInputStream trustStream = new FileInputStream(truststoreFile);
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
InputStream trustStream = (filename.startsWith(GenericConstants.PROTOCOL_CLASSPATH))
?KeystoreUtil.class.getResourceAsStream(filename.replace(GenericConstants.PROTOCOL_CLASSPATH, ""))
:new FileInputStream(new File(filename));
trustStore.load(trustStream, password.toCharArray());
trustStream.close();
return trustStore;
}
}
@@ -0,0 +1,446 @@
package org.keycloak.util;
/*
* JBoss, Home of Professional Open Source.
* Copyright 2011, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.util.Arrays;
import java.util.Locale;
/**
* Utility methods related to networking.
*
* @author Brian Stansberry (c) 2011 Red Hat Inc.
*/
public class NetworkUtils {
private static final int MAX_GROUP_LENGTH = 4;
private static final int IPV6_LEN = 8;
private static final boolean can_bind_to_mcast_addr; // are we running on Linux ?
static {
can_bind_to_mcast_addr = checkForLinux() || checkForSolaris() || checkForHp();
}
public static String formatPossibleIpv6Address(String address) {
if(address == null) {
return null;
}
String ipv6Address;
if (address.startsWith("[") && address.endsWith("]")) {
ipv6Address = address.substring(0, address.lastIndexOf(']')).substring(1);
} else {
ipv6Address = address;
}
// Definitely not an IPv6, return untouched input.
if (!mayBeIPv6Address(ipv6Address)) {
return ipv6Address;
}
return '[' + canonize(ipv6Address) + ']';
}
/**
* <p>Convert IPv6 adress into RFC 5952 form.
* E.g. 2001:db8:0:1:0:0:0:1 -> 2001:db8:0:1::1</p>
*
* <p>Method is null safe, and if IPv4 address or host name is passed to the
* method it is returned wihout any processing.</p>
*
* <p>Method also supports IPv4 in IPv6 (e.g. 0:0:0:0:0:ffff:192.0.2.1 ->
* ::ffff:192.0.2.1), and zone ID (e.g. fe80:0:0:0:f0f0:c0c0:1919:1234%4
* -> fe80::f0f0:c0c0:1919:1234%4).</p>
*
* @param ipv6Address String representing valid IPv6 address.
* @return String representing IPv6 in canonical form.
* @throws IllegalArgumentException if IPv6 format is unacceptable.
*/
public static String canonize(String ipv6Address) throws IllegalArgumentException {
if (ipv6Address == null) {
return null;
}
// Definitely not an IPv6, return untouched input.
if (!mayBeIPv6Address(ipv6Address)) {
return ipv6Address;
}
// Length without zone ID (%zone) or IPv4 address
int ipv6AddressLength = ipv6Address.length();
if (isIPv4AddressInIPv6(ipv6Address)) {
// IPv4 in IPv6
// e.g. 0:0:0:0:0:FFFF:127.0.0.1
int lastColonPos = ipv6Address.lastIndexOf(":");
int lastColonsPos = ipv6Address.lastIndexOf("::");
if (lastColonsPos >= 0 && lastColonPos == lastColonsPos + 1) {
// IPv6 part ends with two consecutive colons, last colon is part of IPv6 format.
// e.g. ::127.0.0.1
ipv6AddressLength = lastColonPos + 1;
} else {
// IPv6 part ends with only one colon, last colon is not part of IPv6 format.
// e.g. ::FFFF:127.0.0.1
ipv6AddressLength = lastColonPos;
}
} else if (ipv6Address.contains(":") && ipv6Address.contains("%")) {
// Zone ID
// e.g. fe80:0:0:0:f0f0:c0c0:1919:1234%4
ipv6AddressLength = ipv6Address.lastIndexOf("%");
}
StringBuilder result = new StringBuilder();
char [][] groups = new char[IPV6_LEN][MAX_GROUP_LENGTH];
int groupCounter = 0;
int charInGroupCounter = 0;
// Index of the current zeroGroup, -1 means not found.
int zeroGroupIndex = -1;
int zeroGroupLength = 0;
// maximum length zero group, if there is more then one, then first one
int maxZeroGroupIndex = -1;
int maxZeroGroupLength = 0;
boolean isZero = true;
boolean groupStart = true;
/*
* Two consecutive colons, initial expansion.
* e.g. 2001:db8:0:0:1::1 -> 2001:db8:0:0:1:0:0:1
*/
StringBuilder expanded = new StringBuilder(ipv6Address);
int colonsPos = ipv6Address.indexOf("::");
int length = ipv6AddressLength;
int change = 0;
if (colonsPos >= 0 && colonsPos < ipv6AddressLength - 2) {
int colonCounter = 0;
for (int i = 0; i < ipv6AddressLength; i++) {
if (ipv6Address.charAt(i) == ':') {
colonCounter++;
}
}
if (colonsPos == 0) {
expanded.insert(0, "0");
change = change + 1;
}
for (int i = 0; i < IPV6_LEN - colonCounter; i++) {
expanded.insert(colonsPos + 1, "0:");
change = change + 2;
}
if (colonsPos == ipv6AddressLength - 2) {
expanded.setCharAt(colonsPos + change + 1, '0');
} else {
expanded.deleteCharAt(colonsPos + change + 1);
change = change - 1;
}
length = length + change;
}
// Processing one char at the time
for (int charCounter = 0; charCounter < length; charCounter++) {
char c = expanded.charAt(charCounter);
if (c >= 'A' && c <= 'F') {
c = (char) (c + 32);
}
if (c != ':') {
groups[groupCounter][charInGroupCounter] = c;
if (!(groupStart && c == '0')) {
++charInGroupCounter;
groupStart = false;
}
if (c != '0') {
isZero = false;
}
}
if (c == ':' || charCounter == (length - 1)) {
// We reached end of current group
if (isZero) {
++zeroGroupLength;
if (zeroGroupIndex == -1) {
zeroGroupIndex = groupCounter;
}
}
if (!isZero || charCounter == (length - 1)) {
// We reached end of zero group
if (zeroGroupLength > maxZeroGroupLength) {
maxZeroGroupLength = zeroGroupLength;
maxZeroGroupIndex = zeroGroupIndex;
}
zeroGroupLength = 0;
zeroGroupIndex = -1;
}
++groupCounter;
charInGroupCounter = 0;
isZero = true;
groupStart = true;
}
}
int numberOfGroups = groupCounter;
// Output results
for (groupCounter = 0; groupCounter < numberOfGroups; groupCounter++) {
if (maxZeroGroupLength <= 1 || groupCounter < maxZeroGroupIndex
|| groupCounter >= maxZeroGroupIndex + maxZeroGroupLength) {
for (int j = 0; j < MAX_GROUP_LENGTH; j++) {
if (groups[groupCounter][j] != 0) {
result.append(groups[groupCounter][j]);
}
}
if (groupCounter < (numberOfGroups - 1)
&& (groupCounter != maxZeroGroupIndex - 1
|| maxZeroGroupLength <= 1)) {
result.append(':');
}
} else if (groupCounter == maxZeroGroupIndex) {
result.append("::");
}
}
// Solve problem with three colons in IPv4 in IPv6 format
// e.g. 0:0:0:0:0:0:127.0.0.1 -> :::127.0.0.1 -> ::127.0.0.1
int resultLength = result.length();
if (result.charAt(resultLength - 1) == ':' && ipv6AddressLength < ipv6Address.length()
&& ipv6Address.charAt(ipv6AddressLength) == ':') {
result.delete(resultLength - 1, resultLength);
}
/*
* Append IPv4 from IPv4-in-IPv6 format or Zone ID
*/
for (int i = ipv6AddressLength; i < ipv6Address.length(); i++) {
result.append(ipv6Address.charAt(i));
}
return result.toString();
}
/**
* Heuristic check if string might be an IPv6 address.
*
* @param input Any string or null
* @return true, if input string contains only hex digits and at least two colons, before '.' or '%' character.
*/
private static boolean mayBeIPv6Address(String input) {
if (input == null) {
return false;
}
boolean result = false;
int colonsCounter = 0;
int length = input.length();
for (int i = 0; i < length; i++) {
char c = input.charAt(i);
if (c == '.' || c == '%') {
// IPv4 in IPv6 or Zone ID detected, end of checking.
break;
}
if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f')
|| (c >= 'A' && c <= 'F') || c == ':')) {
return false;
} else if (c == ':') {
colonsCounter++;
}
}
if (colonsCounter >= 2) {
result = true;
}
return result;
}
/**
* Check if it is an IPv4 in IPv6 format.
* e.g. 0:0:0:0:0:FFFF:127.0.0.1
*
* @param ipv6Address the address
* @return true, if input string is an IPv4 address in IPv6 format.
*/
private static boolean isIPv4AddressInIPv6(String ipv6Address) {
return (ipv6Address.contains(":") && ipv6Address.contains("."));
}
/**
* Formats input address. For IPV4 returns simply host address, for IPV6 formats address according to <a
* href="http://tools.ietf.org/html/rfc5952">RFC5952</a> rules. It does not embed IPV6 address in '[', ']', since those are part of IPV6 URI literal.
*
* @param inet
* @return
*/
public static String formatAddress(InetAddress inet){
if(inet == null){
throw new NullPointerException();
}
if(inet instanceof Inet4Address){
return inet.getHostAddress();
} else if (inet instanceof Inet6Address){
byte[] byteRepresentation = inet.getAddress();
int[] hexRepresentation = new int[IPV6_LEN];
for(int i=0;i < hexRepresentation.length;i++){
hexRepresentation[i] = ( byteRepresentation[2*i] & 0xFF) << 8 | ( byteRepresentation[2*i+1] & 0xFF );
}
compactLongestZeroSequence(hexRepresentation);
return formatAddress6(hexRepresentation);
} else {
return inet.getHostAddress();
}
}
/**
* Converts socket address into string literal, which has form: 'address:port'. Example:<br>
* <ul>
* <li>127.0.0.1:8080</li>
* <li>dns.name.com:8080</li>
* <li>[0fe:1::20]:8080</li>
* <li>[::1]:8080</li>
* </ul>
* @param inet
* @return
*/
public static String formatAddress(InetSocketAddress inet){
if(inet == null){
throw new NullPointerException();
}
StringBuilder result = new StringBuilder();
if(inet.isUnresolved()){
result.append(inet.getHostName());
}else{
result.append(formatPossibleIpv6Address(formatAddress(inet.getAddress())));
}
result.append(":").append(inet.getPort());
return result.toString();
}
/**
* Converts IPV6 int[] representation into valid IPV6 string literal. Sequence of '-1' values are converted into '::'.
* @param hexRepresentation
* @return
*/
private static String formatAddress6(int[] hexRepresentation){
if(hexRepresentation == null){
throw new NullPointerException();
}
if(hexRepresentation.length != IPV6_LEN){
throw new IllegalArgumentException();
}
StringBuilder stringBuilder = new StringBuilder();
boolean inCompressedSection = false;
for(int i = 0;i<hexRepresentation.length;i++){
if(hexRepresentation[i] == -1){
if(!inCompressedSection){
inCompressedSection = true;
if(i == 0){
stringBuilder.append("::");
} else {
stringBuilder.append(':');
}
}
} else {
inCompressedSection = false;
stringBuilder.append(Integer.toHexString(hexRepresentation[i]));
if(i+1<hexRepresentation.length){
stringBuilder.append(":");
}
}
}
return stringBuilder.toString();
}
public static boolean isBindingToMulticastDressSupported() {
return can_bind_to_mcast_addr;
}
private static void compactLongestZeroSequence(int[] hexRepresentatoin){
int bestRunStart = -1;
int bestRunLen = -1;
boolean inRun = false;
int runStart = -1;
for(int i=0;i<hexRepresentatoin.length;i++){
if(hexRepresentatoin[i] == 0){
if(!inRun){
runStart = i;
inRun = true;
}
} else {
if(inRun){
inRun = false;
int runLen = i - runStart;
if(bestRunLen < 0){
bestRunStart = runStart;
bestRunLen = runLen;
} else {
if(runLen > bestRunLen){
bestRunStart = runStart;
bestRunLen = runLen;
}
}
}
}
}
if(bestRunStart >=0){
Arrays.fill(hexRepresentatoin, bestRunStart, bestRunStart + bestRunLen, -1);
}
}
private static boolean checkForLinux() {
return checkForPresence("os.name", "linux");
}
private static boolean checkForHp() {
return checkForPresence("os.name", "hp");
}
private static boolean checkForSolaris() {
return checkForPresence("os.name", "sun");
}
private static boolean checkForWindows() {
return checkForPresence("os.name", "win");
}
public static boolean checkForMac() {
return checkForPresence("os.name", "mac");
}
private static boolean checkForPresence(final String key, final String value) {
final String tmp = System.getProperty(key, value);
try {
return tmp != null && tmp.trim().toLowerCase(Locale.ENGLISH).startsWith(value);
} catch (Throwable t) {
return false;
}
}
// No instantiation
private NetworkUtils() {
}
}
@@ -1,4 +1,4 @@
package org.keycloak.services.util;
package org.keycloak.util;
import java.io.Serializable;
import java.text.DateFormat;
@@ -122,20 +122,23 @@ public class ServerCookie implements Serializable {
private final static String OLD_COOKIE_PATTERN = "EEE, dd-MMM-yyyy HH:mm:ss z";
private final static DateFormat oldCookieFormat = new SimpleDateFormat(OLD_COOKIE_PATTERN, LOCALE_US);
private final static DateFormat OLD_COOKIE_FORMAT = new SimpleDateFormat(OLD_COOKIE_PATTERN, LOCALE_US);
static{
OLD_COOKIE_FORMAT.setTimeZone(GMT_ZONE);
}
public static String formatOldCookie(Date d) {
String ocf = null;
synchronized (oldCookieFormat) {
ocf = oldCookieFormat.format(d);
synchronized (OLD_COOKIE_FORMAT) {
ocf = OLD_COOKIE_FORMAT.format(d);
}
return ocf;
}
public static void formatOldCookie(Date d, StringBuffer sb,
FieldPosition fp) {
synchronized (oldCookieFormat) {
oldCookieFormat.format(d, sb, fp);
synchronized (OLD_COOKIE_FORMAT) {
OLD_COOKIE_FORMAT.format(d, sb, fp);
}
}
+43
View File
@@ -1,6 +1,8 @@
package org.keycloak.util;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URLDecoder;
import java.util.regex.Pattern;
/**
@@ -23,4 +25,45 @@ public class UriUtils {
return originPattern.matcher(url).matches();
}
public static MultivaluedHashMap<String, String> decodeQueryString(String queryString) {
MultivaluedHashMap<String, String> map = new MultivaluedHashMap<String, String>();
if (queryString == null || queryString.equals("")) return map;
String[] params = queryString.split("&");
for (String param : params)
{
if (param.indexOf('=') >= 0)
{
String[] nv = param.split("=", 2);
try
{
String name = URLDecoder.decode(nv[0], "UTF-8");
String val = nv.length > 1 ? nv[1] : "";
map.add(name, URLDecoder.decode(val, "UTF-8"));
}
catch (UnsupportedEncodingException e)
{
throw new RuntimeException(e);
}
}
else
{
try
{
String name = URLDecoder.decode(param, "UTF-8");
map.add(name, "");
}
catch (UnsupportedEncodingException e)
{
throw new RuntimeException(e);
}
}
}
return map;
}
public static String stripQueryParam(String url, String name){
return url.replaceFirst("[\\?&]"+name+"=[^&]*$|"+name+"=[^&]*&", "");
}
}
@@ -1,4 +1,4 @@
package org.keycloak.models.utils.reflection;
package org.keycloak.util.reflections;
import java.beans.Introspector;
import java.io.Serializable;
@@ -1,4 +1,4 @@
package org.keycloak.models.utils.reflection;
package org.keycloak.util.reflections;
import java.lang.reflect.AccessibleObject;
import java.security.PrivilegedAction;
@@ -1,4 +1,4 @@
package org.keycloak.models.utils.reflection;
package org.keycloak.util.reflections;
import java.lang.reflect.Type;
@@ -2,6 +2,7 @@ package org.keycloak.util;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -43,4 +44,15 @@ public class UriUtilsTest {
assertFalse(UriUtils.isOrigin(origin));
}
@Test
public void testStripQueryParam(){
assertEquals("http://localhost",UriUtils.stripQueryParam("http://localhost?login_hint=michael","login_hint"));
assertEquals("http://localhost",UriUtils.stripQueryParam("http://localhost?login_hint=michael@me.com","login_hint"));
assertEquals("http://localhost?param=test",UriUtils.stripQueryParam("http://localhost?param=test&login_hint=michael","login_hint"));
assertEquals("http://localhost?param=test",UriUtils.stripQueryParam("http://localhost?param=test&login_hint=michael@me.com","login_hint"));
assertEquals("http://localhost?param=test",UriUtils.stripQueryParam("http://localhost?login_hint=michael&param=test","login_hint"));
assertEquals("http://localhost?param=test",UriUtils.stripQueryParam("http://localhost?login_hint=michael@me.com&param=test","login_hint"));
assertEquals("http://localhost?pre=test&param=test",UriUtils.stripQueryParam("http://localhost?pre=test&login_hint=michael&param=test","login_hint"));
assertEquals("http://localhost?pre=test&param=test",UriUtils.stripQueryParam("http://localhost?pre=test&login_hint=michael@me.com&param=test","login_hint"));
}
}
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
</parent>
<modelVersion>4.0.0</modelVersion>
+7 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -184,6 +184,12 @@
<dependency>
<groupId>de.idyl</groupId>
<artifactId>winzipaes</artifactId>
<exclusions>
<exclusion>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk16</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
+5 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -24,6 +24,10 @@
<groupId>net.iharder</groupId>
<artifactId>base64</artifactId>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk16</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core-jaxrs</artifactId>
+16 -46
View File
@@ -22,6 +22,8 @@
<exclude>**/*.sh</exclude>
<exclude>welcome-content/*</exclude>
<exclude>**/modules/system/layers/base/org/picketlink/**</exclude>
<exclude>**/modules/system/layers/base/org/jboss/as/cli/**</exclude>
<exclude>**/modules/system/layers/base/org/jboss/aesh/**</exclude>
</excludes>
</fileSet>
<fileSet>
@@ -40,14 +42,8 @@
</includes>
</fileSet>
<fileSet>
<directory>${project.build.directory}/unpacked/deployments</directory>
<outputDirectory>keycloak/standalone/deployments</outputDirectory>
<excludes>
<exclude>keycloak-ds.xml</exclude>
</excludes>
</fileSet>
<fileSet>
<directory>${project.build.directory}/unpacked/deployments/auth-server.war/WEB-INF/classes/META-INF</directory>
<directory>${project.build.directory}/unpacked/deployments/auth-server.war/WEB-INF/classes/META-INF
</directory>
<outputDirectory>keycloak/standalone/configuration</outputDirectory>
<includes>
<include>keycloak-server.json</include>
@@ -61,49 +57,23 @@
<directory>${project.build.directory}/unpacked/adapter</directory>
<outputDirectory>keycloak</outputDirectory>
</fileSet>
<fileSet>
<directory>${project.build.directory}/unpacked/js-adapter</directory>
<outputDirectory>adapters/js-adapter</outputDirectory>
<includes>
<include>**/*.js</include>
<include>**/*.html</include>
</includes>
</fileSet>
<fileSet>
<directory>src/main/welcome-content</directory>
<outputDirectory>keycloak/welcome-content</outputDirectory>
<includes>
<include>*.*</include>
</includes>
</includes>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<unpack>false</unpack>
<useTransitiveDependencies>false</useTransitiveDependencies>
<includes>
<include>org.keycloak:keycloak-wildfly-adapter-dist:zip</include>
<include>org.keycloak:keycloak-as7-adapter-dist:zip</include>
<include>org.keycloak:keycloak-eap6-adapter-dist:zip</include>
<include>org.keycloak:keycloak-tomcat7-adapter-dist:zip</include>
</includes>
<outputDirectory>adapters</outputDirectory>
</dependencySet>
</dependencySets>
<!--
<moduleSets>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
<include>org.keycloak:keycloak-wildfly-adapter-dist</include>
</includes>
<binaries>
<outputDirectory>adapters</outputDirectory>
<attachmentClassifier>zip</attachmentClassifier>
<includeDependencies>false</includeDependencies>
<unpack>false</unpack>
</binaries>
</moduleSet>
</moduleSets>
-->
<files>
<file>
<source>src/main/themes/README.txt</source>
<outputDirectory>keycloak/standalone/configuration/themes</outputDirectory>
</file>
<file>
<source>src/main/providers/README.txt</source>
<outputDirectory>keycloak/standalone/configuration/providers</outputDirectory>
</file>
</files>
</assembly>
+31 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
@@ -26,12 +26,42 @@
<version>${project.version}</version>
<type>zip</type>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-tomcat6-adapter-dist</artifactId>
<version>${project.version}</version>
<type>zip</type>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-tomcat7-adapter-dist</artifactId>
<version>${project.version}</version>
<type>zip</type>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-tomcat8-adapter-dist</artifactId>
<version>${project.version}</version>
<type>zip</type>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-jetty81-adapter-dist</artifactId>
<version>${project.version}</version>
<type>zip</type>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-jetty91-adapter-dist</artifactId>
<version>${project.version}</version>
<type>zip</type>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-jetty92-adapter-dist</artifactId>
<version>${project.version}</version>
<type>zip</type>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-eap6-adapter-dist</artifactId>
@@ -0,0 +1,2 @@
Any provider implementation jars and libraries in this folder will be loaded by Keycloak. See the providers
section in the documentation for more details.
@@ -0,0 +1,3 @@
Themes to configure the look and feel of login pages and account management console. It's not recommended to
modify existing the built-in themes, instead you should create a new theme that extends a built-in theme. See the theme
section in the documentation for more details.
@@ -12,7 +12,7 @@
<xsl:template match="node()[name(.)='extensions']">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
<extension module="org.keycloak.keycloak-wildfly-subsystem"/>
<extension module="org.keycloak.keycloak-subsystem"/>
</xsl:copy>
</xsl:template>
@@ -34,7 +34,12 @@
<xsl:template match="node()[name(.)='profile']">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
<subsystem xmlns="urn:jboss:domain:keycloak:1.0"/>
<subsystem xmlns="urn:jboss:domain:keycloak:1.0">
<auth-server name="main-auth-server">
<enabled>true</enabled>
<web-context>auth</web-context>
</auth-server>
</subsystem>
</xsl:copy>
</xsl:template>
@@ -56,7 +61,7 @@
<!-- for some reason, Wildfly 8 final decided to turn off management-native which means jboss-as-maven-plugin no
longer works -->
longer works -->
<xsl:template match="node()[name(.)='management-interfaces']">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
@@ -67,14 +72,14 @@
</xsl:template>
<!-- for some reason, Wildfly 8 final decided to turn off management-native which means jboss-as-maven-plugin no
longer works -->
longer works -->
<xsl:template match="node()[name(.)='socket-binding-group']">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
<socket-binding name="management-native" interface="management" port="9999"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
+2 -1
View File
@@ -12,8 +12,9 @@
<excludes>
<exclude>org/picketlink/**</exclude>
<exclude>org/keycloak/keycloak-undertow-adapter/**</exclude>
<exclude>org/keycloak/keycloak-wildfly-subsystem/**</exclude>
<exclude>org/keycloak/keycloak-wildfly-adapter/**</exclude>
<exclude>org/jboss/**</exclude>
<exclude>org/keycloak/keycloak-subsystem/**</exclude>
</excludes>
<outputDirectory>modules</outputDirectory>
</fileSet>
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
+2 -1
View File
@@ -12,8 +12,9 @@
<excludes>
<exclude>org/picketlink/**</exclude>
<exclude>org/keycloak/keycloak-undertow-adapter/**</exclude>
<exclude>org/keycloak/keycloak-wildfly-subsystem/**</exclude>
<exclude>org/keycloak/keycloak-wildfly-adapter/**</exclude>
<exclude>org/keycloak/keycloak-as7-subsystem/**</exclude>
<exclude>org/jboss/**</exclude>
</excludes>
<outputDirectory>modules/system/layers/base</outputDirectory>
</fileSet>
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
+22
View File
@@ -50,6 +50,22 @@
<exclude name="**/subsystem-config.xml"/>
</fileset>
</copy>
<copy todir="target/examples/basic-auth" overwrite="true">
<fileset dir="../../examples/basic-auth">
<exclude name="**/target/**"/>
<exclude name="**/*.iml"/>
<exclude name="**/*.unconfigured"/>
<exclude name="**/subsystem-config.xml"/>
</fileset>
</copy>
<copy todir="target/examples/admin-client" overwrite="true">
<fileset dir="../../examples/admin-client">
<exclude name="**/target/**"/>
<exclude name="**/*.iml"/>
<exclude name="**/*.unconfigured"/>
<exclude name="**/subsystem-config.xml"/>
</fileset>
</copy>
<copy todir="target/examples/themes" overwrite="true">
<fileset dir="../../examples/themes">
<exclude name="**/target/**"/>
@@ -77,6 +93,12 @@
<exclude name="**/README.md"/>
</fileset>
</copy>
<copy todir="target/examples/fuse" overwrite="true">
<fileset dir="../../examples/fuse">
<exclude name="**/target/**"/>
<exclude name="**/*.iml"/>
</fileset>
</copy>
<copy file="../../examples/README.md" tofile="target/examples/README.md"/>
<move file="target/examples/unconfigured-demo/README.md.unconfigured" tofile="target/examples/unconfigured-demo/README.md"/>
<move file="target/examples/unconfigured-demo/customer-app/src/main/webapp/WEB-INF/web.xml.unconfigured" tofile="target/examples/unconfigured-demo/customer-app/src/main/webapp/WEB-INF/web.xml"/>
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
+25
View File
@@ -0,0 +1,25 @@
<assembly>
<id>war-dist</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>false</unpack>
<useTransitiveDependencies>true</useTransitiveDependencies>
<useTransitiveFiltering>true</useTransitiveFiltering>
<includes>
<include>org.keycloak:keycloak-jetty81-adapter</include>
</includes>
<excludes>
<exclude>org.eclipse.jetty:jetty-server</exclude>
<exclude>org.eclipse.jetty:jetty-util</exclude>
<exclude>org.eclipse.jetty:jetty-security</exclude>
</excludes>
<outputDirectory>lib/keycloak</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
+53
View File
@@ -0,0 +1,53 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>keycloak-jetty81-adapter-dist</artifactId>
<packaging>pom</packaging>
<name>Keycloak Jetty 8.1.x Adapter Distro</name>
<description/>
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-jetty81-adapter</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>assemble</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>assembly.xml</descriptor>
</descriptors>
<outputDirectory>
target
</outputDirectory>
<workDirectory>
target/assembly/work
</workDirectory>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
+38
View File
@@ -0,0 +1,38 @@
<assembly>
<id>war-dist</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory></directory>
<includes>
<include>keycloak.mod</include>
</includes>
<outputDirectory>modules</outputDirectory>
</fileSet>
<fileSet>
<directory>${project.build.directory}/modules</directory>
<outputDirectory></outputDirectory>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<unpack>false</unpack>
<useTransitiveDependencies>true</useTransitiveDependencies>
<useTransitiveFiltering>true</useTransitiveFiltering>
<includes>
<include>org.keycloak:keycloak-jetty91-adapter</include>
</includes>
<excludes>
<exclude>org.eclipse.jetty:jetty-server</exclude>
<exclude>org.eclipse.jetty:jetty-util</exclude>
<exclude>org.eclipse.jetty:jetty-security</exclude>
</excludes>
<outputDirectory>lib/keycloak</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
+11
View File
@@ -0,0 +1,11 @@
#
# Keycloak Jetty Adapter
#
[depend]
server
security
[lib]
lib/keycloak/*.jar
+53
View File
@@ -0,0 +1,53 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>keycloak-jetty91-adapter-dist</artifactId>
<packaging>pom</packaging>
<name>Keycloak Jetty 9.1.x Adapter Distro</name>
<description/>
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-jetty91-adapter</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>assemble</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>assembly.xml</descriptor>
</descriptors>
<outputDirectory>
target
</outputDirectory>
<workDirectory>
target/assembly/work
</workDirectory>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
+38
View File
@@ -0,0 +1,38 @@
<assembly>
<id>war-dist</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory></directory>
<includes>
<include>keycloak.mod</include>
</includes>
<outputDirectory>modules</outputDirectory>
</fileSet>
<fileSet>
<directory>${project.build.directory}/modules</directory>
<outputDirectory></outputDirectory>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<unpack>false</unpack>
<useTransitiveDependencies>true</useTransitiveDependencies>
<useTransitiveFiltering>true</useTransitiveFiltering>
<includes>
<include>org.keycloak:keycloak-jetty92-adapter</include>
</includes>
<excludes>
<exclude>org.eclipse.jetty:jetty-server</exclude>
<exclude>org.eclipse.jetty:jetty-util</exclude>
<exclude>org.eclipse.jetty:jetty-security</exclude>
</excludes>
<outputDirectory>lib/keycloak</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
+11
View File
@@ -0,0 +1,11 @@
#
# Keycloak Jetty Adapter
#
[depend]
server
security
[lib]
lib/keycloak/*.jar
+53
View File
@@ -0,0 +1,53 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>keycloak-jetty92-adapter-dist</artifactId>
<packaging>pom</packaging>
<name>Keycloak Jetty 9.2.x Adapter Distro</name>
<description/>
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-jetty92-adapter</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>assemble</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>assembly.xml</descriptor>
</descriptors>
<outputDirectory>
target
</outputDirectory>
<workDirectory>
target/assembly/work
</workDirectory>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
+19
View File
@@ -0,0 +1,19 @@
<assembly>
<id>war-dist</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.build.directory}/unpacked/js-adapter</directory>
<outputDirectory></outputDirectory>
<includes>
<include>**/*.js</include>
<include>**/*.html</include>
</includes>
</fileSet>
</fileSets>
</assembly>
+74
View File
@@ -0,0 +1,74 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>keycloak-js-adapter-dist</artifactId>
<packaging>pom</packaging>
<name>Keycloak JS Adapter Distribution</name>
<description/>
<dependencies>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<!--<version>2.7</version> -->
<executions>
<execution>
<id>unpack</id>
<phase>prepare-package</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-js-adapter</artifactId>
<version>${project.version}</version>
<outputDirectory>${project.build.directory}/unpacked/js-adapter</outputDirectory>
<includes>*.js</includes>
</artifactItem>
</artifactItems>
<excludes>**/welcome-content/*</excludes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>assemble</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>assembly.xml</descriptor>
</descriptors>
<outputDirectory>
target
</outputDirectory>
<workDirectory>
target/assembly/work
</workDirectory>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
+16 -3
View File
@@ -51,6 +51,14 @@
<maven-resource group="org.bouncycastle" artifact="bcprov-jdk16"/>
</module-def>
<module-def name="org.jboss.aesh">
<maven-resource group="org.jboss.aesh" artifact="aesh"/>
</module-def>
<module-def name="org.jboss.as.cli">
<maven-resource group="org.wildfly.core" artifact="wildfly-cli"/>
</module-def>
<module-def name="org.keycloak.keycloak-core">
<maven-resource group="org.keycloak" artifact="keycloak-core"/>
</module-def>
@@ -65,6 +73,7 @@
<module-def name="org.keycloak.keycloak-as7-adapter">
<maven-resource group="org.keycloak" artifact="keycloak-as7-adapter"/>
<maven-resource group="org.keycloak" artifact="keycloak-tomcat-core-adapter"/>
</module-def>
<module-def name="org.keycloak.keycloak-undertow-adapter">
@@ -75,8 +84,8 @@
<maven-resource group="org.keycloak" artifact="keycloak-wildfly-adapter"/>
</module-def>
<module-def name="org.keycloak.keycloak-wildfly-subsystem">
<maven-resource group="org.keycloak" artifact="keycloak-wildfly-subsystem"/>
<module-def name="org.keycloak.keycloak-subsystem">
<maven-resource group="org.keycloak" artifact="keycloak-subsystem"/>
</module-def>
<module-def name="org.keycloak.keycloak-as7-subsystem">
<maven-resource group="org.keycloak" artifact="keycloak-as7-subsystem"/>
@@ -99,7 +108,11 @@
<maven-resource group="org.picketlink" artifact="picketlink-federation"/>
</module-def>
<module-def name="org.picketlink.federation.bindings">
<maven-resource group="org.picketlink" artifact="picketlink-wildlfy-common"/>
<maven-resource group="org.picketlink" artifact="picketlink-wildfly-common"/>
<maven-resource group="org.picketlink" artifact="picketlink-tomcat-common"/>
<maven-resource group="org.picketlink" artifact="picketlink-tomcat5-single"/>
<maven-resource group="org.picketlink" artifact="picketlink-jbas-common"/>
<maven-resource group="org.picketlink" artifact="picketlink-jbas7-single"/>
</module-def>
<module-def name="org.picketlink.idm">
<maven-resource group="org.picketlink" artifact="picketlink-idm-impl"/>
+6 -1
View File
@@ -52,7 +52,12 @@
<!-- Process the resource -->
<resources/>
<!-- Add keycloak version property to module xml -->
<replace file="${module.repo.output.dir}/${current.module.path}/${module.xml}"
token="$${project.version}"
value="${project.version}"/>
<!-- Some final cleanup -->
<replace file="${module.repo.output.dir}/${current.module.path}/${module.xml}">
<replacetoken>
+57 -26
View File
@@ -1,27 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ JBoss, Home of Professional Open Source.
~ Copyright 2010, Red Hat, Inc., and individual contributors
~ as indicated by the @author tags. See the copyright.txt file in the
~ distribution for a full listing of individual contributors.
~
~ This is free software; you can redistribute it and/or modify it
~ under the terms of the GNU Lesser General Public License as
~ published by the Free Software Foundation; either version 2.1 of
~ the License, or (at your option) any later version.
~
~ This software is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
~ Lesser General Public License for more details.
~
~ You should have received a copy of the GNU Lesser General Public
~ License along with this software; if not, write to the Free
~ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
~ 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
@@ -30,7 +8,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
@@ -71,7 +49,7 @@
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-wildfly-subsystem</artifactId>
<artifactId>keycloak-subsystem</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
@@ -83,6 +61,10 @@
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk16</artifactId>
</dependency>
<dependency>
<groupId>org.wildfly.core</groupId>
<artifactId>wildfly-cli</artifactId>
</dependency>
<dependency>
<groupId>org.picketlink</groupId>
<artifactId>picketlink-common</artifactId>
@@ -99,10 +81,31 @@
<groupId>org.picketlink</groupId>
<artifactId>picketlink-federation</artifactId>
</dependency>
<!-- Wildfly federation binding -->
<dependency>
<groupId>org.picketlink</groupId>
<artifactId>picketlink-wildlfy-common</artifactId>
<artifactId>picketlink-wildfly-common</artifactId>
</dependency>
<!-- AS7/EAP6 federation binding -->
<dependency>
<groupId>org.picketlink</groupId>
<artifactId>picketlink-tomcat-common</artifactId>
</dependency>
<dependency>
<groupId>org.picketlink</groupId>
<artifactId>picketlink-tomcat5-single</artifactId>
</dependency>
<dependency>
<groupId>org.picketlink</groupId>
<artifactId>picketlink-jbas-common</artifactId>
</dependency>
<dependency>
<groupId>org.picketlink</groupId>
<artifactId>picketlink-jbas7-single</artifactId>
</dependency>
<dependency>
<groupId>org.picketlink</groupId>
<artifactId>picketlink-idm-simple-schema</artifactId>
@@ -119,7 +122,10 @@
<groupId>org.picketlink</groupId>
<artifactId>picketlink-impl</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.aesh</groupId>
<artifactId>aesh</artifactId>
</dependency>
</dependencies>
<build>
@@ -211,6 +217,31 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>compile</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-server</artifactId>
<version>${project.version}</version>
<type>war</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/modules/org/keycloak/keycloak-subsystem/main/auth-server</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ JBoss, Home of Professional Open Source.
~ Copyright 2010, Red Hat, Inc., and individual contributors
~ as indicated by the @author tags. See the copyright.txt file in the
~ distribution for a full listing of individual contributors.
~
~ This is free software; you can redistribute it and/or modify it
~ under the terms of the GNU Lesser General Public License as
~ published by the Free Software Foundation; either version 2.1 of
~ the License, or (at your option) any later version.
~
~ This software is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
~ Lesser General Public License for more details.
~
~ You should have received a copy of the GNU Lesser General Public
~ License along with this software; if not, write to the Free
~ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
~ 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-->
<module xmlns="urn:jboss:module:1.3" name="org.jboss.aesh">
<properties>
<property name="jboss.api" value="private"/>
</properties>
<resources>
<!-- Insert resources here -->
</resources>
<dependencies>
<module name="org.fusesource.jansi" />
</dependencies>
</module>
@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ JBoss, Home of Professional Open Source.
~ Copyright 2011, Red Hat, Inc., and individual contributors
~ as indicated by the @author tags. See the copyright.txt file in the
~ distribution for a full listing of individual contributors.
~
~ This is free software; you can redistribute it and/or modify it
~ under the terms of the GNU Lesser General Public License as
~ published by the Free Software Foundation; either version 2.1 of
~ the License, or (at your option) any later version.
~
~ This software is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
~ Lesser General Public License for more details.
~
~ You should have received a copy of the GNU Lesser General Public
~ License along with this software; if not, write to the Free
~ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
~ 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-->
<module xmlns="urn:jboss:module:1.3" name="org.jboss.as.cli">
<properties>
<property name="jboss.api" value="private"/>
<property name="jboss.require-java-version" value="1.7"/>
</properties>
<main-class name="org.jboss.as.cli.CommandLineMain"/>
<resources>
<!-- Insert resources here -->
</resources>
<dependencies>
<module name="org.jboss.aesh"/>
<module name="org.jboss.modules"/>
<module name="org.jboss.as.controller-client"/>
<module name="org.jboss.as.protocol"/>
<module name="org.wildfly.security.manager"/>
<module name="org.jboss.as.patching.cli" optional="true" services="import"/>
<module name="org.jboss.dmr"/>
<module name="org.jboss.logging"/>
<module name="org.jboss.logmanager" services="import"/>
<module name="org.jboss.remoting"/>
<module name="org.jboss.sasl"/>
<module name="org.jboss.staxmapper"/>
<module name="org.jboss.threads"/>
<module name="org.jboss.vfs"/>
<module name="org.picketbox" optional="true"/>
<module name="javax.api"/>
</dependencies>
</module>
@@ -34,6 +34,7 @@
<module name="org.apache.httpcomponents" />
<module name="org.jboss.logging"/>
<module name="org.keycloak.keycloak-core"/>
<module name="net.iharder.base64"/>
</dependencies>
</module>
@@ -2,7 +2,7 @@
<!--
~ JBoss, Home of Professional Open Source.
~ Copyright 2010, Red Hat, Inc., and individual contributors
~ Copyright 2014, Red Hat, Inc., and individual contributors
~ as indicated by the @author tags. See the copyright.txt file in the
~ distribution for a full listing of individual contributors.
~
@@ -22,8 +22,14 @@
~ 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-->
<module xmlns="urn:jboss:module:1.1" name="org.keycloak.keycloak-wildfly-subsystem">
<module xmlns="urn:jboss:module:1.1" name="org.keycloak.keycloak-subsystem">
<properties>
<property name="keycloak-version" value="${project.version}"/>
<property name="auth-server-exploded" value="false"/>
</properties>
<resources>
<resource-root path="."/>
<!-- Insert resources here -->
</resources>
@@ -31,12 +37,16 @@
<module name="javax.api"/>
<module name="org.jboss.staxmapper"/>
<module name="org.jboss.as.controller"/>
<module name="org.jboss.as.ee"/>
<module name="org.jboss.as.server"/>
<module name="org.jboss.modules"/>
<module name="org.jboss.msc"/>
<module name="org.jboss.logging"/>
<module name="org.jboss.vfs"/>
<module name="org.jboss.as.web-common"/>
<module name="org.jboss.as.web-common" optional="true"/>
<module name="org.jboss.as.web" optional="true"/>
<module name="org.jboss.as.version" optional="true"/>
<module name="org.keycloak.keycloak-as7-adapter" optional="true"/>
<module name="org.jboss.metadata"/>
</dependencies>
</module>
@@ -35,6 +35,7 @@
<module name="org.apache.httpcomponents" />
<module name="javax.servlet.api"/>
<module name="org.jboss.logging"/>
<module name="org.jboss.xnio"/>
<module name="io.undertow.core"/>
<module name="io.undertow.servlet"/>
<module name="org.keycloak.keycloak-adapter-core"/>
@@ -29,7 +29,6 @@
<module name="javax.servlet.api" />
<module name="org.jboss.common-core" />
<module name="org.jboss.logging" />
<module name="org.wildfly.extension.undertow" />
<module name="org.jboss.security.xacml" />
<module name="org.picketbox" />
<module name="javax.xml.ws.api" />
@@ -43,11 +42,18 @@
<module name="org.jboss.ws.api" />
<module name="org.jboss.ws.spi" />
<module name="org.apache.cxf" />
<module name="io.undertow.core" />
<module name="io.undertow.servlet" />
<module name="org.picketlink.common" />
<module name="org.picketlink.config" />
<module name="org.picketlink.federation" />
<!-- Wildfly dependencies -->
<module name="org.wildfly.extension.undertow" optional="true" />
<module name="io.undertow.core" optional="true" />
<module name="io.undertow.servlet" optional="true" />
<!-- AS7/EAP6 dependencies -->
<module name="org.jboss.as.web" optional="true"/>
<module name="org.jboss.modules" optional="true"/>
</dependencies>
</module>
@@ -29,7 +29,7 @@
<module name="javax.servlet.api" />
<module name="org.jboss.common-core" />
<module name="org.jboss.logging" />
<module name="org.jboss.as.web-common" />
<module name="org.jboss.as.web-common" optional="true" />
<module name="org.jboss.security.xacml" />
<module name="org.picketbox" />
<module name="javax.xml.ws.api" />
+62
View File
@@ -0,0 +1,62 @@
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0.Final</version>
<relativePath>../../../pom.xml</relativePath>
</parent>
<name>Keycloak OSGI Features</name>
<description/>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-osgi-features</artifactId>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>filter</id>
<phase>generate-resources</phase>
<goals>
<goal>resources</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>attach-artifacts</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>target/classes/features.xml</file>
<type>xml</type>
<classifier>features</classifier>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,53 @@
<?xml version='1.0' encoding='UTF-8'?>
<features xmlns="http://karaf.apache.org/xmlns/features/v1.0.0" name="keycloak-${project.version}">
<feature name="keycloak-adapter-core" version="${project.version}" resolver="(obr)">
<details>The keycloak adapter core stuff</details>
<bundle dependency="true">mvn:org.keycloak/keycloak-osgi-thirdparty/${project.version}</bundle>
<bundle dependency="true">mvn:org.bouncycastle/bcprov-jdk16/${bouncycastle.version}</bundle>
<bundle dependency="true">mvn:org.codehaus.jackson/jackson-core-asl/${jackson.version}</bundle>
<bundle dependency="true">mvn:org.codehaus.jackson/jackson-mapper-asl/${jackson.version}</bundle>
<bundle dependency="true">mvn:org.codehaus.jackson/jackson-xc/${jackson.version}</bundle>
<bundle dependency="true">mvn:org.jboss.logging/jboss-logging/${jboss.logging.version}</bundle>
<bundle>mvn:org.keycloak/keycloak-core/${project.version}</bundle>
<bundle>mvn:org.keycloak/keycloak-adapter-core/${project.version}</bundle>
</feature>
<feature name="keycloak-osgi-adapter" version="${project.version}" resolver="(obr)">
<details>The keycloak adapter core stuff</details>
<feature>keycloak-adapter-core</feature>
<feature version="[2.3,4)">http-whiteboard</feature>
<bundle>mvn:org.keycloak/keycloak-osgi-adapter/${project.version}</bundle>
</feature>
<feature name="keycloak-jetty8-adapter" version="${project.version}" resolver="(obr)">
<details>The keycloak Jetty8 adapter</details>
<feature>keycloak-adapter-core</feature>
<feature version="[8.1,9)">jetty</feature>
<bundle>mvn:org.keycloak/keycloak-jetty-core/${project.version}</bundle>
<bundle>mvn:org.keycloak/keycloak-jetty81-adapter/${project.version}</bundle>
</feature>
<feature name="keycloak-jaas" version="${project.version}" resolver="(obr)">
<details>The keycloak JAAS configuration</details>
<feature>keycloak-adapter-core</feature>
<bundle>mvn:org.keycloak/keycloak-osgi-jaas/${project.version}</bundle>
</feature>
<feature name="keycloak" version="${project.version}" resolver="(obr)">
<details>The keycloak adapter core stuff</details>
<feature>keycloak-osgi-adapter</feature>
<feature>keycloak-jetty8-adapter</feature>
<feature>keycloak-jaas</feature>
</feature>
<!-- This is just simplification to upgrade paxweb to 3.1.2 in JBoss Fuse 6.1 or Karaf 2.3.X environment -->
<feature name="keycloak-pax-web-upgrade" version="${project.version}" resolver="(obr)">
<details>This is just simplification to upgrade paxweb to 3.1.2 in JBoss Fuse 6.1 or Karaf 2.3.X environment</details>
<bundle>mvn:org.ow2.asm/asm-all/5.0</bundle>
<bundle>mvn:org.apache.xbean/xbean-bundleutils/3.18</bundle>
<bundle>mvn:org.apache.xbean/xbean-reflect/3.18</bundle>
<bundle>mvn:org.apache.xbean/xbean-finder/3.18</bundle>
</feature>
</features>
+68
View File
@@ -0,0 +1,68 @@
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0.Final</version>
<relativePath>../../../pom.xml</relativePath>
</parent>
<name>Keycloak OSGI JAAS Realm Configuration</name>
<description/>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-osgi-jaas</artifactId>
<packaging>bundle</packaging>
<properties>
<keycloak.osgi.export>
</keycloak.osgi.export>
<keycloak.osgi.import>
org.apache.karaf.jaas.config,
org.keycloak.adapters.jaas;version=${project.version},
*;resolution:=optional
</keycloak.osgi.import>
</properties>
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-adapter-core</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
</execution>
</executions>
<configuration>
<instructions>
<!--<Embed-Directory>lib</Embed-Directory>
<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
<Embed-Transitive>false</Embed-Transitive>
<Bundle-ClassPath>.</Bundle-ClassPath> -->
<Bundle-Name>${project.name}</Bundle-Name>
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
<Import-Package>${keycloak.osgi.import}</Import-Package>
<Export-Package>${keycloak.osgi.export}</Export-Package>
<Implementation-Title>keycloak</Implementation-Title>
<Implementation-Version>${project.version}</Implementation-Version>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.2.0">
<!-- Bean to allow the $[karaf.base] property to be correctly resolved -->
<ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]"/>
<cm:property-placeholder persistent-id="org.keycloak" update-strategy="reload">
<cm:default-properties>
<cm:property name="jaasBearerKeycloakConfigFile" value="$[karaf.base]/etc/keycloak-hawtio.json"/>
<cm:property name="jaasBearerRolePrincipalClass" value=""/>
<cm:property name="jaasDirectAccessKeycloakConfigFile" value="$[karaf.base]/etc/keycloak-direct-access.json"/>
<cm:property name="jaasDirectAccessRolePrincipalClass" value="org.apache.karaf.jaas.boot.principal.RolePrincipal"/>
</cm:default-properties>
</cm:property-placeholder>
<jaas:config name="keycloak" rank="1">
<!-- Used for web authentication (like hawtio) -->
<jaas:module className="org.keycloak.adapters.jaas.BearerTokenLoginModule"
flags="sufficient">
keycloak-config-file = ${jaasBearerKeycloakConfigFile}
role-principal-class = ${jaasBearerRolePrincipalClass}
</jaas:module>
<!-- Used for direct username/password authentication for non-web scenarios (like ssh) -->
<jaas:module className="org.keycloak.adapters.jaas.DirectAccessGrantsLoginModule"
flags="sufficient">
keycloak-config-file = ${jaasDirectAccessKeycloakConfigFile}
role-principal-class = ${jaasDirectAccessRolePrincipalClass}
</jaas:module>
</jaas:config>
</blueprint>
+23
View File
@@ -0,0 +1,23 @@
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<name>Keycloak OSGI Integration</name>
<description/>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-osgi-pom</artifactId>
<packaging>pom</packaging>
<modules>
<module>features</module>
<module>jaas</module>
<module>thirdparty</module>
</modules>
</project>
+77
View File
@@ -0,0 +1,77 @@
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0.Final</version>
<relativePath>../../../pom.xml</relativePath>
</parent>
<name>Keycloak OSGI Thirdparty</name>
<description>Keycloak OSGI bundling for 3rd party libs without OSGI headers in manifest</description>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-osgi-thirdparty</artifactId>
<packaging>bundle</packaging>
<properties>
<keycloak.osgi.export>
net.iharder;version="${base64.version}",
org.apache.http.*;version=${keycloak.apache.httpcomponents.version}
</keycloak.osgi.export>
<keycloak.osgi.import>
*;resolution:=optional
</keycloak.osgi.import>
</properties>
<dependencies>
<dependency>
<groupId>net.iharder</groupId>
<artifactId>base64</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>${keycloak.apache.httpcomponents.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${keycloak.apache.httpcomponents.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
</execution>
</executions>
<configuration>
<instructions>
<Embed-Dependency>*;scope=compile|runtime;artifactId=!httpclient|httpcore|base64</Embed-Dependency>
<Embed-Transitive>true</Embed-Transitive>
<Bundle-ClassPath>.</Bundle-ClassPath>
<Bundle-Name>${project.name}</Bundle-Name>
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
<Import-Package>${keycloak.osgi.import}</Import-Package>
<Export-Package>${keycloak.osgi.export}</Export-Package>
<Implementation-Title>${project.name}</Implementation-Title>
<Implementation-Version>${project.version}</Implementation-Version>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1 @@
# This is just to ensure that directory is added to git
+9 -1
View File
@@ -3,7 +3,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
<relativePath>../pom.xml</relativePath>
</parent>
<name>Distribution</name>
@@ -27,13 +27,21 @@
<modules>
<module>modules</module>
<module>as7-adapter-zip</module>
<module>tomcat6-adapter-zip</module>
<module>tomcat7-adapter-zip</module>
<module>tomcat8-adapter-zip</module>
<module>eap6-adapter-zip</module>
<module>wildfly-adapter-zip</module>
<module>jetty81-adapter-zip</module>
<module>jetty91-adapter-zip</module>
<module>jetty92-adapter-zip</module>
<module>js-adapter-zip</module>
<module>examples-docs-zip</module>
<module>theme-template-zip</module>
<module>war-zip</module>
<module>war-dist</module>
<module>osgi</module>
<module>proxy</module>
<module>appliance-dist</module>
<module>src-dist</module>
</modules>
+30
View File
@@ -0,0 +1,30 @@
<assembly>
<id>war-dist</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>false</unpack>
<useTransitiveDependencies>true</useTransitiveDependencies>
<useTransitiveFiltering>true</useTransitiveFiltering>
<includes>
<include>org.keycloak:launcher</include>
</includes>
<outputFileNameMapping>${artifact.artifactId}.${artifact.extension}</outputFileNameMapping>
<outputDirectory>bin</outputDirectory>
</dependencySet>
<dependencySet>
<unpack>false</unpack>
<useTransitiveDependencies>true</useTransitiveDependencies>
<useTransitiveFiltering>true</useTransitiveFiltering>
<includes>
<include>org.keycloak:keycloak-proxy-server</include>
</includes>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
+58
View File
@@ -0,0 +1,58 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>keycloak-proxy-dist</artifactId>
<packaging>pom</packaging>
<name>Proxy Distro</name>
<description/>
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>launcher</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-proxy-server</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>assemble</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>assembly.xml</descriptor>
</descriptors>
<outputDirectory>
target
</outputDirectory>
<workDirectory>
target/assembly/work
</workDirectory>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
+23
View File
@@ -0,0 +1,23 @@
<assembly>
<id>war-dist</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>false</unpack>
<useTransitiveDependencies>true</useTransitiveDependencies>
<useTransitiveFiltering>true</useTransitiveFiltering>
<includes>
<include>org.keycloak:keycloak-tomcat6-adapter</include>
</includes>
<excludes>
<exclude>org.apache.tomcat:catalina</exclude>
</excludes>
<outputDirectory></outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
+53
View File
@@ -0,0 +1,53 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>keycloak-tomcat6-adapter-dist</artifactId>
<packaging>pom</packaging>
<name>Keycloak Tomcat 6 Adapter Distro</name>
<description/>
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-tomcat6-adapter</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>assemble</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>assembly.xml</descriptor>
</descriptors>
<outputDirectory>
target
</outputDirectory>
<workDirectory>
target/assembly/work
</workDirectory>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
@@ -14,6 +14,10 @@
<includes>
<include>org.keycloak:keycloak-tomcat7-adapter</include>
</includes>
<excludes>
<exclude>org.apache.tomcat:tomcat-servlet-api</exclude>
<exclude>org.apache.tomcat:tomcat-catalina</exclude>
</excludes>
<outputDirectory></outputDirectory>
</dependencySet>
</dependencySets>
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
+24
View File
@@ -0,0 +1,24 @@
<assembly>
<id>war-dist</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>false</unpack>
<useTransitiveDependencies>true</useTransitiveDependencies>
<useTransitiveFiltering>true</useTransitiveFiltering>
<includes>
<include>org.keycloak:keycloak-tomcat8-adapter</include>
</includes>
<excludes>
<exclude>org.apache.tomcat:tomcat-servlet-api</exclude>
<exclude>org.apache.tomcat:tomcat-catalina</exclude>
</excludes>
<outputDirectory></outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
+53
View File
@@ -0,0 +1,53 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>keycloak-tomcat8-adapter-dist</artifactId>
<packaging>pom</packaging>
<name>Keycloak Tomcat 8 Adapter Distro</name>
<description/>
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-tomcat8-adapter</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>assemble</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>assembly.xml</descriptor>
</descriptors>
<outputDirectory>
target
</outputDirectory>
<workDirectory>
target/assembly/work
</workDirectory>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
+10 -1
View File
@@ -14,7 +14,8 @@
<exclude>**/js-adapter/**</exclude>
</excludes>
</fileSet>
<fileSet>
<!--
<fileSet>
<directory>${project.build.directory}/unpacked/js-adapter</directory>
<outputDirectory>adapters/js-adapter</outputDirectory>
<includes>
@@ -22,8 +23,10 @@
<include>**/*.html</include>
</includes>
</fileSet>
-->
</fileSets>
<dependencySets>
<!--
<dependencySet>
<unpack>false</unpack>
<useTransitiveDependencies>false</useTransitiveDependencies>
@@ -31,10 +34,16 @@
<include>org.keycloak:keycloak-wildfly-adapter-dist:zip</include>
<include>org.keycloak:keycloak-as7-adapter-dist:zip</include>
<include>org.keycloak:keycloak-eap6-adapter-dist:zip</include>
<include>org.keycloak:keycloak-tomcat6-adapter-dist:zip</include>
<include>org.keycloak:keycloak-tomcat7-adapter-dist:zip</include>
<include>org.keycloak:keycloak-tomcat8-adapter-dist:zip</include>
<include>org.keycloak:keycloak-jetty81-adapter-dist:zip</include>
<include>org.keycloak:keycloak-jetty91-adapter-dist:zip</include>
<include>org.keycloak:keycloak-jetty92-adapter-dist:zip</include>
</includes>
<outputDirectory>adapters</outputDirectory>
</dependencySet>
-->
<dependencySet>
<unpack>true</unpack>
<useTransitiveDependencies>false</useTransitiveDependencies>
+26 -2
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
@@ -26,12 +26,24 @@
<version>${project.version}</version>
<type>zip</type>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-tomcat6-adapter-dist</artifactId>
<version>${project.version}</version>
<type>zip</type>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-tomcat7-adapter-dist</artifactId>
<version>${project.version}</version>
<type>zip</type>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-tomcat8-adapter-dist</artifactId>
<version>${project.version}</version>
<type>zip</type>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-eap6-adapter-dist</artifactId>
@@ -40,7 +52,19 @@
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-example-themes-dist</artifactId>
<artifactId>keycloak-jetty81-adapter-dist</artifactId>
<version>${project.version}</version>
<type>zip</type>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-jetty91-adapter-dist</artifactId>
<version>${project.version}</version>
<type>zip</type>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-jetty92-adapter-dist</artifactId>
<version>${project.version}</version>
<type>zip</type>
</dependency>
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
+1 -9
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
<relativePath>../../pom.xml</relativePath>
</parent>
@@ -13,14 +13,6 @@
<name>Keycloak Wildfly Adapter Distro</name>
<description/>
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-undertow-adapter</artifactId>
<version>${project.version}</version>
<type>zip</type>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<artifactId>keycloak-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>1.1.0-Alpha1-SNAPSHOT</version>
<version>1.1.0.Final</version>
<relativePath>../pom.xml</relativePath>
</parent>
+12
View File
@@ -4,6 +4,7 @@
<!ENTITY License SYSTEM "modules/License.xml">
<!ENTITY Overview SYSTEM "modules/Overview.xml">
<!ENTITY Installation SYSTEM "modules/server-installation.xml">
<!ENTITY Providers SYSTEM "modules/providers.xml">
<!ENTITY OpenShift SYSTEM "modules/openshift.xml">
<!ENTITY AdminPermissions SYSTEM "modules/admin-permissions.xml">
<!ENTITY PerRealmAdminPermissions SYSTEM "modules/per-realm-admin-permissions.xml">
@@ -12,9 +13,13 @@
<!ENTITY JBossAdapter SYSTEM "modules/jboss-adapter.xml">
<!ENTITY JavascriptAdapter SYSTEM "modules/javascript-adapter.xml">
<!ENTITY TomcatAdapter SYSTEM "modules/tomcat-adapter.xml">
<!ENTITY Jetty9Adapter SYSTEM "modules/jetty9-adapter.xml">
<!ENTITY Jetty8Adapter SYSTEM "modules/jetty8-adapter.xml">
<!ENTITY FuseAdapter SYSTEM "modules/fuse-adapter.xml">
<!ENTITY InstalledApplications SYSTEM "modules/installed-applications.xml">
<!ENTITY Logout SYSTEM "modules/logout.xml">
<!ENTITY SAML SYSTEM "modules/saml.xml">
<!ENTITY JAAS SYSTEM "modules/jaas.xml">
<!ENTITY SocialConfig SYSTEM "modules/social-config.xml">
<!ENTITY SocialFacebook SYSTEM "modules/social-facebook.xml">
<!ENTITY SocialGitHub SYSTEM "modules/social-github.xml">
@@ -37,6 +42,7 @@
<!ENTITY Clustering SYSTEM "modules/clustering.xml">
<!ENTITY ApplicationClustering SYSTEM "modules/application-clustering.xml">
<!ENTITY MultiTenancy SYSTEM "modules/multi-tenancy.xml">
<!ENTITY Proxy SYSTEM "modules/proxy.xml">
]>
<book>
@@ -73,6 +79,7 @@ This one is short
&License;
&Overview;
&Installation;
&Providers;
&OpenShift;
&AdminPermissions;
&PerRealmAdminPermissions;
@@ -86,10 +93,14 @@ This one is short
&AdapterConfig;
&JBossAdapter;
&TomcatAdapter;
&Jetty9Adapter;
&Jetty8Adapter;
&FuseAdapter;
&JavascriptAdapter;
&InstalledApplications;
&Logout;
&MultiTenancy;
&JAAS;
</chapter>
<chapter>
@@ -131,6 +142,7 @@ This one is short
&SecurityVulnerabilities;
&Clustering;
&ApplicationClustering;
&Proxy;
&Migration;
</book>
@@ -80,7 +80,32 @@
<section>
<title>Version specific migration</title>
<section>
<title>Migrating from 1.0.x.Final to 1.1.Beta1</title>
<title>Migrating from 1.1.0.Beta2 to 1.1.0.Final</title>
<itemizedlist>
<listitem>
Providers are no longer loaded from <literal>WEB-INF/lib</literal>, they are now loaded
from <literal>standalone/configuration/providers</literal>. See the
<link linkend='providers'>providers</link> section for more details.
</listitem>
</itemizedlist>
</section>
<section>
<title>Migrating from 1.1.0.Beta1 to 1.1.0.Beta2</title>
<itemizedlist>
<listitem>Adapters are now a separate download. They are not included in appliance and war distribution. We have too many now and the distro
is getting bloated.</listitem>
<listitem>The tomcat adapter valve has moved to a different package. From <literal>org.keycloak.adapters.tomcat7.KeycloakAuthenticatorValve</literal> to <literal>org.keycloak.adapters.tomcat.KeycloakAuthenticatorValve</literal>
From the 'tomcat7' package to just 'tomcat'.
</listitem>
<listitem>JavaScript adapter now has idToken and idTokenParsed properties. If you use idToken to retrieve first name, email, etc. you need to change this to idTokenParsed.</listitem>
<listitem>The as7-eap-subsystem and keycloak-wildfly-subsystem have been merged into one keycloak-subsystem. If you have an existing standalone.xml
or domain.xml, you will need edit near the top of the file and change the extension module name to org.keycloak.keycloak-subsystem.
For AS7 only, the extension module name is org.keycloak.keycloak-as7-subsystem.</listitem>
<listitem>Server installation is no longer supported on AS7. You can still use AS7 as an application client.</listitem>
</itemizedlist>
</section>
<section>
<title>Migrating from 1.0.x.Final to 1.1.0.Beta1</title>
<itemizedlist>
<listitem>RealmModel JPA and Mongo storage schema has changed</listitem>
<listitem>UserSessionModel JPA and Mongo storage schema has changed as these interfaces have been refactored</listitem>
@@ -57,10 +57,6 @@
can be styled, branded, and tailored to your application and organizational needs.
</listitem>
<listitem>
OAuth Bearer token auth for REST Services
</listitem>
<listitem>
Integrated Browser App to REST Service token propagation
</listitem>
@@ -95,10 +91,11 @@
Deployable as a WAR, appliance, or on Openshift. Completely clusterable.
</listitem>
<listitem>
Multitenancy support. You can host and manage multiple realms for multiple organizations.
Multitenancy support. You can host and manage multiple realms for multiple organizations. In the same auth server
and even within the same deployed application.
</listitem>
<listitem>
Supports JBoss AS7, EAP 6.x, Wildfly, Tomcat 7 and Pure JavaScript applications. Plans to support Node.js, RAILS, GRAILS, and other non-Java deployments
Supports JBoss AS7, EAP 6.x, Wildfly, Tomcat 7, Tomcat 8, Jetty 9.1.x, Jetty 9.2.x, Jetty 8.1.x, and Pure JavaScript applications. Plans to support Node.js, RAILS, GRAILS, and other non-Java deployments
</listitem>
</itemizedlist>
</para>
@@ -16,6 +16,7 @@
"cors-max-age" : 1000,
"cors-allowed-methods" : [ "POST", "PUT", "DELETE", "GET" ],
"bearer-only" : false,
"enable-basic-auth" : false,
"expose-token" : true,
"credentials" : {
"secret" : "234234-234234-234234"
@@ -111,6 +112,15 @@
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>public-client</term>
<listitem>
<para>
If set to true, the adapter will not send credentials for the client to Keycloak.
The default value is <emphasis>false</emphasis>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>enable-cors</term>
<listitem>
@@ -139,7 +149,19 @@
<para>
If CORS is enabled, this sets the value of the
<literal>Access-Control-Allow-Methods</literal>
header. This should be a JSON list of strings.
header. This should be a comma-separated string.
This is <emphasis>OPTIONAL</emphasis>. If not set, this header is not returned in CORS
responses.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>cors-allowed-headers</term>
<listitem>
<para>
If CORS is enabled, this sets the value of the
<literal>Access-Control-Allow-Headers</literal>
header. This should be a comma-separated string.
This is <emphasis>OPTIONAL</emphasis>. If not set, this header is not returned in CORS
responses.
</para>
@@ -157,6 +179,16 @@
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>enable-basic-auth</term>
<listitem>
<para>
This tells the adapter to also support basic authentication. If this option is enabled,
then <emphasis>secret</emphasis> must also be provided.
This is <emphasis>OPTIONAL</emphasis>. The default value is <emphasis>false</emphasis>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>expose-token</term>
<listitem>
@@ -172,7 +204,7 @@
<listitem>
<para>
Specify the credentials of the application. This is an object notation where the key
is the credential type and the value if the value of the credential type. Currently only
is the credential type and the value is the value of the credential type. Currently only
<literal>password</literal>
is supported.
This is <emphasis>REQUIRED</emphasis>.
@@ -218,7 +250,9 @@
<term>truststore</term>
<listitem>
<para>
This setting is for Java adapters. This is the file path to a Java keystore file.
This setting is for Java adapters. The value is the file path to a Java keystore file. If
you prefix the path with <literal>classpath:</literal>, then the truststore will be obtained
from the deployment's classpath instead.
Used for outgoing HTTPS communications to the Keycloak server. Client making HTTPS
requests need a way to verify the host of the server they are talking to. This is
what the trustore does. The keystore contains one or more trusted
@@ -233,7 +267,7 @@
<literal>none</literal>
or
<literal>disable-trust-manager</literal>
is <literal>true</literal>. The default value is<emphasis>false</emphasis>.
is <literal>true</literal>.
</para>
</listitem>
</varlistentry>
@@ -340,7 +374,7 @@
<term>principal-attribute</term>
<listitem>
<para>
OpenID Connection ID Token attribute to populate the UserPrincipal name with. If token attribute is null, defaults to <literal>sub</literal>
OpenID Connection ID Token attribute to populate the UserPrincipal name with. If token attribute is null, defaults to <literal>sub</literal>.
Possible values are <literal>sub</literal>, <literal>preferred_username</literal>, <literal>email</literal>, <literal>name</literal>, <literal>nickname</literal>, <literal>given_name</literal>, <literal>family_name</literal>.
</para>
</listitem>
@@ -79,7 +79,7 @@
</para>
<para>
For example if your loadbalancer is on <emphasis>https://loadbalancer.com/myapp</emphasis> and auth-server-url is <emphasis>/auth</emphasis>,
then relative URI of Keycloak is resolved to be <emphasis>https://loadbalancer.com/myapp</emphasis> .
then relative URI of Keycloak is resolved to be <emphasis>https://loadbalancer.com/auth</emphasis> .
</para>
<para>
For cluster setup, it may be even better to use option <emphasis>auth-server-url-for-backend-request</emphasis> . This allows to configure
@@ -95,7 +95,7 @@
<para>
This would mean that browser requests (like redirecting to Keycloak login screen) will be still resolved relatively
to current request URI like <emphasis>https://loadbalancer.com/myapp</emphasis>, but backend (out-of-bound) requests between keycloak
and your app are send always to same cluster host with application .
and your app are sent always to same cluster host with application .
</para>
<para>
Note that additionally to network optimization,
@@ -62,6 +62,7 @@
<![CDATA[
<subsystem xmlns="urn:jboss:domain:infinispan:2.0">
<cache-container name="keycloak" jndi-name="infinispan/Keycloak" start="EAGER">
<transport lock-timeout="60000"/>
<invalidation-cache name="realms" mode="SYNC"/>
<invalidation-cache name="users" mode="SYNC"/>
<distributed-cache name="sessions" mode="SYNC" owners="1" />
@@ -154,7 +155,7 @@
messages to the cluster. However, as there's no sensitive data sent there's not much that can be achieved.
For realms and users all that can be done is to send invalidation messages to make nodes load data from the
database more frequently. For user sessions it would be possible to modify existing user sessions, but creating
new sessions would have no affect as they would not be linked to any access tokens. There's not to much that
new sessions would have no affect as they would not be linked to any access tokens. There's not too much that
can be achieved by modifying user sessions. For example it would be possible to prevent sessions from expiring,
by changing the creation time. However, it would for example have no effect adding additional permissions to the
sessions as these are rechecked against the user and application when the token is created or refreshed.
@@ -215,4 +216,25 @@
</para>
</section>
<section>
<title>Troubleshooting</title>
<para>
Note that when you run cluster, you should see message similar to this in the log of both cluster nodes:
<programlisting>
<![CDATA[
INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (Incoming-10,shared=udp)
ISPN000094: Received new cluster view: [node1/keycloak|1] (2) [node1/keycloak, node2/keycloak]
]]>
</programlisting>
If you see just one node mentioned, it's possible that your cluster hosts are not joined together.
</para>
<para>
Usually it's best practice to have your cluster nodes on private network without firewall for communication among them.
Firewall could be enabled just on public access point to your network instead. If for some reason you still need to have firewall
enabled on cluster nodes, you will need to open some ports. Default values are UDP port 55200 and multicast port 45688
with multicast address 230.0.0.4. Note that you may need more ports opened if you want to enable additional features like diagnostics for your JGroups stack.
Keycloak delegates most of the clustering work to Infinispan/JGroups, so consult EAP or JGroups documentation for more info.
</para>
</section>
</chapter>
@@ -12,6 +12,13 @@
<listitem>Directory on local filesystem</listitem>
<listitem>Single JSON file on your filesystem</listitem>
</itemizedlist>
When importing using the "dir" or "zip" strategies, note that the files need to follow the naming convention specified below.
If you are importing files which were previously exported, the files already follow this convention.
<itemizedlist>
<listitem>{REALM_NAME}-realm.json, such as "acme-roadrunner-affairs-realm.json" for the realm named "acme-roadrunner-affairs"</listitem>
<listitem>{REALM_NAME}-users-{INDEX}.json, such as "acme-roadrunner-affairs-users-0.json" for the first users file of the realm named "acme-roadrunner-affairs"</listitem>
</itemizedlist>
</para>
<para>
Encrypted ZIP is recommended as export contains many sensitive informations like passwords of your users (even if they are hashed),
@@ -111,5 +118,14 @@ bin/standalone.sh -Dkeycloak.migration.action=import
</varlistentry>
</variablelist>
</para>
<para>
When importing realm files that weren't exported before, the option <literal>keycloak.import</literal> can be used. If more than one realm
file needs to be imported, a comma separated list of file names can be specified. This is more appropriate than the cases before, as this
will happen only after the master realm has been initialized. Examples:
<itemizedlist>
<listitem>-Dkeycloak.import=/tmp/realm1.json</listitem>
<listitem>-Dkeycloak.import=/tmp/realm1.json,/tmp/realm2.json</listitem>
</itemizedlist>
</para>
</chapter>
Loaded 100 of 768 files, more files were not shown because too many files have changed in this diff. Show more