Compare commits
707
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eb68ef47b1 | ||
|
|
7f7fb23f32 | ||
|
|
846bc2ca35 | ||
|
|
ed77589a43 | ||
|
|
6ab94ce4e8 | ||
|
|
a5179907ad | ||
|
|
77bbf2afb5 | ||
|
|
85b95c5432 | ||
|
|
613a26cd1c | ||
|
|
18cc0fdaf3 | ||
|
|
39c0dfeb8f | ||
|
|
524ae68224 | ||
|
|
e63726d51c | ||
|
|
29c839602f | ||
|
|
1e20cad2ae | ||
|
|
7feeca8273 | ||
|
|
9c8d9ceb28 | ||
|
|
07a7035398 | ||
|
|
6c2f8a8f65 | ||
|
|
d1bf3c3be6 | ||
|
|
edef864ffc | ||
|
|
3effc265c4 | ||
|
|
41775bf8ef | ||
|
|
6c2464e399 | ||
|
|
17a7d04de9 | ||
|
|
b630c5b447 | ||
|
|
ab69b98766 | ||
|
|
d78450137e | ||
|
|
1e47e28f20 | ||
|
|
80a8961878 | ||
|
|
95d555ef39 | ||
|
|
1a8f56f3d1 | ||
|
|
4e1059740a | ||
|
|
7e225d60fd | ||
|
|
b55449b739 | ||
|
|
5b298cf43c | ||
|
|
b56fe48277 | ||
|
|
4c438de595 | ||
|
|
ea006f1d77 | ||
|
|
cb4e0a9e75 | ||
|
|
7df32ba4cd | ||
|
|
89098b3726 | ||
|
|
9e45c2ac4d | ||
|
|
d4f8f833a2 | ||
|
|
e159254cd2 | ||
|
|
ee090149b9 | ||
|
|
a22c8c1d8e | ||
|
|
83ff45ce04 | ||
|
|
815e650448 | ||
|
|
777bdc908f | ||
|
|
45231b69a7 | ||
|
|
b01f522ace | ||
|
|
e840766b1f | ||
|
|
4298916013 | ||
|
|
788bdfb29b | ||
|
|
3ec8672a75 | ||
|
|
fc95067193 | ||
|
|
d14867f785 | ||
|
|
ffe483ae2d | ||
|
|
dc2d71489d | ||
|
|
42402ee6f4 | ||
|
|
f4f95cd096 | ||
|
|
dafea0cad6 | ||
|
|
b5fe63af22 | ||
|
|
a48ace4d70 | ||
|
|
5440688dd9 | ||
|
|
b21b548b9c | ||
|
|
fe44483e60 | ||
|
|
12be32f6dc | ||
|
|
524080b0ae | ||
|
|
d8dfc1ca0b | ||
|
|
bee7c077b7 | ||
|
|
a3abc0296d | ||
|
|
2d3580e2d4 | ||
|
|
3c5fcebce9 | ||
|
|
00bb2de032 | ||
|
|
013af68d74 | ||
|
|
8209c74918 | ||
|
|
4ed2c4e5a8 | ||
|
|
34e125ea80 | ||
|
|
135071b3aa | ||
|
|
38952e5b3d | ||
|
|
3eefe2438b | ||
|
|
faaf20de95 | ||
|
|
7d5cedc6eb | ||
|
|
51efc3c184 | ||
|
|
cddba23dcf | ||
|
|
5c693246ba | ||
|
|
ae0aa61b3c | ||
|
|
1cf10f1f11 | ||
|
|
b576703533 | ||
|
|
850de683db | ||
|
|
59fd461563 | ||
|
|
ddd93df503 | ||
|
|
74f98f9eb2 | ||
|
|
b32d50df2d | ||
|
|
61d1c498ef | ||
|
|
7bbc618e1b | ||
|
|
865371b58f | ||
|
|
16b1f88546 | ||
|
|
0f43e2b6f2 | ||
|
|
949ecf60d9 | ||
|
|
0024162121 | ||
|
|
958471b081 | ||
|
|
de80133ea2 | ||
|
|
13104750f6 | ||
|
|
2f575af3d2 | ||
|
|
56f99ed640 | ||
|
|
a42e7f226f | ||
|
|
d6e513f6c3 | ||
|
|
1500fff93e | ||
|
|
c37437e82b | ||
|
|
7d0bb05aaa | ||
|
|
35297a149d | ||
|
|
e68b71ba01 | ||
|
|
900be13423 | ||
|
|
02b8cc7ad3 | ||
|
|
0371c53d07 | ||
|
|
364a54f792 | ||
|
|
0016bd8744 | ||
|
|
36baf38d09 | ||
|
|
437244f61e | ||
|
|
70c85af7e2 | ||
|
|
d97dbdac36 | ||
|
|
89013c8f6e | ||
|
|
ff80f613d3 | ||
|
|
15cbddba13 | ||
|
|
7c11bd2214 | ||
|
|
7280eb3cd9 | ||
|
|
4d38c1f95d | ||
|
|
8d196500d8 | ||
|
|
a0e21c8bf6 | ||
|
|
6b85ff0d77 | ||
|
|
89b622e6a0 | ||
|
|
53e2e352fd | ||
|
|
fda48fc537 | ||
|
|
3d8721246a | ||
|
|
0b3847eb5d | ||
|
|
96606fe3da | ||
|
|
b061288d1c | ||
|
|
89080af339 | ||
|
|
7bfe51c925 | ||
|
|
07b43f11e2 | ||
|
|
8b4fe15aeb | ||
|
|
95486ef962 | ||
|
|
5a799d4c33 | ||
|
|
5da2fad0a2 | ||
|
|
6c84520021 | ||
|
|
2955c814b3 | ||
|
|
aad3b77996 | ||
|
|
109191f248 | ||
|
|
749130b689 | ||
|
|
a8732aa83c | ||
|
|
6b9aa49f79 | ||
|
|
50b701ccf0 | ||
|
|
7a67217c87 | ||
|
|
4f861dcbec | ||
|
|
4be5d27ada | ||
|
|
71b0ffa3ca | ||
|
|
7ff35067aa | ||
|
|
05ee844bf6 | ||
|
|
d05a139a5f | ||
|
|
b8da04814b | ||
|
|
5482a80fe3 | ||
|
|
2fd2812c94 | ||
|
|
bd0cd93c90 | ||
|
|
90efb232a4 | ||
|
|
431bf08c83 | ||
|
|
d6a70fb31e | ||
|
|
a049cfefe8 | ||
|
|
88725f68dd | ||
|
|
e07aefdcfd | ||
|
|
878b724ce1 | ||
|
|
d0bcb6b6aa | ||
|
|
e6489b3bc1 | ||
|
|
aebc473071 | ||
|
|
fdf43f058a | ||
|
|
6886510e32 | ||
|
|
dafa2e3401 | ||
|
|
e67d37e9d8 | ||
|
|
9422542635 | ||
|
|
f5bed87eec | ||
|
|
7d2f0fd5cf | ||
|
|
cfd8770499 | ||
|
|
a540e9a0da | ||
|
|
028059a668 | ||
|
|
1031d6b6f5 | ||
|
|
c6a0243c92 | ||
|
|
9736f56d3b | ||
|
|
662d50eeea | ||
|
|
bfbbd5375f | ||
|
|
b735106750 | ||
|
|
1857c0c0b4 | ||
|
|
157bb84bce | ||
|
|
52617e6ef1 | ||
|
|
239816f4f5 | ||
|
|
e4ee88a492 | ||
|
|
353958538c | ||
|
|
47a91ccf33 | ||
|
|
85baeeb34e | ||
|
|
ef1c8199a5 | ||
|
|
89da594735 | ||
|
|
811085f9bd | ||
|
|
b8904bc018 | ||
|
|
937d234964 | ||
|
|
b5bc4f15f8 | ||
|
|
16863f2ed1 | ||
|
|
805afbb592 | ||
|
|
977b61f91c | ||
|
|
91815c65a3 | ||
|
|
13cb6f481f | ||
|
|
dc254ff0f7 | ||
|
|
a633241d2f | ||
|
|
97b38f4ccd | ||
|
|
416e4948d7 | ||
|
|
60dff589d4 | ||
|
|
61656c6eba | ||
|
|
2affc4d847 | ||
|
|
09179159e7 | ||
|
|
b43dc8348d | ||
|
|
f3357c2b5b | ||
|
|
79c308166a | ||
|
|
2ea985fd30 | ||
|
|
385cfd5161 | ||
|
|
db3cd543df | ||
|
|
e139fadb02 | ||
|
|
10809b47ad | ||
|
|
dd449ffed0 | ||
|
|
1f5124fc8a | ||
|
|
741a251d89 | ||
|
|
1012611785 | ||
|
|
465f828d73 | ||
|
|
038294d5c1 | ||
|
|
d1b33e1638 | ||
|
|
d863a4b143 | ||
|
|
4a073b6e46 | ||
|
|
30b0c35442 | ||
|
|
ef5bb6d447 | ||
|
|
6aa0c7ca39 | ||
|
|
70b3091097 | ||
|
|
210a79a575 | ||
|
|
a4fb4fd530 | ||
|
|
6f56320177 | ||
|
|
4d13b5105e | ||
|
|
97a398790f | ||
|
|
c09da5cac8 | ||
|
|
9521e71840 | ||
|
|
e5d09e1b04 | ||
|
|
ebe6d5c5c1 | ||
|
|
0320884c72 | ||
|
|
a254d2120d | ||
|
|
4157907358 | ||
|
|
dfc8708808 | ||
|
|
67c40eb212 | ||
|
|
bafaef7060 | ||
|
|
ee06eda05c | ||
|
|
a3525dd073 | ||
|
|
f97f0e4e1b | ||
|
|
c62e93577b | ||
|
|
bcebd3fb83 | ||
|
|
0589c82242 | ||
|
|
4ddf4d1c99 | ||
|
|
a98148f19b | ||
|
|
d1072e8942 | ||
|
|
5b0254f0c7 | ||
|
|
c2b406e7d6 | ||
|
|
4821290c32 | ||
|
|
d3bb68c2b0 | ||
|
|
9560364a1c | ||
|
|
4b49bc7140 | ||
|
|
88bac57cad | ||
|
|
9630921d91 | ||
|
|
84e216c2ac | ||
|
|
0bc72e908f | ||
|
|
6910572bd2 | ||
|
|
a4dd8a38b3 | ||
|
|
f0b4127567 | ||
|
|
c4f3a4e68e | ||
|
|
c0aa4289e2 | ||
|
|
9be600cffe | ||
|
|
c998f6eb53 | ||
|
|
c901b38858 | ||
|
|
4bd09cf14b | ||
|
|
3edadb01c5 | ||
|
|
b738764442 | ||
|
|
660fd94e7f | ||
|
|
a3138b8514 | ||
|
|
627e434b73 | ||
|
|
406754f31b | ||
|
|
b9fea7b143 | ||
|
|
ae63830c22 | ||
|
|
96967c0373 | ||
|
|
6e0eb21428 | ||
|
|
e295efed07 | ||
|
|
cd2f6e83b3 | ||
|
|
d722e53108 | ||
|
|
28252e2409 | ||
|
|
746d285c7b | ||
|
|
32b29bb130 | ||
|
|
583f8ad739 | ||
|
|
b371521b33 | ||
|
|
321b23a78d | ||
|
|
f151933d91 | ||
|
|
5ea93822e7 | ||
|
|
cafd2d80d2 | ||
|
|
c9dcd7973a | ||
|
|
bcace1eacf | ||
|
|
dad4945358 | ||
|
|
f914a30b6e | ||
|
|
d65fb963e6 | ||
|
|
5772ea2b09 | ||
|
|
620f22249a | ||
|
|
29052019c5 | ||
|
|
c17b70e454 | ||
|
|
1199fa7f6d | ||
|
|
4928f779f7 | ||
|
|
8371c256b2 | ||
|
|
fa0335613f | ||
|
|
dc1d0e7f44 | ||
|
|
229eca302f | ||
|
|
446c9fea4b | ||
|
|
1d882cdb87 | ||
|
|
bdc5f1c185 | ||
|
|
7b578b8c87 | ||
|
|
37f605de5b | ||
|
|
8d21cfc234 | ||
|
|
df56265976 | ||
|
|
7be0b1c9f5 | ||
|
|
52f3693747 | ||
|
|
392b1f1e17 | ||
|
|
ebb61c104b | ||
|
|
6fe3a3da71 | ||
|
|
f597f163f7 | ||
|
|
1ac0529d04 | ||
|
|
3c60881d8c | ||
|
|
74ac00349e | ||
|
|
048c64b6bd | ||
|
|
5917d5885b | ||
|
|
8da768a514 | ||
|
|
ad63b18781 | ||
|
|
95d5ce9dd4 | ||
|
|
56c3d53a24 | ||
|
|
c91255f620 | ||
|
|
4f047565fb | ||
|
|
f65a053182 | ||
|
|
b709ca96b1 | ||
|
|
4a027d97b0 | ||
|
|
4be6dc2f0c | ||
|
|
57b6ddbace | ||
|
|
bf38ec040f | ||
|
|
2c79456e72 | ||
|
|
8caad0118c | ||
|
|
afdbdb285d | ||
|
|
ad2638cc20 | ||
|
|
05c590ac88 | ||
|
|
8d6f71e7d1 | ||
|
|
10e1b6206f | ||
|
|
002074bb30 | ||
|
|
375d4e9e83 | ||
|
|
286de3e905 | ||
|
|
a258dd51ee | ||
|
|
b4239c40c1 | ||
|
|
b6118a6705 | ||
|
|
2bf3531c43 | ||
|
|
2d42ad9993 | ||
|
|
2edb7f6831 | ||
|
|
402feb9710 | ||
|
|
13506bec82 | ||
|
|
13b6c6f507 | ||
|
|
7b8869bde6 | ||
|
|
e4815cd103 | ||
|
|
4214793a2d | ||
|
|
860b58552e | ||
|
|
a13bac4c9d | ||
|
|
c6fc7622d2 | ||
|
|
c584a1a161 | ||
|
|
b8c50c431c | ||
|
|
cc776abacb | ||
|
|
fea5d5099d | ||
|
|
95e1dedb32 | ||
|
|
370b86141c | ||
|
|
45b940ad2d | ||
|
|
8c3545d219 | ||
|
|
2f3a1626d7 | ||
|
|
5d93f4a298 | ||
|
|
66a75d93ee | ||
|
|
e107a403cf | ||
|
|
8270c0a19a | ||
|
|
db5efdca64 | ||
|
|
5eb319f3c5 | ||
|
|
6baa4a7950 | ||
|
|
73b6751219 | ||
|
|
c0de43d51f | ||
|
|
5d9966f6df | ||
|
|
893fb2a55b | ||
|
|
4add134dff | ||
|
|
7dc228beca | ||
|
|
e6e367392a | ||
|
|
0768bcc452 | ||
|
|
4f8669d668 | ||
|
|
c65ed96bd7 | ||
|
|
7ad8a6e074 | ||
|
|
2bddd9ad34 | ||
|
|
ff9ebb0f79 | ||
|
|
09133a9e2a | ||
|
|
32d15e2027 | ||
|
|
8aa0727d88 | ||
|
|
c0d0c1f39a | ||
|
|
64daa568b9 | ||
|
|
47652ae179 | ||
|
|
e2558ca827 | ||
|
|
5fb7e8186f | ||
|
|
e66060b00b | ||
|
|
84de9cca8e | ||
|
|
37584a24e0 | ||
|
|
cfc61fa262 | ||
|
|
4286f0560f | ||
|
|
116d147bf7 | ||
|
|
a71adde8fa | ||
|
|
45a03a654f | ||
|
|
2154dd120b | ||
|
|
2a4dfe7920 | ||
|
|
5556736968 | ||
|
|
24336bcd4d | ||
|
|
6fae1c6411 | ||
|
|
d7641f8830 | ||
|
|
24328fdc47 | ||
|
|
4f46ab45cc | ||
|
|
ccfae82b77 | ||
|
|
711e6a54ca | ||
|
|
1d8f3d8702 | ||
|
|
a0696fcb97 | ||
|
|
abddbfb3a4 | ||
|
|
a97c4bdff9 | ||
|
|
e7a5b88b2d | ||
|
|
4f0609f8b2 | ||
|
|
e4d056f54b | ||
|
|
a3f7339fca | ||
|
|
57cd7e132c | ||
|
|
d766c56eba | ||
|
|
0fa2b5c25d | ||
|
|
072fe0d8a0 | ||
|
|
2ec355e2d2 | ||
|
|
94b3e85513 | ||
|
|
4abcb2761f | ||
|
|
aae550a7c7 | ||
|
|
7f32ce810a | ||
|
|
13acd512b6 | ||
|
|
b94ced2204 | ||
|
|
c59123e974 | ||
|
|
ff2c100664 | ||
|
|
41949b63f6 | ||
|
|
aea35454bf | ||
|
|
25d183c1d9 | ||
|
|
3b8364f1e6 | ||
|
|
ca81f3f18d | ||
|
|
6df72d67c5 | ||
|
|
f6c7ecf8e3 | ||
|
|
d723efae77 | ||
|
|
b7f4d52de1 | ||
|
|
3ca39801dc | ||
|
|
da8f2dc2ce | ||
|
|
2fce06ffca | ||
|
|
14ea988b24 | ||
|
|
5723baa367 | ||
|
|
450ce0e0e0 | ||
|
|
17ea3fca0b | ||
|
|
f10f00ba71 | ||
|
|
8c73f8743d | ||
|
|
ab96114ef8 | ||
|
|
c45e40db99 | ||
|
|
9488787986 | ||
|
|
64b2aed370 | ||
|
|
f63bb66170 | ||
|
|
1957103270 | ||
|
|
3383b044b2 | ||
|
|
f34260478e | ||
|
|
4cf26a68fc | ||
|
|
2c16335a03 | ||
|
|
af26b5b610 | ||
|
|
eacd689f91 | ||
|
|
023b558f43 | ||
|
|
8601b321d5 | ||
|
|
83181f28b2 | ||
|
|
77c16c320e | ||
|
|
a6458250bc | ||
|
|
6654a154b9 | ||
|
|
4d82cc92fe | ||
|
|
3e1976b3e5 | ||
|
|
695f8d34ab | ||
|
|
ad753a50a3 | ||
|
|
0fc9cb78d5 | ||
|
|
ec9c9b8ee1 | ||
|
|
5ac3443729 | ||
|
|
fac8c4a6d0 | ||
|
|
d7f4277ba8 | ||
|
|
a1d9753ec2 | ||
|
|
599faa454b | ||
|
|
4dcdaf4985 | ||
|
|
03215787e0 | ||
|
|
838764ba5a | ||
|
|
4fd97091ff | ||
|
|
a444899176 | ||
|
|
d21a01280b | ||
|
|
0840f39495 | ||
|
|
367f3256ea | ||
|
|
0e8c87e649 | ||
|
|
10024f9526 | ||
|
|
38ce5e069c | ||
|
|
daa09f9a41 | ||
|
|
1511f7088f | ||
|
|
2e64d01251 | ||
|
|
b991ba44d3 | ||
|
|
b8cf8fabe2 | ||
|
|
c45524d8d4 | ||
|
|
daca6d7062 | ||
|
|
10e5205a57 | ||
|
|
706d4fc01c | ||
|
|
d3769caaac | ||
|
|
0aa1b37e30 | ||
|
|
3a138db842 | ||
|
|
b41dd22ed3 | ||
|
|
c34aa5763d | ||
|
|
02851989b3 | ||
|
|
9bde0af0f1 | ||
|
|
8006c64dba | ||
|
|
4b5fee02cc | ||
|
|
1569cf7fb5 | ||
|
|
5a0711655a | ||
|
|
b5660cbbab | ||
|
|
ec2cfba670 | ||
|
|
97d0f39346 | ||
|
|
7fc5afcc2f | ||
|
|
2c1b13d6c2 | ||
|
|
a441be57ed | ||
|
|
34a16f035a | ||
|
|
d5a57a2bbd | ||
|
|
ed161d2426 | ||
|
|
0f21b6f6d9 | ||
|
|
caec65c576 | ||
|
|
ebb030c3bd | ||
|
|
f88908fa18 | ||
|
|
cb2aa547f9 | ||
|
|
d386920b58 | ||
|
|
75d74890ca | ||
|
|
fd49213cb9 | ||
|
|
b20031faed | ||
|
|
acf2d662c2 | ||
|
|
20348e5d0b | ||
|
|
3143a2e500 | ||
|
|
d731189236 | ||
|
|
d22f4cb08c | ||
|
|
98fe7c04a9 | ||
|
|
69c3d38164 | ||
|
|
f7ba306016 | ||
|
|
38e4ad15d5 | ||
|
|
c4144dd884 | ||
|
|
e237bcd383 | ||
|
|
f52f998bcd | ||
|
|
1328531f31 | ||
|
|
61f2baf65e | ||
|
|
7841c5f07b | ||
|
|
7f60e4f986 | ||
|
|
181b329faf | ||
|
|
6d2eeb7cd6 | ||
|
|
5df540df8c | ||
|
|
a8ea2ef5d5 | ||
|
|
65a840be3d | ||
|
|
f3752f804f | ||
|
|
5bc3ee0e8c | ||
|
|
acf8549d51 | ||
|
|
fa3c0bb0aa | ||
|
|
9fd9a1a5ad | ||
|
|
cbdf30b549 | ||
|
|
c9cc189602 | ||
|
|
328e1a0cd8 | ||
|
|
24da8288eb | ||
|
|
4ff1848681 | ||
|
|
474043b688 | ||
|
|
7c64ab228b | ||
|
|
a25658fb31 | ||
|
|
969b8c153f | ||
|
|
b0dd65c706 | ||
|
|
57eefca4a0 | ||
|
|
132044bcb1 | ||
|
|
e880a768c5 | ||
|
|
860a104828 | ||
|
|
bddf214bc0 | ||
|
|
d79a7146ba | ||
|
|
17e09a557b | ||
|
|
dd9cf3be39 | ||
|
|
3bd6974ccb | ||
|
|
fee1f6f61a | ||
|
|
92f5f8f5cd | ||
|
|
b234db4b34 | ||
|
|
6c39810ba7 | ||
|
|
c2fa0e5c6d | ||
|
|
67ce3fdbd2 | ||
|
|
49d0b72c74 | ||
|
|
018c44ef2c | ||
|
|
dadb470609 | ||
|
|
a4ce389bf5 | ||
|
|
c2a601dc04 | ||
|
|
4ea586ebe6 | ||
|
|
94c71aa59c | ||
|
|
bc514fd308 | ||
|
|
71cfa11d2f | ||
|
|
5e9f3b32fc | ||
|
|
fd48d4335a | ||
|
|
8bf9ea838a | ||
|
|
f2bd50335a | ||
|
|
e714d4f724 | ||
|
|
fd212a2a2a | ||
|
|
84949bb51f | ||
|
|
aac274bbb3 | ||
|
|
94da1dfc13 | ||
|
|
066d6bb230 | ||
|
|
72ded04517 | ||
|
|
77912b2117 | ||
|
|
dcb5ef4fd8 | ||
|
|
d6acf2496a | ||
|
|
555236c3f0 | ||
|
|
4670d93f76 | ||
|
|
8ed1677249 | ||
|
|
cf7a194ea3 | ||
|
|
eae36ac2c0 | ||
|
|
6f56d006fc | ||
|
|
633eb842a3 | ||
|
|
11b7e62e58 | ||
|
|
bb77c717c9 | ||
|
|
0b54838f31 | ||
|
|
45e5cfac99 | ||
|
|
03b8839abe | ||
|
|
4dffc3cf7e | ||
|
|
ef77e2a246 | ||
|
|
620ca86d45 | ||
|
|
1c97b9c41d | ||
|
|
347cdcbb28 | ||
|
|
590ad1a7ca | ||
|
|
fd327bb225 | ||
|
|
00236c13ff | ||
|
|
cd9d67037c | ||
|
|
50a2c1d0ed | ||
|
|
3ecdc9506e | ||
|
|
c4df7f7674 | ||
|
|
98f9f94cab | ||
|
|
cc7f755fe9 | ||
|
|
528e3127e6 | ||
|
|
5ff266b148 | ||
|
|
655a5a1401 | ||
|
|
4a8b19cfce | ||
|
|
db25a81d23 | ||
|
|
28fa2b92d9 | ||
|
|
3b6f26b2ec | ||
|
|
155a2d687b | ||
|
|
cf94411aaa | ||
|
|
e5447f7f1e | ||
|
|
02b9d5ee13 | ||
|
|
635ccae144 | ||
|
|
d8779a3d01 | ||
|
|
ec20c004ba | ||
|
|
5f41215e27 | ||
|
|
98bd0b003e | ||
|
|
f28f87b050 | ||
|
|
ffc0e4f005 | ||
|
|
a275a24797 | ||
|
|
fd0d30fd1a | ||
|
|
fb07559980 | ||
|
|
8128d23059 | ||
|
|
4c7f686505 | ||
|
|
8ebf6a650f | ||
|
|
1c792ad769 | ||
|
|
1752ac8e63 | ||
|
|
8f32e1b554 | ||
|
|
89250a69fb | ||
|
|
a264c15886 | ||
|
|
96a00317b8 | ||
|
|
228b24a1c5 | ||
|
|
d7295473c3 | ||
|
|
01083d21d0 | ||
|
|
be59e2419c | ||
|
|
e89f511465 | ||
|
|
66cec589f7 | ||
|
|
e3d64f301d | ||
|
|
ca841abe9b | ||
|
|
726f746b85 | ||
|
|
192987bad5 | ||
|
|
b4a2559ac5 | ||
|
|
23e5357870 | ||
|
|
9c1f084dbc | ||
|
|
94dbeb9c8d | ||
|
|
8a8552822a | ||
|
|
1c0f1b4e60 | ||
|
|
d12119a089 | ||
|
|
dfeb35b5e6 | ||
|
|
585f1035f9 | ||
|
|
64212fc9a2 | ||
|
|
191d03f5f3 | ||
|
|
58084d5ee5 | ||
|
|
c63ef3c825 | ||
|
|
e26ac0983a | ||
|
|
3a51b3530d | ||
|
|
d5d954e80a | ||
|
|
d8d96e5ec1 | ||
|
|
b32365aa12 | ||
|
|
579ab56a5a | ||
|
|
9e8a33710f |
No files matched your search
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
+1
-5
@@ -169,11 +169,7 @@ public class AdapterDeploymentContext {
|
|||||||
public void setAuthServerBaseUrl(String authServerBaseUrl) {
|
public void setAuthServerBaseUrl(String authServerBaseUrl) {
|
||||||
this.authServerBaseUrl = authServerBaseUrl;
|
this.authServerBaseUrl = authServerBaseUrl;
|
||||||
KeycloakUriBuilder serverBuilder = KeycloakUriBuilder.fromUri(authServerBaseUrl);
|
KeycloakUriBuilder serverBuilder = KeycloakUriBuilder.fromUri(authServerBaseUrl);
|
||||||
resolveBrowserUrls(serverBuilder);
|
resolveUrls(serverBuilder);
|
||||||
|
|
||||||
if (delegate.getRelativeUrls() == RelativeUrlsUsed.ALL_REQUESTS) {
|
|
||||||
resolveNonBrowserUrls(serverBuilder);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -38,37 +38,6 @@ public class AdapterUtils {
|
|||||||
return UUID.randomUUID().toString();
|
return UUID.randomUUID().toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Best effort to find origin for REST request calls from web UI application to REST application. In case of relative or absolute
|
|
||||||
* "auth-server-url" is returned the URL from request. In case of "auth-server-url-for-backend-request" used in configuration, it returns
|
|
||||||
* the origin of auth server.
|
|
||||||
*
|
|
||||||
* This may be the optimization in cluster, so if you have keycloak and applications on same host, the REST request doesn't need to
|
|
||||||
* go through loadbalancer, but can be sent directly to same host.
|
|
||||||
*
|
|
||||||
* @param browserRequestURL
|
|
||||||
* @param session
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public static String getOriginForRestCalls(String browserRequestURL, KeycloakSecurityContext session) {
|
|
||||||
if (session instanceof RefreshableKeycloakSecurityContext) {
|
|
||||||
KeycloakDeployment deployment = ((RefreshableKeycloakSecurityContext)session).getDeployment();
|
|
||||||
switch (deployment.getRelativeUrls()) {
|
|
||||||
case ALL_REQUESTS:
|
|
||||||
case NEVER:
|
|
||||||
// Resolve baseURI from the request
|
|
||||||
return UriUtils.getOrigin(browserRequestURL);
|
|
||||||
case BROWSER_ONLY:
|
|
||||||
// Resolve baseURI from the codeURL (This is already non-relative and based on our hostname)
|
|
||||||
return UriUtils.getOrigin(deployment.getTokenUrl());
|
|
||||||
default:
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return UriUtils.getOrigin(browserRequestURL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Set<String> getRolesFromSecurityContext(RefreshableKeycloakSecurityContext session) {
|
public static Set<String> getRolesFromSecurityContext(RefreshableKeycloakSecurityContext session) {
|
||||||
Set<String> roles = null;
|
Set<String> roles = null;
|
||||||
AccessToken accessToken = session.getToken();
|
AccessToken accessToken = session.getToken();
|
||||||
|
|||||||
+1
-5
@@ -85,9 +85,8 @@ public class BasicAuthRequestAuthenticator extends BearerTokenRequestAuthenticat
|
|||||||
|
|
||||||
private AccessTokenResponse getToken(String username, String password) throws Exception {
|
private AccessTokenResponse getToken(String username, String password) throws Exception {
|
||||||
AccessTokenResponse tokenResponse=null;
|
AccessTokenResponse tokenResponse=null;
|
||||||
HttpClient client = new HttpClientBuilder().disableTrustManager().build();
|
HttpClient client = deployment.getClient();
|
||||||
|
|
||||||
try {
|
|
||||||
HttpPost post = new HttpPost(
|
HttpPost post = new HttpPost(
|
||||||
KeycloakUriBuilder.fromUri(deployment.getAuthServerBaseUrl())
|
KeycloakUriBuilder.fromUri(deployment.getAuthServerBaseUrl())
|
||||||
.path(ServiceUrlConstants.TOKEN_PATH).build(deployment.getRealm()));
|
.path(ServiceUrlConstants.TOKEN_PATH).build(deployment.getRealm()));
|
||||||
@@ -118,9 +117,6 @@ public class BasicAuthRequestAuthenticator extends BearerTokenRequestAuthenticat
|
|||||||
is.close();
|
is.close();
|
||||||
} catch (java.io.IOException ignored) { }
|
} catch (java.io.IOException ignored) { }
|
||||||
}
|
}
|
||||||
} finally {
|
|
||||||
client.getConnectionManager().shutdown();
|
|
||||||
}
|
|
||||||
|
|
||||||
return (tokenResponse);
|
return (tokenResponse);
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-38
@@ -111,39 +111,17 @@ public class KeycloakDeployment {
|
|||||||
|
|
||||||
public void setAuthServerBaseUrl(AdapterConfig config) {
|
public void setAuthServerBaseUrl(AdapterConfig config) {
|
||||||
this.authServerBaseUrl = config.getAuthServerUrl();
|
this.authServerBaseUrl = config.getAuthServerUrl();
|
||||||
String authServerURLForBackendReqs = config.getAuthServerUrlForBackendRequests();
|
if (authServerBaseUrl == null) return;
|
||||||
if (authServerBaseUrl == null && authServerURLForBackendReqs == null) return;
|
|
||||||
|
|
||||||
URI authServerUri = null;
|
URI authServerUri = URI.create(authServerBaseUrl);
|
||||||
if (authServerBaseUrl != null) {
|
|
||||||
authServerUri = URI.create(authServerBaseUrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (authServerUri == null || authServerUri.getHost() == null) {
|
if (authServerUri.getHost() == null) {
|
||||||
if (authServerURLForBackendReqs != null) {
|
relativeUrls = RelativeUrlsUsed.ALWAYS;
|
||||||
relativeUrls = RelativeUrlsUsed.BROWSER_ONLY;
|
|
||||||
|
|
||||||
KeycloakUriBuilder serverBuilder = KeycloakUriBuilder.fromUri(authServerURLForBackendReqs);
|
|
||||||
if (serverBuilder.getHost() == null || serverBuilder.getScheme() == null) {
|
|
||||||
throw new IllegalStateException("Relative URL not supported for auth-server-url-for-backend-requests option. URL used: "
|
|
||||||
+ authServerURLForBackendReqs + ", Client: " + config.getResource());
|
|
||||||
}
|
|
||||||
resolveNonBrowserUrls(serverBuilder);
|
|
||||||
} else {
|
|
||||||
relativeUrls = RelativeUrlsUsed.ALL_REQUESTS;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// We have absolute URI in config
|
// We have absolute URI in config
|
||||||
relativeUrls = RelativeUrlsUsed.NEVER;
|
relativeUrls = RelativeUrlsUsed.NEVER;
|
||||||
KeycloakUriBuilder serverBuilder = KeycloakUriBuilder.fromUri(authServerBaseUrl);
|
KeycloakUriBuilder serverBuilder = KeycloakUriBuilder.fromUri(authServerBaseUrl);
|
||||||
resolveBrowserUrls(serverBuilder);
|
resolveUrls(serverBuilder);
|
||||||
|
|
||||||
if (authServerURLForBackendReqs == null) {
|
|
||||||
resolveNonBrowserUrls(serverBuilder);
|
|
||||||
} else {
|
|
||||||
serverBuilder = KeycloakUriBuilder.fromUri(authServerURLForBackendReqs);
|
|
||||||
resolveNonBrowserUrls(serverBuilder);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,23 +130,14 @@ public class KeycloakDeployment {
|
|||||||
/**
|
/**
|
||||||
* @param authUrlBuilder absolute URI
|
* @param authUrlBuilder absolute URI
|
||||||
*/
|
*/
|
||||||
protected void resolveBrowserUrls(KeycloakUriBuilder authUrlBuilder) {
|
protected void resolveUrls(KeycloakUriBuilder authUrlBuilder) {
|
||||||
if (log.isDebugEnabled()) {
|
if (log.isDebugEnabled()) {
|
||||||
log.debug("resolveBrowserUrls");
|
log.debug("resolveUrls");
|
||||||
}
|
}
|
||||||
|
|
||||||
String login = authUrlBuilder.clone().path(ServiceUrlConstants.AUTH_PATH).build(getRealm()).toString();
|
String login = authUrlBuilder.clone().path(ServiceUrlConstants.AUTH_PATH).build(getRealm()).toString();
|
||||||
authUrl = KeycloakUriBuilder.fromUri(login);
|
authUrl = KeycloakUriBuilder.fromUri(login);
|
||||||
realmInfoUrl = authUrlBuilder.clone().path(ServiceUrlConstants.REALM_INFO_PATH).build(getRealm()).toString();
|
realmInfoUrl = authUrlBuilder.clone().path(ServiceUrlConstants.REALM_INFO_PATH).build(getRealm()).toString();
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param authUrlBuilder absolute URI
|
|
||||||
*/
|
|
||||||
protected void resolveNonBrowserUrls(KeycloakUriBuilder authUrlBuilder) {
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("resolveNonBrowserUrls");
|
|
||||||
}
|
|
||||||
|
|
||||||
tokenUrl = authUrlBuilder.clone().path(ServiceUrlConstants.TOKEN_PATH).build(getRealm()).toString();
|
tokenUrl = authUrlBuilder.clone().path(ServiceUrlConstants.TOKEN_PATH).build(getRealm()).toString();
|
||||||
logoutUrl = KeycloakUriBuilder.fromUri(authUrlBuilder.clone().path(ServiceUrlConstants.TOKEN_SERVICE_LOGOUT_PATH).build(getRealm()).toString());
|
logoutUrl = KeycloakUriBuilder.fromUri(authUrlBuilder.clone().path(ServiceUrlConstants.TOKEN_SERVICE_LOGOUT_PATH).build(getRealm()).toString());
|
||||||
|
|||||||
+1
-1
@@ -98,7 +98,7 @@ public class KeycloakDeploymentBuilder {
|
|||||||
if (realmKeyPem == null && adapterConfig.isBearerOnly() && adapterConfig.getAuthServerUrl() == null) {
|
if (realmKeyPem == null && adapterConfig.isBearerOnly() && adapterConfig.getAuthServerUrl() == null) {
|
||||||
throw new IllegalArgumentException("For bearer auth, you must set the realm-public-key or auth-server-url");
|
throw new IllegalArgumentException("For bearer auth, you must set the realm-public-key or auth-server-url");
|
||||||
}
|
}
|
||||||
if (realmKeyPem == null || !deployment.isBearerOnly() || deployment.isRegisterNodeAtStartup() || deployment.getRegisterNodePeriod() != -1) {
|
if (realmKeyPem == null || !deployment.isBearerOnly() || deployment.isEnableBasicAuth() || deployment.isRegisterNodeAtStartup() || deployment.getRegisterNodePeriod() != -1) {
|
||||||
deployment.setClient(new HttpClientBuilder().build(adapterConfig));
|
deployment.setClient(new HttpClientBuilder().build(adapterConfig));
|
||||||
}
|
}
|
||||||
if (adapterConfig.getAuthServerUrl() == null && (!deployment.isBearerOnly() || realmKeyPem == null)) {
|
if (adapterConfig.getAuthServerUrl() == null && (!deployment.isBearerOnly() || realmKeyPem == null)) {
|
||||||
|
|||||||
+1
-1
@@ -206,7 +206,7 @@ public class OAuthRequestAuthenticator {
|
|||||||
tokenStore.saveRequest();
|
tokenStore.saveRequest();
|
||||||
log.debug("Sending redirect to login page: " + redirect);
|
log.debug("Sending redirect to login page: " + redirect);
|
||||||
exchange.getResponse().setStatus(302);
|
exchange.getResponse().setStatus(302);
|
||||||
exchange.getResponse().setCookie(deployment.getStateCookieName(), state, /* need to set path? */ null, null, -1, deployment.getSslRequired().isRequired(facade.getRequest().getRemoteAddr()), false);
|
exchange.getResponse().setCookie(deployment.getStateCookieName(), state, /* need to set path? */ null, null, -1, deployment.getSslRequired().isRequired(facade.getRequest().getRemoteAddr()), true);
|
||||||
exchange.getResponse().setHeader("Location", redirect);
|
exchange.getResponse().setHeader("Location", redirect);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
@@ -154,6 +154,7 @@ public abstract class RequestAuthenticator {
|
|||||||
RefreshableKeycloakSecurityContext session = new RefreshableKeycloakSecurityContext(deployment, tokenStore, oauth.getTokenString(), oauth.getToken(), oauth.getIdTokenString(), oauth.getIdToken(), oauth.getRefreshToken());
|
RefreshableKeycloakSecurityContext session = new RefreshableKeycloakSecurityContext(deployment, tokenStore, oauth.getTokenString(), oauth.getToken(), oauth.getIdTokenString(), oauth.getIdToken(), oauth.getRefreshToken());
|
||||||
final KeycloakPrincipal<RefreshableKeycloakSecurityContext> principal = new KeycloakPrincipal<RefreshableKeycloakSecurityContext>(AdapterUtils.getPrincipalName(deployment, oauth.getToken()), session);
|
final KeycloakPrincipal<RefreshableKeycloakSecurityContext> principal = new KeycloakPrincipal<RefreshableKeycloakSecurityContext>(AdapterUtils.getPrincipalName(deployment, oauth.getToken()), session);
|
||||||
completeOAuthAuthentication(principal);
|
completeOAuthAuthentication(principal);
|
||||||
|
log.debugv("User ''{0}'' invoking ''{1}'' on client ''{2}''", principal.getName(), facade.getRequest().getURI(), deployment.getResourceName());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void completeOAuthAuthentication(KeycloakPrincipal<RefreshableKeycloakSecurityContext> principal);
|
protected abstract void completeOAuthAuthentication(KeycloakPrincipal<RefreshableKeycloakSecurityContext> principal);
|
||||||
|
|||||||
+1
-1
@@ -54,7 +54,7 @@ public class KeycloakDeploymentBuilderTest {
|
|||||||
assertEquals("234234-234234-234234", deployment.getResourceCredentials().get("secret"));
|
assertEquals("234234-234234-234234", deployment.getResourceCredentials().get("secret"));
|
||||||
assertEquals(ClientIdAndSecretCredentialsProvider.PROVIDER_ID, deployment.getClientAuthenticator().getId());
|
assertEquals(ClientIdAndSecretCredentialsProvider.PROVIDER_ID, deployment.getClientAuthenticator().getId());
|
||||||
assertEquals(20, ((ThreadSafeClientConnManager) deployment.getClient().getConnectionManager()).getMaxTotal());
|
assertEquals(20, ((ThreadSafeClientConnManager) deployment.getClient().getConnectionManager()).getMaxTotal());
|
||||||
assertEquals("https://backend:8443/auth/realms/demo/protocol/openid-connect/token", deployment.getTokenUrl());
|
assertEquals("https://localhost:8443/auth/realms/demo/protocol/openid-connect/token", deployment.getTokenUrl());
|
||||||
assertEquals(RelativeUrlsUsed.NEVER, deployment.getRelativeUrls());
|
assertEquals(RelativeUrlsUsed.NEVER, deployment.getRelativeUrls());
|
||||||
assertTrue(deployment.isAlwaysRefreshToken());
|
assertTrue(deployment.isAlwaysRefreshToken());
|
||||||
assertTrue(deployment.isRegisterNodeAtStartup());
|
assertTrue(deployment.isRegisterNodeAtStartup());
|
||||||
|
|||||||
@@ -24,7 +24,6 @@
|
|||||||
"client-keystore": "classpath:/keystore.jks",
|
"client-keystore": "classpath:/keystore.jks",
|
||||||
"client-keystore-password": "storepass",
|
"client-keystore-password": "storepass",
|
||||||
"client-key-password": "keypass",
|
"client-key-password": "keypass",
|
||||||
"auth-server-url-for-backend-requests": "https://backend:8443/auth",
|
|
||||||
"always-refresh-token": true,
|
"always-refresh-token": true,
|
||||||
"register-node-at-startup": true,
|
"register-node-at-startup": true,
|
||||||
"register-node-period": 1000,
|
"register-node-period": 1000,
|
||||||
|
|||||||
@@ -19,10 +19,10 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-as7-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -19,10 +19,10 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-as7-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -20,9 +20,9 @@
|
|||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-as7-integration-pom</artifactId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>keycloak-as7-subsystem</artifactId>
|
<artifactId>keycloak-as7-subsystem</artifactId>
|
||||||
@@ -64,25 +64,25 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.as</groupId>
|
<groupId>org.jboss.as</groupId>
|
||||||
<artifactId>jboss-as-naming</artifactId>
|
<artifactId>jboss-as-naming</artifactId>
|
||||||
<version>${jboss.version}</version>
|
<version>${jboss.as.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.as</groupId>
|
<groupId>org.jboss.as</groupId>
|
||||||
<artifactId>jboss-as-server</artifactId>
|
<artifactId>jboss-as-server</artifactId>
|
||||||
<version>${jboss.version}</version>
|
<version>${jboss.as.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.as</groupId>
|
<groupId>org.jboss.as</groupId>
|
||||||
<artifactId>jboss-as-ee</artifactId>
|
<artifactId>jboss-as-ee</artifactId>
|
||||||
<version>${jboss.version}</version>
|
<version>${jboss.as.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.as</groupId>
|
<groupId>org.jboss.as</groupId>
|
||||||
<artifactId>jboss-as-web</artifactId>
|
<artifactId>jboss-as-web</artifactId>
|
||||||
<version>${jboss.version}</version>
|
<version>${jboss.as.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|||||||
+3
@@ -49,6 +49,9 @@ public abstract class KeycloakDependencyProcessor implements DeploymentUnitProce
|
|||||||
String deploymentName = deploymentUnit.getName();
|
String deploymentName = deploymentUnit.getName();
|
||||||
if (!KeycloakAdapterConfigService.getInstance().isSecureDeployment(deploymentName)) {
|
if (!KeycloakAdapterConfigService.getInstance().isSecureDeployment(deploymentName)) {
|
||||||
WarMetaData warMetaData = deploymentUnit.getAttachment(WarMetaData.ATTACHMENT_KEY);
|
WarMetaData warMetaData = deploymentUnit.getAttachment(WarMetaData.ATTACHMENT_KEY);
|
||||||
|
if (warMetaData == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
JBossWebMetaData webMetaData = warMetaData.getMergedJBossWebMetaData();
|
JBossWebMetaData webMetaData = warMetaData.getMergedJBossWebMetaData();
|
||||||
if (webMetaData == null) {
|
if (webMetaData == null) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
+5
-3
@@ -15,9 +15,9 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
#
|
#
|
||||||
|
|
||||||
keycloak.subsystem=Keycloak subsystem
|
keycloak.subsystem=Keycloak adapter subsystem
|
||||||
keycloak.subsystem.add=Operation Adds Keycloak subsystem
|
keycloak.subsystem.add=Operation Adds Keycloak adapter subsystem
|
||||||
keycloak.subsystem.remove=Operation removes Keycloak subsystem
|
keycloak.subsystem.remove=Operation removes Keycloak adapter subsystem
|
||||||
keycloak.subsystem.realm=A Keycloak realm.
|
keycloak.subsystem.realm=A Keycloak realm.
|
||||||
keycloak.subsystem.secure-deployment=A deployment secured by Keycloak.
|
keycloak.subsystem.secure-deployment=A deployment secured by Keycloak.
|
||||||
|
|
||||||
@@ -63,6 +63,7 @@ keycloak.secure-deployment.resource=Application name
|
|||||||
keycloak.secure-deployment.use-resource-role-mappings=Use resource level permissions from token
|
keycloak.secure-deployment.use-resource-role-mappings=Use resource level permissions from token
|
||||||
keycloak.secure-deployment.credentials=Adapter credentials
|
keycloak.secure-deployment.credentials=Adapter credentials
|
||||||
keycloak.secure-deployment.bearer-only=Bearer Token Auth only
|
keycloak.secure-deployment.bearer-only=Bearer Token Auth only
|
||||||
|
keycloak.secure-deployment.enable-basic-auth=Enable Basic Authentication
|
||||||
keycloak.secure-deployment.public-client=Public client
|
keycloak.secure-deployment.public-client=Public client
|
||||||
keycloak.secure-deployment.enable-cors=Enable Keycloak CORS support
|
keycloak.secure-deployment.enable-cors=Enable Keycloak CORS support
|
||||||
keycloak.secure-deployment.client-keystore=n/a
|
keycloak.secure-deployment.client-keystore=n/a
|
||||||
@@ -78,6 +79,7 @@ keycloak.secure-deployment.register-node-at-startup=Cluster setting
|
|||||||
keycloak.secure-deployment.register-node-period=how often to re-register node
|
keycloak.secure-deployment.register-node-period=how often to re-register node
|
||||||
keycloak.secure-deployment.token-store=cookie or session storage for auth session data
|
keycloak.secure-deployment.token-store=cookie or session storage for auth session data
|
||||||
keycloak.secure-deployment.principal-attribute=token attribute to use to set Principal name
|
keycloak.secure-deployment.principal-attribute=token attribute to use to set Principal name
|
||||||
|
keycloak.secure-deployment.turn-off-change-session-id-on-login=The session id is changed by default on a successful login. Change this to true if you want to turn this off
|
||||||
|
|
||||||
keycloak.secure-deployment.credential=Credential value
|
keycloak.secure-deployment.credential=Credential value
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<name>Keycloak AS7 / JBoss EAP 6 Integration</name>
|
<name>Keycloak AS7 / JBoss EAP 6 Integration</name>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
+36
@@ -18,6 +18,8 @@
|
|||||||
package org.keycloak.adapters.jetty.core;
|
package org.keycloak.adapters.jetty.core;
|
||||||
|
|
||||||
import org.eclipse.jetty.security.DefaultUserIdentity;
|
import org.eclipse.jetty.security.DefaultUserIdentity;
|
||||||
|
import org.eclipse.jetty.security.IdentityService;
|
||||||
|
import org.eclipse.jetty.security.LoginService;
|
||||||
import org.eclipse.jetty.security.ServerAuthException;
|
import org.eclipse.jetty.security.ServerAuthException;
|
||||||
import org.eclipse.jetty.security.UserAuthentication;
|
import org.eclipse.jetty.security.UserAuthentication;
|
||||||
import org.eclipse.jetty.security.authentication.DeferredAuthentication;
|
import org.eclipse.jetty.security.authentication.DeferredAuthentication;
|
||||||
@@ -135,10 +137,44 @@ public abstract class AbstractKeycloakJettyAuthenticator extends LoginAuthentica
|
|||||||
return new DefaultUserIdentity(theSubject, principal, theRoles);
|
return new DefaultUserIdentity(theSubject, principal, theRoles);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class DummyLoginService implements LoginService {
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UserIdentity login(String username, Object credentials) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean validate(UserIdentity user) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IdentityService getIdentityService() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setIdentityService(IdentityService service) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void logout(UserIdentity user) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setConfiguration(AuthConfiguration configuration) {
|
public void setConfiguration(AuthConfiguration configuration) {
|
||||||
//super.setConfiguration(configuration);
|
//super.setConfiguration(configuration);
|
||||||
initializeKeycloak();
|
initializeKeycloak();
|
||||||
|
// need this so that getUserPrincipal does not throw NPE
|
||||||
|
_loginService = new DummyLoginService();
|
||||||
String error = configuration.getInitParameter(FormAuthenticator.__FORM_ERROR_PAGE);
|
String error = configuration.getInitParameter(FormAuthenticator.__FORM_ERROR_PAGE);
|
||||||
setErrorPage(error);
|
setErrorPage(error);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<name>Keycloak Jetty Integration</name>
|
<name>Keycloak Jetty Integration</name>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
@@ -163,6 +163,8 @@
|
|||||||
}
|
}
|
||||||
} else if (initOptions.onLoad) {
|
} else if (initOptions.onLoad) {
|
||||||
onLoad();
|
onLoad();
|
||||||
|
} else {
|
||||||
|
initPromise.setSuccess();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
initPromise.setSuccess();
|
initPromise.setSuccess();
|
||||||
@@ -190,7 +192,7 @@
|
|||||||
redirectUri += (redirectUri.indexOf('?') == -1 ? '?' : '&') + 'prompt=' + options.prompt;
|
redirectUri += (redirectUri.indexOf('?') == -1 ? '?' : '&') + 'prompt=' + options.prompt;
|
||||||
}
|
}
|
||||||
|
|
||||||
sessionStorage.oauthState = JSON.stringify({ state: state, nonce: nonce, redirectUri: encodeURIComponent(redirectUri) });
|
localStorage.oauthState = JSON.stringify({ state: state, nonce: nonce, redirectUri: encodeURIComponent(redirectUri) });
|
||||||
|
|
||||||
var action = 'auth';
|
var action = 'auth';
|
||||||
if (options && options.action == 'register') {
|
if (options && options.action == 'register') {
|
||||||
@@ -236,7 +238,7 @@
|
|||||||
kc.createLogoutUrl = function(options) {
|
kc.createLogoutUrl = function(options) {
|
||||||
var url = getRealmUrl()
|
var url = getRealmUrl()
|
||||||
+ '/protocol/openid-connect/logout'
|
+ '/protocol/openid-connect/logout'
|
||||||
+ '?redirect_uri=' + encodeURIComponent(adapter.redirectUri(options));
|
+ '?redirect_uri=' + encodeURIComponent(adapter.redirectUri(options, false));
|
||||||
|
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
@@ -687,10 +689,10 @@
|
|||||||
function parseCallback(url) {
|
function parseCallback(url) {
|
||||||
var oauth = new CallbackParser(url, kc.responseMode).parseUri();
|
var oauth = new CallbackParser(url, kc.responseMode).parseUri();
|
||||||
|
|
||||||
var sessionState = sessionStorage.oauthState && JSON.parse(sessionStorage.oauthState);
|
var sessionState = localStorage.oauthState && JSON.parse(localStorage.oauthState);
|
||||||
|
|
||||||
if (sessionState && (oauth.code || oauth.error || oauth.access_token || oauth.id_token) && oauth.state && oauth.state == sessionState.state) {
|
if (sessionState && (oauth.code || oauth.error || oauth.access_token || oauth.id_token) && oauth.state && oauth.state == sessionState.state) {
|
||||||
delete sessionStorage.oauthState;
|
delete localStorage.oauthState;
|
||||||
|
|
||||||
oauth.redirectUri = sessionState.redirectUri;
|
oauth.redirectUri = sessionState.redirectUri;
|
||||||
oauth.storedNonce = sessionState.nonce;
|
oauth.storedNonce = sessionState.nonce;
|
||||||
@@ -842,14 +844,18 @@
|
|||||||
return createPromise().promise;
|
return createPromise().promise;
|
||||||
},
|
},
|
||||||
|
|
||||||
redirectUri: function(options) {
|
redirectUri: function(options, encodeHash) {
|
||||||
|
if (arguments.length == 1) {
|
||||||
|
encodeHash = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (options && options.redirectUri) {
|
if (options && options.redirectUri) {
|
||||||
return options.redirectUri;
|
return options.redirectUri;
|
||||||
} else if (kc.redirectUri) {
|
} else if (kc.redirectUri) {
|
||||||
return kc.redirectUri;
|
return kc.redirectUri;
|
||||||
} else {
|
} else {
|
||||||
var redirectUri = location.href;
|
var redirectUri = location.href;
|
||||||
if (location.hash) {
|
if (location.hash && encodeHash) {
|
||||||
redirectUri = redirectUri.substring(0, location.href.indexOf('#'));
|
redirectUri = redirectUri.substring(0, location.href.indexOf('#'));
|
||||||
redirectUri += (redirectUri.indexOf('?') == -1 ? '?' : '&') + 'redirect_fragment=' + encodeURIComponent(location.hash.substring(1));
|
redirectUri += (redirectUri.indexOf('?') == -1 ? '?' : '&') + 'redirect_fragment=' + encodeURIComponent(location.hash.substring(1));
|
||||||
}
|
}
|
||||||
@@ -874,31 +880,28 @@
|
|||||||
var loginUrl = kc.createLoginUrl(options);
|
var loginUrl = kc.createLoginUrl(options);
|
||||||
var ref = window.open(loginUrl, '_blank', o);
|
var ref = window.open(loginUrl, '_blank', o);
|
||||||
|
|
||||||
var callback;
|
var completed = false;
|
||||||
var error;
|
|
||||||
|
|
||||||
ref.addEventListener('loadstart', function(event) {
|
ref.addEventListener('loadstart', function(event) {
|
||||||
if (event.url.indexOf('http://localhost') == 0) {
|
if (event.url.indexOf('http://localhost') == 0) {
|
||||||
callback = parseCallback(event.url);
|
var callback = parseCallback(event.url);
|
||||||
|
processCallback(callback, promise);
|
||||||
ref.close();
|
ref.close();
|
||||||
|
completed = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
ref.addEventListener('loaderror', function(event) {
|
ref.addEventListener('loaderror', function(event) {
|
||||||
|
if (!completed) {
|
||||||
if (event.url.indexOf('http://localhost') == 0) {
|
if (event.url.indexOf('http://localhost') == 0) {
|
||||||
callback = parseCallback(event.url);
|
var callback = parseCallback(event.url);
|
||||||
|
processCallback(callback, promise);
|
||||||
ref.close();
|
ref.close();
|
||||||
|
completed = true;
|
||||||
} else {
|
} else {
|
||||||
error = true;
|
promise.setError();
|
||||||
ref.close();
|
ref.close();
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
ref.addEventListener('exit', function(event) {
|
|
||||||
if (error || !callback) {
|
|
||||||
promise.setError();
|
|
||||||
} else {
|
|
||||||
processCallback(callback, promise);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<name>Keycloak OIDC Client Adapter Modules</name>
|
<name>Keycloak OIDC Client Adapter Modules</name>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
+11
-3
@@ -51,10 +51,16 @@ public class OIDCFilterSessionStore extends FilterSessionStore implements Adapte
|
|||||||
}
|
}
|
||||||
|
|
||||||
public HttpServletRequestWrapper buildWrapper() {
|
public HttpServletRequestWrapper buildWrapper() {
|
||||||
HttpSession session = request.getSession();
|
HttpSession session = request.getSession(false);
|
||||||
KeycloakAccount account = (KeycloakAccount)session.getAttribute(KeycloakAccount.class.getName());
|
KeycloakAccount account = null;
|
||||||
|
if (session != null) {
|
||||||
|
account = (KeycloakAccount) session.getAttribute(KeycloakAccount.class.getName());
|
||||||
if (account == null) {
|
if (account == null) {
|
||||||
account = (KeycloakAccount)request.getAttribute(KeycloakAccount.class.getName());
|
account = (KeycloakAccount) request.getAttribute(KeycloakAccount.class.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (account == null) {
|
||||||
|
account = (KeycloakAccount) request.getAttribute(KeycloakAccount.class.getName());
|
||||||
}
|
}
|
||||||
return buildWrapper(session, account);
|
return buildWrapper(session, account);
|
||||||
}
|
}
|
||||||
@@ -89,6 +95,7 @@ public class OIDCFilterSessionStore extends FilterSessionStore implements Adapte
|
|||||||
|
|
||||||
protected void cleanSession(HttpSession session) {
|
protected void cleanSession(HttpSession session) {
|
||||||
session.removeAttribute(KeycloakAccount.class.getName());
|
session.removeAttribute(KeycloakAccount.class.getName());
|
||||||
|
session.removeAttribute(KeycloakSecurityContext.class.getName());
|
||||||
clearSavedRequest(session);
|
clearSavedRequest(session);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -160,6 +167,7 @@ public class OIDCFilterSessionStore extends FilterSessionStore implements Adapte
|
|||||||
SerializableKeycloakAccount sAccount = new SerializableKeycloakAccount(roles, account.getPrincipal(), securityContext);
|
SerializableKeycloakAccount sAccount = new SerializableKeycloakAccount(roles, account.getPrincipal(), securityContext);
|
||||||
HttpSession httpSession = request.getSession();
|
HttpSession httpSession = request.getSession();
|
||||||
httpSession.setAttribute(KeycloakAccount.class.getName(), sAccount);
|
httpSession.setAttribute(KeycloakAccount.class.getName(), sAccount);
|
||||||
|
httpSession.setAttribute(KeycloakSecurityContext.class.getName(), sAccount.getKeycloakSecurityContext());
|
||||||
if (idMapper != null) idMapper.map(account.getKeycloakSecurityContext().getToken().getClientSession(), account.getPrincipal().getName(), httpSession.getId());
|
if (idMapper != null) idMapper.map(account.getKeycloakSecurityContext().getToken().getClientSession(), account.getPrincipal().getName(), httpSession.getId());
|
||||||
//String username = securityContext.getToken().getSubject();
|
//String username = securityContext.getToken().getSubject();
|
||||||
//log.fine("userSessionManagement.login: " + username);
|
//log.fine("userSessionManagement.login: " + username);
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
+1
-1
@@ -33,7 +33,7 @@ public class ServletOAuthClientBuilderTest {
|
|||||||
public void testBuilder() {
|
public void testBuilder() {
|
||||||
ServletOAuthClient oauthClient = ServletOAuthClientBuilder.build(getClass().getResourceAsStream("/keycloak.json"));
|
ServletOAuthClient oauthClient = ServletOAuthClientBuilder.build(getClass().getResourceAsStream("/keycloak.json"));
|
||||||
Assert.assertEquals("https://localhost:8443/auth/realms/demo/protocol/openid-connect/auth", oauthClient.getDeployment().getAuthUrl().clone().build().toString());
|
Assert.assertEquals("https://localhost:8443/auth/realms/demo/protocol/openid-connect/auth", oauthClient.getDeployment().getAuthUrl().clone().build().toString());
|
||||||
Assert.assertEquals("https://backend:8443/auth/realms/demo/protocol/openid-connect/token", oauthClient.getDeployment().getTokenUrl());
|
Assert.assertEquals("https://localhost:8443/auth/realms/demo/protocol/openid-connect/token", oauthClient.getDeployment().getTokenUrl());
|
||||||
assertEquals(RelativeUrlsUsed.NEVER, oauthClient.getRelativeUrlsUsed());
|
assertEquals(RelativeUrlsUsed.NEVER, oauthClient.getRelativeUrlsUsed());
|
||||||
Assert.assertEquals("customer-portal", oauthClient.getClientId());
|
Assert.assertEquals("customer-portal", oauthClient.getClientId());
|
||||||
Assert.assertEquals("234234-234234-234234", oauthClient.getCredentials().get(CredentialRepresentation.SECRET));
|
Assert.assertEquals("234234-234234-234234", oauthClient.getCredentials().get(CredentialRepresentation.SECRET));
|
||||||
|
|||||||
@@ -19,7 +19,6 @@
|
|||||||
"connection-pool-size": 20,
|
"connection-pool-size": 20,
|
||||||
"disable-trust-manager": true,
|
"disable-trust-manager": true,
|
||||||
"allow-any-hostname": true,
|
"allow-any-hostname": true,
|
||||||
"auth-server-url-for-backend-requests": "https://backend:8443/auth",
|
|
||||||
"always-refresh-token": true,
|
"always-refresh-token": true,
|
||||||
"register-node-at-startup": true,
|
"register-node-at-startup": true,
|
||||||
"register-node-period": 1000,
|
"register-node-period": 1000,
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -41,7 +41,6 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-core</artifactId>
|
<artifactId>keycloak-core</artifactId>
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
@@ -50,7 +49,6 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-adapter-core</artifactId>
|
<artifactId>keycloak-adapter-core</artifactId>
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.spec.javax.servlet</groupId>
|
<groupId>org.jboss.spec.javax.servlet</groupId>
|
||||||
@@ -82,7 +80,6 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bouncycastle</groupId>
|
<groupId>org.bouncycastle</groupId>
|
||||||
<artifactId>bcprov-jdk15on</artifactId>
|
<artifactId>bcprov-jdk15on</artifactId>
|
||||||
<version>${bouncycastle.crypto.version}</version>
|
|
||||||
<scope>runtime</scope>
|
<scope>runtime</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<name>Keycloak Tomcat Integration</name>
|
<name>Keycloak Tomcat Integration</name>
|
||||||
|
|||||||
@@ -19,10 +19,10 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-tomcat-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
+15
-2
@@ -69,12 +69,22 @@ public class CatalinaSessionTokenStore extends CatalinaAdapterSessionStore imple
|
|||||||
// just in case session got serialized
|
// just in case session got serialized
|
||||||
if (session.getDeployment() == null) session.setCurrentRequestInfo(deployment, this);
|
if (session.getDeployment() == null) session.setCurrentRequestInfo(deployment, this);
|
||||||
|
|
||||||
if (session.isActive() && !session.getDeployment().isAlwaysRefreshToken()) return;
|
if (session.isActive() && !session.getDeployment().isAlwaysRefreshToken()) {
|
||||||
|
request.setAttribute(KeycloakSecurityContext.class.getName(), session);
|
||||||
|
request.setUserPrincipal(account.getPrincipal());
|
||||||
|
request.setAuthType("KEYCLOAK");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// FYI: A refresh requires same scope, so same roles will be set. Otherwise, refresh will fail and token will
|
// FYI: A refresh requires same scope, so same roles will be set. Otherwise, refresh will fail and token will
|
||||||
// not be updated
|
// not be updated
|
||||||
boolean success = session.refreshExpiredToken(false);
|
boolean success = session.refreshExpiredToken(false);
|
||||||
if (success && session.isActive()) return;
|
if (success && session.isActive()) {
|
||||||
|
request.setAttribute(KeycloakSecurityContext.class.getName(), session);
|
||||||
|
request.setUserPrincipal(account.getPrincipal());
|
||||||
|
request.setAuthType("KEYCLOAK");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Refresh failed, so user is already logged out from keycloak. Cleanup and expire our session
|
// Refresh failed, so user is already logged out from keycloak. Cleanup and expire our session
|
||||||
log.fine("Cleanup and expire session " + catalinaSession.getId() + " after failed refresh");
|
log.fine("Cleanup and expire session " + catalinaSession.getId() + " after failed refresh");
|
||||||
@@ -85,6 +95,8 @@ public class CatalinaSessionTokenStore extends CatalinaAdapterSessionStore imple
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void cleanSession(Session catalinaSession) {
|
protected void cleanSession(Session catalinaSession) {
|
||||||
|
catalinaSession.getSession().removeAttribute(KeycloakSecurityContext.class.getName());
|
||||||
|
catalinaSession.getSession().removeAttribute(SerializableKeycloakAccount.class.getName());
|
||||||
catalinaSession.getSession().removeAttribute(OidcKeycloakAccount.class.getName());
|
catalinaSession.getSession().removeAttribute(OidcKeycloakAccount.class.getName());
|
||||||
catalinaSession.setPrincipal(null);
|
catalinaSession.setPrincipal(null);
|
||||||
catalinaSession.setAuthType(null);
|
catalinaSession.setAuthType(null);
|
||||||
@@ -164,6 +176,7 @@ public class CatalinaSessionTokenStore extends CatalinaAdapterSessionStore imple
|
|||||||
session.setPrincipal(principal);
|
session.setPrincipal(principal);
|
||||||
session.setAuthType("KEYCLOAK");
|
session.setAuthType("KEYCLOAK");
|
||||||
session.getSession().setAttribute(SerializableKeycloakAccount.class.getName(), sAccount);
|
session.getSession().setAttribute(SerializableKeycloakAccount.class.getName(), sAccount);
|
||||||
|
session.getSession().setAttribute(KeycloakSecurityContext.class.getName(), account.getKeycloakSecurityContext());
|
||||||
String username = securityContext.getToken().getSubject();
|
String username = securityContext.getToken().getSubject();
|
||||||
log.fine("userSessionManagement.login: " + username);
|
log.fine("userSessionManagement.login: " + username);
|
||||||
this.sessionManagement.login(session);
|
this.sessionManagement.login(session);
|
||||||
|
|||||||
@@ -19,10 +19,10 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-tomcat-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -19,10 +19,10 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-tomcat-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -19,10 +19,10 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-tomcat-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
+3
-1
@@ -92,7 +92,8 @@ public class ServletSessionTokenStore implements AdapterTokenStore {
|
|||||||
} else {
|
} else {
|
||||||
log.debug("Refresh failed. Account was not active. Returning null and invalidating Http session");
|
log.debug("Refresh failed. Account was not active. Returning null and invalidating Http session");
|
||||||
try {
|
try {
|
||||||
session.setAttribute(KeycloakUndertowAccount.class.getName(), null);
|
session.removeAttribute(KeycloakUndertowAccount.class.getName());
|
||||||
|
session.removeAttribute(KeycloakSecurityContext.class.getName());
|
||||||
session.invalidate();
|
session.invalidate();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.debug("Failed to invalidate session, might already be invalidated");
|
log.debug("Failed to invalidate session, might already be invalidated");
|
||||||
@@ -106,6 +107,7 @@ public class ServletSessionTokenStore implements AdapterTokenStore {
|
|||||||
final ServletRequestContext servletRequestContext = exchange.getAttachment(ServletRequestContext.ATTACHMENT_KEY);
|
final ServletRequestContext servletRequestContext = exchange.getAttachment(ServletRequestContext.ATTACHMENT_KEY);
|
||||||
HttpSession session = getSession(true);
|
HttpSession session = getSession(true);
|
||||||
session.setAttribute(KeycloakUndertowAccount.class.getName(), account);
|
session.setAttribute(KeycloakUndertowAccount.class.getName(), account);
|
||||||
|
session.setAttribute(KeycloakSecurityContext.class.getName(), account.getKeycloakSecurityContext());
|
||||||
sessionManagement.login(servletRequestContext.getDeployment().getSessionManager());
|
sessionManagement.login(servletRequestContext.getDeployment().getSessionManager());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
@@ -22,6 +22,7 @@ import io.undertow.server.HttpServerExchange;
|
|||||||
import io.undertow.server.session.Session;
|
import io.undertow.server.session.Session;
|
||||||
import io.undertow.util.Sessions;
|
import io.undertow.util.Sessions;
|
||||||
import org.jboss.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
|
import org.keycloak.KeycloakSecurityContext;
|
||||||
import org.keycloak.adapters.AdapterTokenStore;
|
import org.keycloak.adapters.AdapterTokenStore;
|
||||||
import org.keycloak.adapters.KeycloakDeployment;
|
import org.keycloak.adapters.KeycloakDeployment;
|
||||||
import org.keycloak.adapters.OidcKeycloakAccount;
|
import org.keycloak.adapters.OidcKeycloakAccount;
|
||||||
@@ -82,6 +83,7 @@ public class UndertowSessionTokenStore implements AdapterTokenStore {
|
|||||||
} else {
|
} else {
|
||||||
log.debug("Account was not active, returning false");
|
log.debug("Account was not active, returning false");
|
||||||
session.removeAttribute(KeycloakUndertowAccount.class.getName());
|
session.removeAttribute(KeycloakUndertowAccount.class.getName());
|
||||||
|
session.removeAttribute(KeycloakSecurityContext.class.getName());
|
||||||
session.invalidate(exchange);
|
session.invalidate(exchange);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -101,6 +103,7 @@ public class UndertowSessionTokenStore implements AdapterTokenStore {
|
|||||||
public void saveAccountInfo(OidcKeycloakAccount account) {
|
public void saveAccountInfo(OidcKeycloakAccount account) {
|
||||||
Session session = Sessions.getOrCreateSession(exchange);
|
Session session = Sessions.getOrCreateSession(exchange);
|
||||||
session.setAttribute(KeycloakUndertowAccount.class.getName(), account);
|
session.setAttribute(KeycloakUndertowAccount.class.getName(), account);
|
||||||
|
session.setAttribute(KeycloakSecurityContext.class.getName(), account.getKeycloakSecurityContext());
|
||||||
sessionManagement.login(session.getSessionManager());
|
sessionManagement.login(session.getSessionManager());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,6 +114,7 @@ public class UndertowSessionTokenStore implements AdapterTokenStore {
|
|||||||
KeycloakUndertowAccount account = (KeycloakUndertowAccount)session.getAttribute(KeycloakUndertowAccount.class.getName());
|
KeycloakUndertowAccount account = (KeycloakUndertowAccount)session.getAttribute(KeycloakUndertowAccount.class.getName());
|
||||||
if (account == null) return;
|
if (account == null) return;
|
||||||
session.removeAttribute(KeycloakUndertowAccount.class.getName());
|
session.removeAttribute(KeycloakUndertowAccount.class.getName());
|
||||||
|
session.removeAttribute(KeycloakSecurityContext.class.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<name>Keycloak WildFly Integration</name>
|
<name>Keycloak WildFly Integration</name>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -79,21 +79,15 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logging</groupId>
|
<groupId>org.jboss.logging</groupId>
|
||||||
<artifactId>jboss-logging-annotations</artifactId>
|
<artifactId>jboss-logging-annotations</artifactId>
|
||||||
<version>${jboss-logging-tools.version}</version>
|
<version>${jboss.logging.tools.wf8.version}</version>
|
||||||
<!-- This is a compile-time dependency of this project, but is not needed at compile or runtime by other
|
|
||||||
projects that depend on this project.-->
|
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logging</groupId>
|
<groupId>org.jboss.logging</groupId>
|
||||||
<artifactId>jboss-logging-processor</artifactId>
|
<artifactId>jboss-logging-processor</artifactId>
|
||||||
<version>${jboss-logging-tools.version}</version>
|
<version>${jboss.logging.tools.wf8.version}</version>
|
||||||
<!-- This is a compile-time dependency of this project, but is not needed at compile or runtime by other
|
|
||||||
projects that depend on this project.-->
|
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|||||||
+3
@@ -49,6 +49,9 @@ public abstract class KeycloakDependencyProcessor implements DeploymentUnitProce
|
|||||||
String deploymentName = deploymentUnit.getName();
|
String deploymentName = deploymentUnit.getName();
|
||||||
if (!KeycloakAdapterConfigService.getInstance().isSecureDeployment(deploymentName)) {
|
if (!KeycloakAdapterConfigService.getInstance().isSecureDeployment(deploymentName)) {
|
||||||
WarMetaData warMetaData = deploymentUnit.getAttachment(WarMetaData.ATTACHMENT_KEY);
|
WarMetaData warMetaData = deploymentUnit.getAttachment(WarMetaData.ATTACHMENT_KEY);
|
||||||
|
if (warMetaData == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
JBossWebMetaData webMetaData = warMetaData.getMergedJBossWebMetaData();
|
JBossWebMetaData webMetaData = warMetaData.getMergedJBossWebMetaData();
|
||||||
if (webMetaData == null) {
|
if (webMetaData == null) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
+3
@@ -49,6 +49,9 @@ public abstract class KeycloakDependencyProcessor implements DeploymentUnitProce
|
|||||||
String deploymentName = deploymentUnit.getName();
|
String deploymentName = deploymentUnit.getName();
|
||||||
if (!KeycloakAdapterConfigService.getInstance().isSecureDeployment(deploymentName)) {
|
if (!KeycloakAdapterConfigService.getInstance().isSecureDeployment(deploymentName)) {
|
||||||
WarMetaData warMetaData = deploymentUnit.getAttachment(WarMetaData.ATTACHMENT_KEY);
|
WarMetaData warMetaData = deploymentUnit.getAttachment(WarMetaData.ATTACHMENT_KEY);
|
||||||
|
if (warMetaData == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
JBossWebMetaData webMetaData = warMetaData.getMergedJBossWebMetaData();
|
JBossWebMetaData webMetaData = warMetaData.getMergedJBossWebMetaData();
|
||||||
if (webMetaData == null) {
|
if (webMetaData == null) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
+24
@@ -16,6 +16,30 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<subsystem xmlns="urn:jboss:domain:keycloak:1.1">
|
<subsystem xmlns="urn:jboss:domain:keycloak:1.1">
|
||||||
|
<realm name="master">
|
||||||
|
<realm-public-key>MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4siLKUew0WYxdtq6/rwk4Uj/4amGFFnE/yzIxQVU0PUqz3QBRVkUWpDj0K6ZnS5nzJV/y6DHLEy7hjZTdRDphyF1sq09aDOYnVpzu8o2sIlMM8q5RnUyEfIyUZqwo8pSZDJ90fS0s+IDUJNCSIrAKO3w1lqZDHL6E/YFHXyzkvQIDAQAB</realm-public-key>
|
||||||
|
<auth-server-url>http://localhost:8080/auth</auth-server-url>
|
||||||
|
<truststore>truststore.jks</truststore>
|
||||||
|
<truststore-password>secret</truststore-password>
|
||||||
|
<ssl-required>EXTERNAL</ssl-required>
|
||||||
|
<allow-any-hostname>false</allow-any-hostname>
|
||||||
|
<disable-trust-manager>true</disable-trust-manager>
|
||||||
|
<connection-pool-size>20</connection-pool-size>
|
||||||
|
<enable-cors>true</enable-cors>
|
||||||
|
<client-keystore>keys.jks</client-keystore>
|
||||||
|
<client-keystore-password>secret</client-keystore-password>
|
||||||
|
<client-key-password>secret</client-key-password>
|
||||||
|
<cors-max-age>600</cors-max-age>
|
||||||
|
<cors-allowed-headers>X-Custom</cors-allowed-headers>
|
||||||
|
<cors-allowed-methods>PUT,POST,DELETE,GET</cors-allowed-methods>
|
||||||
|
<expose-token>false</expose-token>
|
||||||
|
<auth-server-url-for-backend-requests>http://127.0.0.2:8080/auth</auth-server-url-for-backend-requests>
|
||||||
|
<always-refresh-token>false</always-refresh-token>
|
||||||
|
<register-node-at-startup>true</register-node-at-startup>
|
||||||
|
<register-node-period>60</register-node-period>
|
||||||
|
<token-store>session</token-store>
|
||||||
|
<principal-attribute>sub</principal-attribute>
|
||||||
|
</realm>
|
||||||
<secure-deployment name="web-console">
|
<secure-deployment name="web-console">
|
||||||
<realm>master</realm>
|
<realm>master</realm>
|
||||||
<resource>web-console</resource>
|
<resource>web-console</resource>
|
||||||
|
|||||||
+1
-1
@@ -20,7 +20,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<name>Keycloak Integration</name>
|
<name>Keycloak Integration</name>
|
||||||
|
|||||||
@@ -19,10 +19,10 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-saml-eap-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
@@ -43,6 +43,10 @@
|
|||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-adapter-spi</artifactId>
|
<artifactId>keycloak-adapter-spi</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-saml-adapter-api-public</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-saml-adapter-core</artifactId>
|
<artifactId>keycloak-saml-adapter-core</artifactId>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<name>Keycloak SAML EAP Integration</name>
|
<name>Keycloak SAML EAP Integration</name>
|
||||||
|
|||||||
@@ -20,9 +20,9 @@
|
|||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-saml-eap-integration-pom</artifactId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>keycloak-saml-as7-subsystem</artifactId>
|
<artifactId>keycloak-saml-as7-subsystem</artifactId>
|
||||||
@@ -64,25 +64,25 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.as</groupId>
|
<groupId>org.jboss.as</groupId>
|
||||||
<artifactId>jboss-as-naming</artifactId>
|
<artifactId>jboss-as-naming</artifactId>
|
||||||
<version>${jboss.version}</version>
|
<version>${jboss.as.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.as</groupId>
|
<groupId>org.jboss.as</groupId>
|
||||||
<artifactId>jboss-as-server</artifactId>
|
<artifactId>jboss-as-server</artifactId>
|
||||||
<version>${jboss.version}</version>
|
<version>${jboss.as.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.as</groupId>
|
<groupId>org.jboss.as</groupId>
|
||||||
<artifactId>jboss-as-ee</artifactId>
|
<artifactId>jboss-as-ee</artifactId>
|
||||||
<version>${jboss.version}</version>
|
<version>${jboss.as.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.as</groupId>
|
<groupId>org.jboss.as</groupId>
|
||||||
<artifactId>jboss-as-web</artifactId>
|
<artifactId>jboss-as-web</artifactId>
|
||||||
<version>${jboss.version}</version>
|
<version>${jboss.as.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -104,7 +104,7 @@ projects that depend on this project.-->
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.as</groupId>
|
<groupId>org.jboss.as</groupId>
|
||||||
<artifactId>jboss-as-controller</artifactId>
|
<artifactId>jboss-as-controller</artifactId>
|
||||||
<version>${jboss.version}</version>
|
<version>${jboss.as.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|||||||
+5
@@ -39,6 +39,7 @@ public abstract class KeycloakDependencyProcessor implements DeploymentUnitProce
|
|||||||
|
|
||||||
private static final ModuleIdentifier KEYCLOAK_JBOSS_CORE_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-jboss-adapter-core");
|
private static final ModuleIdentifier KEYCLOAK_JBOSS_CORE_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-jboss-adapter-core");
|
||||||
private static final ModuleIdentifier KEYCLOAK_CORE_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-saml-adapter-core");
|
private static final ModuleIdentifier KEYCLOAK_CORE_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-saml-adapter-core");
|
||||||
|
private static final ModuleIdentifier KEYCLOAK_API_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-saml-adapter-api-public");
|
||||||
private static final ModuleIdentifier KEYCLOAK_COMMON = ModuleIdentifier.create("org.keycloak.keycloak-common");
|
private static final ModuleIdentifier KEYCLOAK_COMMON = ModuleIdentifier.create("org.keycloak.keycloak-common");
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -48,6 +49,9 @@ public abstract class KeycloakDependencyProcessor implements DeploymentUnitProce
|
|||||||
String deploymentName = deploymentUnit.getName();
|
String deploymentName = deploymentUnit.getName();
|
||||||
if (Configuration.INSTANCE.getSecureDeployment(deploymentName) == null) {
|
if (Configuration.INSTANCE.getSecureDeployment(deploymentName) == null) {
|
||||||
WarMetaData warMetaData = deploymentUnit.getAttachment(WarMetaData.ATTACHMENT_KEY);
|
WarMetaData warMetaData = deploymentUnit.getAttachment(WarMetaData.ATTACHMENT_KEY);
|
||||||
|
if (warMetaData == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
JBossWebMetaData webMetaData = warMetaData.getMergedJBossWebMetaData();
|
JBossWebMetaData webMetaData = warMetaData.getMergedJBossWebMetaData();
|
||||||
if (webMetaData == null) {
|
if (webMetaData == null) {
|
||||||
return;
|
return;
|
||||||
@@ -67,6 +71,7 @@ public abstract class KeycloakDependencyProcessor implements DeploymentUnitProce
|
|||||||
private void addCommonModules(ModuleSpecification moduleSpecification, ModuleLoader moduleLoader) {
|
private void addCommonModules(ModuleSpecification moduleSpecification, ModuleLoader moduleLoader) {
|
||||||
// ModuleDependency(ModuleLoader moduleLoader, ModuleIdentifier identifier, boolean optional, boolean export, boolean importServices, boolean userSpecified)
|
// ModuleDependency(ModuleLoader moduleLoader, ModuleIdentifier identifier, boolean optional, boolean export, boolean importServices, boolean userSpecified)
|
||||||
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_JBOSS_CORE_ADAPTER, false, false, false, false));
|
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_JBOSS_CORE_ADAPTER, false, false, false, false));
|
||||||
|
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_API_ADAPTER, false, false, false, false));
|
||||||
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_CORE_ADAPTER, false, false, false, false));
|
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_CORE_ADAPTER, false, false, false, false));
|
||||||
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_COMMON, false, false, false, false));
|
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_COMMON, false, false, false, false));
|
||||||
}
|
}
|
||||||
|
|||||||
Executable
+82
@@ -0,0 +1,82 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!--
|
||||||
|
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
|
||||||
|
~ and other contributors as indicated by the @author tags.
|
||||||
|
~
|
||||||
|
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
~ you may not use this file except in compliance with the License.
|
||||||
|
~ You may obtain a copy of the License at
|
||||||
|
~
|
||||||
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~
|
||||||
|
~ Unless required by applicable law or agreed to in writing, software
|
||||||
|
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
~ See the License for the specific language governing permissions and
|
||||||
|
~ limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<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.9.2.Final</version>
|
||||||
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>keycloak-saml-adapter-api-public</artifactId>
|
||||||
|
<name>Keycloak SAML Client Adapter Public API</name>
|
||||||
|
<description/>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<timestamp>${maven.build.timestamp}</timestamp>
|
||||||
|
<maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
|
||||||
|
</properties>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-saml-core-public</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-saml-core</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-adapter-spi</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-common</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jboss.logging</groupId>
|
||||||
|
<artifactId>jboss-logging</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
||||||
-1
@@ -19,7 +19,6 @@ package org.keycloak.adapters.saml;
|
|||||||
|
|
||||||
import org.keycloak.adapters.spi.AuthenticationError;
|
import org.keycloak.adapters.spi.AuthenticationError;
|
||||||
import org.keycloak.dom.saml.v2.protocol.StatusResponseType;
|
import org.keycloak.dom.saml.v2.protocol.StatusResponseType;
|
||||||
import org.keycloak.dom.saml.v2.protocol.StatusType;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Object that describes the SAML error that happened.
|
* Object that describes the SAML error that happened.
|
||||||
File renamed without changes.
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -35,6 +35,11 @@
|
|||||||
<maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
|
<maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
|
||||||
</properties>
|
</properties>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-saml-core-public</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-saml-core</artifactId>
|
<artifactId>keycloak-saml-core</artifactId>
|
||||||
@@ -45,6 +50,11 @@
|
|||||||
<artifactId>keycloak-adapter-spi</artifactId>
|
<artifactId>keycloak-adapter-spi</artifactId>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-saml-adapter-api-public</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-common</artifactId>
|
<artifactId>keycloak-common</artifactId>
|
||||||
|
|||||||
+34
-25
@@ -26,7 +26,6 @@ import org.keycloak.saml.SAML2NameIDPolicyBuilder;
|
|||||||
import org.keycloak.saml.common.constants.JBossSAMLURIConstants;
|
import org.keycloak.saml.common.constants.JBossSAMLURIConstants;
|
||||||
import org.keycloak.saml.common.exceptions.ConfigurationException;
|
import org.keycloak.saml.common.exceptions.ConfigurationException;
|
||||||
import org.keycloak.saml.common.exceptions.ProcessingException;
|
import org.keycloak.saml.common.exceptions.ProcessingException;
|
||||||
import org.w3c.dom.Document;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.security.KeyPair;
|
import java.security.KeyPair;
|
||||||
@@ -54,6 +53,39 @@ public abstract class AbstractInitiateLogin implements AuthChallenge {
|
|||||||
@Override
|
@Override
|
||||||
public boolean challenge(HttpFacade httpFacade) {
|
public boolean challenge(HttpFacade httpFacade) {
|
||||||
try {
|
try {
|
||||||
|
SAML2AuthnRequestBuilder authnRequestBuilder = buildSaml2AuthnRequestBuilder(deployment);
|
||||||
|
BaseSAML2BindingBuilder binding = createSaml2Binding(deployment);
|
||||||
|
sessionStore.saveRequest();
|
||||||
|
|
||||||
|
sendAuthnRequest(httpFacade, authnRequestBuilder, binding);
|
||||||
|
sessionStore.setCurrentAction(SamlSessionStore.CurrentAction.LOGGING_IN);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException("Could not create authentication request.", e);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BaseSAML2BindingBuilder createSaml2Binding(SamlDeployment deployment) {
|
||||||
|
BaseSAML2BindingBuilder binding = new BaseSAML2BindingBuilder();
|
||||||
|
|
||||||
|
if (deployment.getIDP().getSingleSignOnService().signRequest()) {
|
||||||
|
|
||||||
|
binding.signatureAlgorithm(deployment.getSignatureAlgorithm());
|
||||||
|
KeyPair keypair = deployment.getSigningKeyPair();
|
||||||
|
if (keypair == null) {
|
||||||
|
throw new RuntimeException("Signing keys not configured");
|
||||||
|
}
|
||||||
|
if (deployment.getSignatureCanonicalizationMethod() != null) {
|
||||||
|
binding.canonicalizationMethod(deployment.getSignatureCanonicalizationMethod());
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.signWith(keypair);
|
||||||
|
binding.signDocument();
|
||||||
|
}
|
||||||
|
return binding;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SAML2AuthnRequestBuilder buildSaml2AuthnRequestBuilder(SamlDeployment deployment) {
|
||||||
String issuerURL = deployment.getEntityID();
|
String issuerURL = deployment.getEntityID();
|
||||||
String nameIDPolicyFormat = deployment.getNameIDPolicyFormat();
|
String nameIDPolicyFormat = deployment.getNameIDPolicyFormat();
|
||||||
|
|
||||||
@@ -77,30 +109,7 @@ public abstract class AbstractInitiateLogin implements AuthChallenge {
|
|||||||
if (deployment.getAssertionConsumerServiceUrl() != null) {
|
if (deployment.getAssertionConsumerServiceUrl() != null) {
|
||||||
authnRequestBuilder.assertionConsumerUrl(deployment.getAssertionConsumerServiceUrl());
|
authnRequestBuilder.assertionConsumerUrl(deployment.getAssertionConsumerServiceUrl());
|
||||||
}
|
}
|
||||||
BaseSAML2BindingBuilder binding = new BaseSAML2BindingBuilder();
|
return authnRequestBuilder;
|
||||||
|
|
||||||
if (deployment.getIDP().getSingleSignOnService().signRequest()) {
|
|
||||||
|
|
||||||
|
|
||||||
KeyPair keypair = deployment.getSigningKeyPair();
|
|
||||||
if (keypair == null) {
|
|
||||||
throw new RuntimeException("Signing keys not configured");
|
|
||||||
}
|
|
||||||
if (deployment.getSignatureCanonicalizationMethod() != null) {
|
|
||||||
binding.canonicalizationMethod(deployment.getSignatureCanonicalizationMethod());
|
|
||||||
}
|
|
||||||
|
|
||||||
binding.signWith(keypair);
|
|
||||||
binding.signDocument();
|
|
||||||
}
|
|
||||||
sessionStore.saveRequest();
|
|
||||||
|
|
||||||
sendAuthnRequest(httpFacade, authnRequestBuilder, binding);
|
|
||||||
sessionStore.setCurrentAction(SamlSessionStore.CurrentAction.LOGGING_IN);
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException("Could not create authentication request.", e);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void sendAuthnRequest(HttpFacade httpFacade, SAML2AuthnRequestBuilder authnRequestBuilder, BaseSAML2BindingBuilder binding) throws ProcessingException, ConfigurationException, IOException;
|
protected abstract void sendAuthnRequest(HttpFacade httpFacade, SAML2AuthnRequestBuilder authnRequestBuilder, BaseSAML2BindingBuilder binding) throws ProcessingException, ConfigurationException, IOException;
|
||||||
|
|||||||
@@ -18,8 +18,6 @@
|
|||||||
package org.keycloak.adapters.saml;
|
package org.keycloak.adapters.saml;
|
||||||
|
|
||||||
import org.keycloak.adapters.spi.AdapterSessionStore;
|
import org.keycloak.adapters.spi.AdapterSessionStore;
|
||||||
import org.keycloak.dom.saml.v2.protocol.StatusResponseType;
|
|
||||||
import org.keycloak.dom.saml.v2.protocol.StatusType;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|||||||
-1
@@ -25,7 +25,6 @@ import org.keycloak.saml.common.util.StaxParserUtil;
|
|||||||
|
|
||||||
import javax.xml.namespace.QName;
|
import javax.xml.namespace.QName;
|
||||||
import javax.xml.stream.XMLEventReader;
|
import javax.xml.stream.XMLEventReader;
|
||||||
import javax.xml.stream.XMLStreamException;
|
|
||||||
import javax.xml.stream.events.StartElement;
|
import javax.xml.stream.events.StartElement;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
-1
@@ -18,7 +18,6 @@
|
|||||||
package org.keycloak.adapters.saml.config.parsers;
|
package org.keycloak.adapters.saml.config.parsers;
|
||||||
|
|
||||||
import org.keycloak.adapters.saml.config.Key;
|
import org.keycloak.adapters.saml.config.Key;
|
||||||
import org.keycloak.adapters.saml.config.SP;
|
|
||||||
import org.keycloak.saml.common.exceptions.ParsingException;
|
import org.keycloak.saml.common.exceptions.ParsingException;
|
||||||
import org.keycloak.saml.common.parsers.AbstractParser;
|
import org.keycloak.saml.common.parsers.AbstractParser;
|
||||||
import org.keycloak.saml.common.util.StaxParserUtil;
|
import org.keycloak.saml.common.util.StaxParserUtil;
|
||||||
|
|||||||
-1
@@ -23,7 +23,6 @@ import org.keycloak.adapters.saml.SamlSessionStore;
|
|||||||
import org.keycloak.adapters.saml.profile.SamlInvocationContext;
|
import org.keycloak.adapters.saml.profile.SamlInvocationContext;
|
||||||
import org.keycloak.adapters.spi.AuthOutcome;
|
import org.keycloak.adapters.spi.AuthOutcome;
|
||||||
import org.keycloak.adapters.spi.HttpFacade;
|
import org.keycloak.adapters.spi.HttpFacade;
|
||||||
import org.keycloak.saml.common.constants.GeneralConstants;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
|
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
|
||||||
|
|||||||
-1
@@ -20,7 +20,6 @@ package org.keycloak.adapters.saml.profile.webbrowsersso;
|
|||||||
import org.keycloak.adapters.saml.OnSessionCreated;
|
import org.keycloak.adapters.saml.OnSessionCreated;
|
||||||
import org.keycloak.adapters.saml.SamlDeployment;
|
import org.keycloak.adapters.saml.SamlDeployment;
|
||||||
import org.keycloak.adapters.saml.SamlSessionStore;
|
import org.keycloak.adapters.saml.SamlSessionStore;
|
||||||
import org.keycloak.adapters.saml.profile.SamlInvocationContext;
|
|
||||||
import org.keycloak.adapters.spi.AuthOutcome;
|
import org.keycloak.adapters.spi.AuthOutcome;
|
||||||
import org.keycloak.adapters.spi.HttpFacade;
|
import org.keycloak.adapters.spi.HttpFacade;
|
||||||
import org.keycloak.saml.common.constants.GeneralConstants;
|
import org.keycloak.saml.common.constants.GeneralConstants;
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -60,6 +60,10 @@
|
|||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-saml-core</artifactId>
|
<artifactId>keycloak-saml-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-saml-adapter-api-public</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-saml-adapter-core</artifactId>
|
<artifactId>keycloak-saml-adapter-core</artifactId>
|
||||||
|
|||||||
+36
-2
@@ -18,6 +18,8 @@
|
|||||||
package org.keycloak.adapters.saml.jetty;
|
package org.keycloak.adapters.saml.jetty;
|
||||||
|
|
||||||
import org.eclipse.jetty.security.DefaultUserIdentity;
|
import org.eclipse.jetty.security.DefaultUserIdentity;
|
||||||
|
import org.eclipse.jetty.security.IdentityService;
|
||||||
|
import org.eclipse.jetty.security.LoginService;
|
||||||
import org.eclipse.jetty.security.ServerAuthException;
|
import org.eclipse.jetty.security.ServerAuthException;
|
||||||
import org.eclipse.jetty.security.UserAuthentication;
|
import org.eclipse.jetty.security.UserAuthentication;
|
||||||
import org.eclipse.jetty.security.authentication.DeferredAuthentication;
|
import org.eclipse.jetty.security.authentication.DeferredAuthentication;
|
||||||
@@ -25,10 +27,8 @@ import org.eclipse.jetty.security.authentication.FormAuthenticator;
|
|||||||
import org.eclipse.jetty.security.authentication.LoginAuthenticator;
|
import org.eclipse.jetty.security.authentication.LoginAuthenticator;
|
||||||
import org.eclipse.jetty.server.Authentication;
|
import org.eclipse.jetty.server.Authentication;
|
||||||
import org.eclipse.jetty.server.Request;
|
import org.eclipse.jetty.server.Request;
|
||||||
import org.eclipse.jetty.server.Response;
|
|
||||||
import org.eclipse.jetty.server.UserIdentity;
|
import org.eclipse.jetty.server.UserIdentity;
|
||||||
import org.eclipse.jetty.server.handler.ContextHandler;
|
import org.eclipse.jetty.server.handler.ContextHandler;
|
||||||
import org.eclipse.jetty.util.URIUtil;
|
|
||||||
import org.jboss.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
import org.keycloak.adapters.saml.SamlSessionStore;
|
import org.keycloak.adapters.saml.SamlSessionStore;
|
||||||
import org.keycloak.adapters.saml.profile.SamlAuthenticationHandler;
|
import org.keycloak.adapters.saml.profile.SamlAuthenticationHandler;
|
||||||
@@ -135,12 +135,46 @@ public abstract class AbstractSamlAuthenticator extends LoginAuthenticator {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class DummyLoginService implements LoginService {
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UserIdentity login(String username, Object credentials) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean validate(UserIdentity user) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IdentityService getIdentityService() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setIdentityService(IdentityService service) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void logout(UserIdentity user) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setConfiguration(AuthConfiguration configuration) {
|
public void setConfiguration(AuthConfiguration configuration) {
|
||||||
//super.setConfiguration(configuration);
|
//super.setConfiguration(configuration);
|
||||||
initializeKeycloak();
|
initializeKeycloak();
|
||||||
|
// need this so that getUserPrincipal does not throw NPE
|
||||||
|
_loginService = new DummyLoginService();
|
||||||
String error = configuration.getInitParameter(FormAuthenticator.__FORM_ERROR_PAGE);
|
String error = configuration.getInitParameter(FormAuthenticator.__FORM_ERROR_PAGE);
|
||||||
setErrorPage(error);
|
setErrorPage(error);
|
||||||
}
|
}
|
||||||
|
|||||||
-1
@@ -28,7 +28,6 @@ import org.keycloak.adapters.jetty.spi.JettyUserSessionManagement;
|
|||||||
import org.keycloak.adapters.saml.SamlSession;
|
import org.keycloak.adapters.saml.SamlSession;
|
||||||
import org.keycloak.adapters.saml.SamlSessionStore;
|
import org.keycloak.adapters.saml.SamlSessionStore;
|
||||||
import org.keycloak.common.util.KeycloakUriBuilder;
|
import org.keycloak.common.util.KeycloakUriBuilder;
|
||||||
import org.keycloak.dom.saml.v2.protocol.StatusType;
|
|
||||||
|
|
||||||
import javax.servlet.http.HttpSession;
|
import javax.servlet.http.HttpSession;
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -51,6 +51,10 @@
|
|||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-common</artifactId>
|
<artifactId>keycloak-common</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-saml-adapter-api-public</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-saml-adapter-core</artifactId>
|
<artifactId>keycloak-saml-adapter-core</artifactId>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -52,6 +52,10 @@
|
|||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-common</artifactId>
|
<artifactId>keycloak-common</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-saml-adapter-api-public</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-saml-adapter-core</artifactId>
|
<artifactId>keycloak-saml-adapter-core</artifactId>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -56,6 +56,10 @@
|
|||||||
<groupId>org.bouncycastle</groupId>
|
<groupId>org.bouncycastle</groupId>
|
||||||
<artifactId>bcprov-jdk15on</artifactId>
|
<artifactId>bcprov-jdk15on</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-saml-adapter-api-public</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-saml-adapter-core</artifactId>
|
<artifactId>keycloak-saml-adapter-core</artifactId>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<name>Keycloak SAML Jetty Integration</name>
|
<name>Keycloak SAML Jetty Integration</name>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<name>Keycloak SAML Client Adapter Modules</name>
|
<name>Keycloak SAML Client Adapter Modules</name>
|
||||||
@@ -31,6 +31,7 @@
|
|||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
|
<module>core-public</module>
|
||||||
<module>core</module>
|
<module>core</module>
|
||||||
<module>undertow</module>
|
<module>undertow</module>
|
||||||
<module>tomcat</module>
|
<module>tomcat</module>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -54,6 +54,10 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-saml-core</artifactId>
|
<artifactId>keycloak-saml-core</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-saml-adapter-api-public</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
|
|||||||
-1
@@ -26,7 +26,6 @@ import org.keycloak.adapters.saml.SamlSession;
|
|||||||
import org.keycloak.adapters.saml.SamlSessionStore;
|
import org.keycloak.adapters.saml.SamlSessionStore;
|
||||||
import org.keycloak.adapters.servlet.FilterSessionStore;
|
import org.keycloak.adapters.servlet.FilterSessionStore;
|
||||||
import org.keycloak.common.util.KeycloakUriBuilder;
|
import org.keycloak.common.util.KeycloakUriBuilder;
|
||||||
import org.keycloak.dom.saml.v2.protocol.StatusType;
|
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletRequestWrapper;
|
import javax.servlet.http.HttpServletRequestWrapper;
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<name>Keycloak SAML Tomcat Integration</name>
|
<name>Keycloak SAML Tomcat Integration</name>
|
||||||
|
|||||||
@@ -19,10 +19,10 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-saml-tomcat-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
@@ -64,6 +64,10 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-saml-core</artifactId>
|
<artifactId>keycloak-saml-core</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-saml-adapter-api-public</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
|
|||||||
+2
-1
@@ -167,9 +167,9 @@ public abstract class AbstractSamlAuthenticatorValve extends FormAuthenticator i
|
|||||||
@Override
|
@Override
|
||||||
public void invoke(Request request, Response response) throws IOException, ServletException {
|
public void invoke(Request request, Response response) throws IOException, ServletException {
|
||||||
log.fine("*********************** SAML ************");
|
log.fine("*********************** SAML ************");
|
||||||
if (request.getRequestURI().substring(request.getContextPath().length()).endsWith("/saml")) {
|
|
||||||
CatalinaHttpFacade facade = new CatalinaHttpFacade(response, request);
|
CatalinaHttpFacade facade = new CatalinaHttpFacade(response, request);
|
||||||
SamlDeployment deployment = deploymentContext.resolveDeployment(facade);
|
SamlDeployment deployment = deploymentContext.resolveDeployment(facade);
|
||||||
|
if (request.getRequestURI().substring(request.getContextPath().length()).endsWith("/saml")) {
|
||||||
if (deployment != null && deployment.isConfigured()) {
|
if (deployment != null && deployment.isConfigured()) {
|
||||||
SamlSessionStore tokenStore = getSessionStore(request, facade, deployment);
|
SamlSessionStore tokenStore = getSessionStore(request, facade, deployment);
|
||||||
SamlAuthenticator authenticator = new CatalinaSamlEndpoint(facade, deployment, tokenStore);
|
SamlAuthenticator authenticator = new CatalinaSamlEndpoint(facade, deployment, tokenStore);
|
||||||
@@ -180,6 +180,7 @@ public abstract class AbstractSamlAuthenticatorValve extends FormAuthenticator i
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
getSessionStore(request, facade, deployment).isLoggedIn(); // sets request UserPrincipal if logged in. we do this so that the UserPrincipal is available on unsecured, unconstrainted URLs
|
||||||
super.invoke(request, response);
|
super.invoke(request, response);
|
||||||
} finally {
|
} finally {
|
||||||
}
|
}
|
||||||
|
|||||||
-3
@@ -27,10 +27,7 @@ import org.keycloak.adapters.spi.SessionIdMapper;
|
|||||||
import org.keycloak.adapters.tomcat.CatalinaUserSessionManagement;
|
import org.keycloak.adapters.tomcat.CatalinaUserSessionManagement;
|
||||||
import org.keycloak.adapters.tomcat.GenericPrincipalFactory;
|
import org.keycloak.adapters.tomcat.GenericPrincipalFactory;
|
||||||
import org.keycloak.common.util.KeycloakUriBuilder;
|
import org.keycloak.common.util.KeycloakUriBuilder;
|
||||||
import org.keycloak.dom.saml.v2.protocol.StatusResponseType;
|
|
||||||
import org.keycloak.dom.saml.v2.protocol.StatusType;
|
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpSession;
|
import javax.servlet.http.HttpSession;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
|||||||
@@ -19,10 +19,10 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-saml-tomcat-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -19,10 +19,10 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-saml-tomcat-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -19,10 +19,10 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-saml-tomcat-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -52,6 +52,11 @@
|
|||||||
<artifactId>keycloak-common</artifactId>
|
<artifactId>keycloak-common</artifactId>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-saml-adapter-api-public</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-saml-adapter-core</artifactId>
|
<artifactId>keycloak-saml-adapter-core</artifactId>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<name>Keycloak SAML Wildfly Integration</name>
|
<name>Keycloak SAML Wildfly Integration</name>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -45,6 +45,10 @@
|
|||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-adapter-spi</artifactId>
|
<artifactId>keycloak-adapter-spi</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-saml-adapter-api-public</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-saml-adapter-core</artifactId>
|
<artifactId>keycloak-saml-adapter-core</artifactId>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
+5
@@ -37,6 +37,7 @@ import org.jboss.modules.ModuleLoader;
|
|||||||
public abstract class KeycloakDependencyProcessor implements DeploymentUnitProcessor {
|
public abstract class KeycloakDependencyProcessor implements DeploymentUnitProcessor {
|
||||||
|
|
||||||
private static final ModuleIdentifier KEYCLOAK_JBOSS_CORE_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-jboss-adapter-core");
|
private static final ModuleIdentifier KEYCLOAK_JBOSS_CORE_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-jboss-adapter-core");
|
||||||
|
private static final ModuleIdentifier KEYCLOAK_API_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-saml-adapter-api-public");
|
||||||
private static final ModuleIdentifier KEYCLOAK_CORE_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-saml-adapter-core");
|
private static final ModuleIdentifier KEYCLOAK_CORE_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-saml-adapter-core");
|
||||||
private static final ModuleIdentifier KEYCLOAK_COMMON = ModuleIdentifier.create("org.keycloak.keycloak-common");
|
private static final ModuleIdentifier KEYCLOAK_COMMON = ModuleIdentifier.create("org.keycloak.keycloak-common");
|
||||||
|
|
||||||
@@ -47,6 +48,9 @@ public abstract class KeycloakDependencyProcessor implements DeploymentUnitProce
|
|||||||
String deploymentName = deploymentUnit.getName();
|
String deploymentName = deploymentUnit.getName();
|
||||||
if (Configuration.INSTANCE.getSecureDeployment(deploymentName) == null) {
|
if (Configuration.INSTANCE.getSecureDeployment(deploymentName) == null) {
|
||||||
WarMetaData warMetaData = deploymentUnit.getAttachment(WarMetaData.ATTACHMENT_KEY);
|
WarMetaData warMetaData = deploymentUnit.getAttachment(WarMetaData.ATTACHMENT_KEY);
|
||||||
|
if (warMetaData == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
JBossWebMetaData webMetaData = warMetaData.getMergedJBossWebMetaData();
|
JBossWebMetaData webMetaData = warMetaData.getMergedJBossWebMetaData();
|
||||||
if (webMetaData == null) {
|
if (webMetaData == null) {
|
||||||
return;
|
return;
|
||||||
@@ -69,6 +73,7 @@ public abstract class KeycloakDependencyProcessor implements DeploymentUnitProce
|
|||||||
// ModuleDependency(ModuleLoader moduleLoader, ModuleIdentifier identifier, boolean optional, boolean export, boolean importServices, boolean userSpecified)
|
// ModuleDependency(ModuleLoader moduleLoader, ModuleIdentifier identifier, boolean optional, boolean export, boolean importServices, boolean userSpecified)
|
||||||
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_JBOSS_CORE_ADAPTER, false, false, false, false));
|
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_JBOSS_CORE_ADAPTER, false, false, false, false));
|
||||||
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_CORE_ADAPTER, false, false, false, false));
|
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_CORE_ADAPTER, false, false, false, false));
|
||||||
|
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_API_ADAPTER, false, false, false, false));
|
||||||
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_COMMON, false, false, false, false));
|
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_COMMON, false, false, false, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<name>Keycloak Client Adapter SPI Modules</name>
|
<name>Keycloak Client Adapter SPI Modules</name>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
+1
@@ -305,6 +305,7 @@ public class FilterSessionStore implements AdapterSessionStore {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Principal getUserPrincipal() {
|
public Principal getUserPrincipal() {
|
||||||
|
if (account == null) return null;
|
||||||
return account.getPrincipal();
|
return account.getPrincipal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
+2
-2
@@ -71,9 +71,9 @@ public class CatalinaUserSessionManagement implements SessionListener {
|
|||||||
|
|
||||||
protected void logoutSession(Session session) {
|
protected void logoutSession(Session session) {
|
||||||
try {
|
try {
|
||||||
session.expire();
|
if (session != null) session.expire();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.warn("Session not present or already invalidated.", e);
|
log.debug("Session not present or already invalidated.", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
+1
-1
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.9.0.CR1</version>
|
<version>1.9.2.Final</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
@@ -17,8 +17,6 @@
|
|||||||
|
|
||||||
package org.keycloak.common;
|
package org.keycloak.common;
|
||||||
|
|
||||||
import org.keycloak.common.util.Time;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
@@ -45,14 +43,10 @@ public class Version {
|
|||||||
Version.VERSION = props.getProperty("version");
|
Version.VERSION = props.getProperty("version");
|
||||||
Version.BUILD_TIME = props.getProperty("build-time");
|
Version.BUILD_TIME = props.getProperty("build-time");
|
||||||
Version.RESOURCES_VERSION = Version.VERSION.toLowerCase();
|
Version.RESOURCES_VERSION = Version.VERSION.toLowerCase();
|
||||||
if (Version.RESOURCES_VERSION.endsWith("-snapshot")) {
|
|
||||||
Version.RESOURCES_VERSION = Version.RESOURCES_VERSION.replace("-snapshot", "-" + Time.currentTime());
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Version.VERSION= Version.UNKNOWN;
|
Version.VERSION = Version.UNKNOWN;
|
||||||
Version.BUILD_TIME= Version.UNKNOWN;
|
Version.BUILD_TIME = Version.UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -17,6 +17,9 @@
|
|||||||
|
|
||||||
package org.keycloak.common.constants;
|
package org.keycloak.common.constants;
|
||||||
|
|
||||||
|
import org.ietf.jgss.GSSException;
|
||||||
|
import org.ietf.jgss.Oid;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||||
*/
|
*/
|
||||||
@@ -31,19 +34,33 @@ public class KerberosConstants {
|
|||||||
/**
|
/**
|
||||||
* OID of SPNEGO mechanism. See http://www.oid-info.com/get/1.3.6.1.5.5.2
|
* OID of SPNEGO mechanism. See http://www.oid-info.com/get/1.3.6.1.5.5.2
|
||||||
*/
|
*/
|
||||||
public static final String SPNEGO_OID = "1.3.6.1.5.5.2";
|
private static final String SPNEGO_OID_STR = "1.3.6.1.5.5.2";
|
||||||
|
public static final Oid SPNEGO_OID;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* OID of Kerberos v5 mechanism. See http://www.oid-info.com/get/1.2.840.113554.1.2.2
|
* OID of Kerberos v5 mechanism. See http://www.oid-info.com/get/1.2.840.113554.1.2.2
|
||||||
*/
|
*/
|
||||||
public static final String KRB5_OID = "1.2.840.113554.1.2.2";
|
private static final String KRB5_OID_STR = "1.2.840.113554.1.2.2";
|
||||||
|
public static final Oid KRB5_OID;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* OID of Kerberos v5 name. See http://www.oid-info.com/get/1.2.840.113554.1.2.2.1
|
* OID of Kerberos v5 name. See http://www.oid-info.com/get/1.2.840.113554.1.2.2.1
|
||||||
*/
|
*/
|
||||||
public static final String KRB5_NAME_OID = "1.2.840.113554.1.2.2.1";
|
private static final String KRB5_NAME_OID_STR = "1.2.840.113554.1.2.2.1";
|
||||||
|
public static final Oid KRB5_NAME_OID;
|
||||||
|
|
||||||
|
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
KRB5_OID = new Oid(KerberosConstants.KRB5_OID_STR);
|
||||||
|
KRB5_NAME_OID = new Oid(KerberosConstants.KRB5_NAME_OID_STR);
|
||||||
|
SPNEGO_OID = new Oid(KerberosConstants.SPNEGO_OID_STR);
|
||||||
|
} catch (GSSException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Loaded 100 of 1786 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user