Bug 34163: Handle both anonymous userenv when generating CSRF tokens
authorDavid Cook <dcook@prosentient.com.au>
Fri, 30 Jun 2023 02:50:17 +0000 (02:50 +0000)
committerTomas Cohen Arazi <tomascohen@theke.io>
Tue, 12 Sep 2023 12:45:01 +0000 (09:45 -0300)
commitf965db69f1b1aaa0afaf7a3a48723f7e87c5b32c
tree29ff5e5bcc1bbae5d6b0d266fdf759b66e7ebe54
parent60d6d79b2232893ec84488bf17aa32adde8c01be
Bug 34163: Handle both anonymous userenv when generating CSRF tokens

An anonymous session might have a userenv which is undef or which is
a hashref of undef/empty values.

This patch generates the "anonymous" prefix for undef/empty 'id'
values, which prevents CSRF errors when logging in via OAuth2/OIDC
following a Koha logout.

Test plan:
Before applying patch:
1. Go to https://wiki.koha-community.org/wiki/Testing_SSO
2. Set up OpenID Connect realm, user, client, and Koha
integration to Keycloak for koha-testing-docker as noted in the wiki

3. Go to http://localhost:8080/cgi-bin/koha/opac-main.pl?logout.x=1
4. Click on OIDC "Log in with XXXX" button and log into IDP
5. Note that you're not logged in and you instead see an error message like:
"There was an error authenticating to external identity provider wrong_csrf_token"

6. Apply patch
7. Go to "Sessions" section of the test realm in Keycloak
e.g. http://sso:8082/auth/admin/master/console/#/test/sessions
8. Click "Action" on the far right side of the screen
9. Choose "Sign out all active sessions"

After applying patch:
10. koha-plack --restart kohadev
11. Go to http://localhost:8080/cgi-bin/koha/opac-main.pl?logout.x=1
12. Click on OIDC "Log in with XXXX" button and log into IDP
13. Note that you're logged in

14. prove t/Token.t
15. Note all tests pass

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Koha/Token.pm
t/Token.t