Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wiki-js
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
wiki-js
Commits
491d63ce
Unverified
Commit
491d63ce
authored
Aug 10, 2023
by
Jason Minard
Committed by
GitHub
Aug 10, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix(auth): keycloak authentication post logout redirect for Keycloak 18+ (#5878)
parent
3855d2c8
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
21 additions
and
4 deletions
+21
-4
users.js
server/models/users.js
+1
-1
authentication.js
server/modules/authentication/keycloak/authentication.js
+15
-3
definition.yml
server/modules/authentication/keycloak/definition.yml
+5
-0
No files found.
server/models/users.js
View file @
491d63ce
...
...
@@ -866,7 +866,7 @@ module.exports = class User extends Model {
}
const
usr
=
await
WIKI
.
models
.
users
.
query
().
findById
(
context
.
req
.
user
.
id
).
select
(
'providerKey'
)
const
provider
=
_
.
find
(
WIKI
.
auth
.
strategies
,
[
'key'
,
usr
.
providerKey
])
return
provider
.
logout
?
provider
.
logout
(
provider
.
config
)
:
'/'
return
provider
.
logout
?
provider
.
logout
(
provider
.
config
,
context
)
:
'/'
}
static
async
getGuestUser
()
{
...
...
server/modules/authentication/keycloak/authentication.js
View file @
491d63ce
...
...
@@ -21,7 +21,7 @@ module.exports = {
clientSecret
:
conf
.
clientSecret
,
callbackURL
:
conf
.
callbackURL
,
passReqToCallback
:
true
},
async
(
req
,
accessToken
,
refreshToken
,
profile
,
cb
)
=>
{
},
async
(
req
,
accessToken
,
refreshToken
,
results
,
profile
,
cb
)
=>
{
let
displayName
=
profile
.
username
if
(
_
.
isString
(
profile
.
fullName
)
&&
profile
.
fullName
.
length
>
0
)
{
displayName
=
profile
.
fullName
...
...
@@ -36,6 +36,7 @@ module.exports = {
picture
:
''
}
})
req
.
session
.
keycloak_id_token
=
results
.
id_token
cb
(
null
,
user
)
}
catch
(
err
)
{
cb
(
err
,
null
)
...
...
@@ -43,11 +44,22 @@ module.exports = {
})
)
},
logout
(
conf
)
{
logout
(
conf
,
context
)
{
if
(
!
conf
.
logoutUpstream
)
{
return
'/'
}
else
if
(
conf
.
logoutURL
&&
conf
.
logoutURL
.
length
>
5
)
{
return
`
${
conf
.
logoutURL
}
?redirect_uri=
${
encodeURIComponent
(
WIKI
.
config
.
host
)}
`
const
idToken
=
context
.
req
.
session
.
keycloak_id_token
const
redirURL
=
encodeURIComponent
(
WIKI
.
config
.
host
)
if
(
conf
.
logoutUpstreamRedirectLegacy
)
{
// keycloak < 18
return
`
${
conf
.
logoutURL
}
?redirect_uri=
${
redirURL
}
`
}
else
if
(
idToken
)
{
// keycloak 18+
return
`
${
conf
.
logoutURL
}
?post_logout_redirect_uri=
${
redirURL
}
&id_token_hint=
${
idToken
}
`
}
else
{
// fall back to no redirect if keycloak_id_token isn't available
return
conf
.
logoutURL
}
}
else
{
WIKI
.
logger
.
warn
(
'Keycloak logout URL is not configured!'
)
return
'/'
...
...
server/modules/authentication/keycloak/definition.yml
View file @
491d63ce
...
...
@@ -57,4 +57,9 @@ props:
title
:
Logout Endpoint URL
hint
:
e.g. https://KEYCLOAK-HOST/auth/realms/YOUR-REALM/protocol/openid-connect/logout
order
:
9
logoutUpstreamRedirectLegacy
:
type
:
Boolean
title
:
Legacy Logout Redirect
hint
:
Pass the legacy 'redirect_uri' parameter to the logout endpoint. Leave disabled for Keycloak 18 and above.
order
:
10
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment