Skip to content

Commit d1b30ab

Browse files
4.8.35 access denied (#683)
* KB-0000 Access Denied changes * KB-0000 Access Denied changes * KB-0000 Access Denied changes * KB-0000 Access Denied changes * KB-0000 Access Denied changes * KB-0000 Access Denied changes
1 parent 48a5a38 commit d1b30ab

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

src/utils/custom-keycloak.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const composable = require('composable-middleware')
1212

1313
export class CustomKeycloak {
1414
private multiTenantKeycloak = new Map<string, keycloakConnect>()
15+
private readonly accessDeniedGuardCookie = 'kc_access_denied_guard'
1516

1617
constructor(sessionConfig: expressSession.SessionOptions) {
1718
if (CONSTANTS.MULTI_TENANT_KEYCLOAK) {
@@ -215,12 +216,16 @@ export class CustomKeycloak {
215216
keycloakAny.accessDenied = (req: express.Request, res: express.Response) => {
216217
logError('CustomKeycloak: accessDenied invoked, clearing auth session and cookie')
217218
this.clearAuthSession(req, res)
218-
if (req.query && req.query.kc_retry === '1') {
219+
const hasGuardCookie = Boolean(req.cookies && req.cookies[this.accessDeniedGuardCookie])
220+
if (hasGuardCookie) {
219221
logError('CustomKeycloak: repeated accessDenied detected, stopping redirect loop')
222+
res.clearCookie(this.accessDeniedGuardCookie, { path: '/' })
220223
res.status(403)
221224
res.end('Access denied')
222225
return
223226
}
227+
// One retry only: set a short-lived guard cookie and redirect once.
228+
res.cookie(this.accessDeniedGuardCookie, '1', { httpOnly: true, maxAge: 10000, path: '/' })
224229
const retryPath = '/protected/v8/resource'
225230
res.redirect(retryPath)
226231
}

0 commit comments

Comments
 (0)