diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php index d8484dcf..d5c390ec 100644 --- a/app/Http/Middleware/EncryptCookies.php +++ b/app/Http/Middleware/EncryptCookies.php @@ -1,5 +1,6 @@ principal_service->clear(); - Cookie::queue('rps', null, $minutes = -2628000, $path = '/', $domain = null, $secure = false, $httpOnly = false); + Cookie::queue(IAuthService::LOGGED_RELAYING_PARTIES_COOKIE_NAME, null, $minutes = -2628000, $path = '/', $domain = null, $secure = false, $httpOnly = false); } /** @@ -309,23 +310,28 @@ final class AuthService implements IAuthService */ public function registerRPLogin($client_id) { - $rps = Cookie::get('rps'); - $zlib = CompressionAlgorithms_Registry::getInstance()->get(CompressionAlgorithmsNames::ZLib); - if(!empty($rps)) - { - $rps = $this->decrypt($rps); - $rps = $zlib->uncompress($rps); - $rps .= '|'; + try { + $rps = Cookie::get(IAuthService::LOGGED_RELAYING_PARTIES_COOKIE_NAME); + $zlib = CompressionAlgorithms_Registry::getInstance()->get(CompressionAlgorithmsNames::ZLib); + + if (!empty($rps)) { + $rps = $this->decrypt($rps); + $rps = $zlib->uncompress($rps); + $rps .= '|'; + } + + if (!str_contains($rps, $client_id)) + $rps .= $client_id; + + $rps = $zlib->compress($rps); + $rps = $this->encrypt($rps); } - - if(!str_contains($rps, $client_id)) - $rps .= $client_id; - - $rps = $zlib->compress($rps); - $rps = $this->encrypt($rps); - - Cookie::queue('rps', $rps, $minutes = 2628000, $path = '/', $domain = null, $secure = false, $httpOnly = false); + catch(Exception $ex){ + Log::warning($ex); + $rps = ""; + } + Cookie::queue(IAuthService::LOGGED_RELAYING_PARTIES_COOKIE_NAME, $rps, $minutes = config("session.op_browser_state_lifetime"), $path = '/', $domain = null, $secure = false, $httpOnly = false); } /** @@ -333,7 +339,7 @@ final class AuthService implements IAuthService */ public function getLoggedRPs() { - $rps = Cookie::get('rps'); + $rps = Cookie::get(IAuthService::LOGGED_RELAYING_PARTIES_COOKIE_NAME); $zlib = CompressionAlgorithms_Registry::getInstance()->get(CompressionAlgorithmsNames::ZLib); if(!empty($rps)) diff --git a/app/libs/OAuth2/Services/IPrincipalService.php b/app/libs/OAuth2/Services/IPrincipalService.php index 0ebeb4f2..3b6d696e 100644 --- a/app/libs/OAuth2/Services/IPrincipalService.php +++ b/app/libs/OAuth2/Services/IPrincipalService.php @@ -44,4 +44,5 @@ interface IPrincipalService */ public function clear(); + const OP_BROWSER_STATE_COOKIE_NAME = 'op_bs'; } \ No newline at end of file diff --git a/app/libs/Utils/Services/IAuthService.php b/app/libs/Utils/Services/IAuthService.php index e05ea6a9..58d32a30 100644 --- a/app/libs/Utils/Services/IAuthService.php +++ b/app/libs/Utils/Services/IAuthService.php @@ -125,4 +125,6 @@ interface IAuthService */ public function reloadSession($jti); + const LOGGED_RELAYING_PARTIES_COOKIE_NAME = 'rps'; + } \ No newline at end of file diff --git a/config/session.php b/config/session.php index 94603fe7..316cf051 100644 --- a/config/session.php +++ b/config/session.php @@ -162,5 +162,9 @@ return [ */ 'http_only' => env('SESSION_COOKIE_HTTP_ONLY', true), - + /* + * http://openid.net/specs/openid-connect-session-1_0.html#OPiframe + * OP Browser state lifetime + */ + 'op_browser_state_lifetime' => env('SESSION_OP_BROWSER_STATE_LIFETIME', 120) ]; diff --git a/public/assets/js/oauth2/session/check.session.js b/public/assets/js/oauth2/session/check.session.js index 87667b3b..d7a15f45 100644 --- a/public/assets/js/oauth2/session/check.session.js +++ b/public/assets/js/oauth2/session/check.session.js @@ -67,7 +67,7 @@ return "error"; } - var opbs = $.cookie('opbs'); + var opbs = $.cookie('op_bs'); var expectedHash = computeSessionStateHash(clientId, origin, opbs, salt); return clientHash === expectedHash ? "unchanged" : "changed"; }