BookStack/tests
Luke T. Shumaker c76d12d1de Oidc: Properly query the UserInfo Endpoint
BooksStack's OIDC Client requests the 'profile' and 'email' scope values
in order to have access to the 'name', 'email', and other claims.  It
looks for these claims in the ID Token that is returned along with the
Access Token.

However, the OIDC-core specification section 5.4 [1] only requires that
the Provider include those claims in the ID Token *if* an Access Token is
not also issued.  If an Access Token is issued, the Provider can leave out
those claims from the ID Token, and the Client is supposed to obtain them
by submitting the Access Token to the UserInfo Endpoint.

So I suppose it's just good luck that the OIDC Providers that BookStack
has been tested with just so happen to also stick those claims in the ID
Token even though they don't have to.  But others (in particular:
https://login.infomaniak.com) don't do so, and require fetching the
UserInfo Endpoint.)

A workaround is currently possible by having the user write a theme with a
ThemeEvents::OIDC_ID_TOKEN_PRE_VALIDATE hook that fetches the UserInfo
Endpoint.  This workaround isn't great, for a few reasons:
 1. Asking the user to implement core parts of the OIDC protocol is silly.
 2. The user either needs to re-fetch the .well-known/openid-configuration
    file to discover the endpoint (adding yet another round-trip to each
    login) or hard-code the endpoint, which is fragile.
 3. The hook doesn't receive the HTTP client configuration.

So, have BookStack's OidcService fetch the UserInfo Endpoint and inject
those claims into the ID Token, if a UserInfo Endpoint is defined.
Two points about this:
 - Injecting them into the ID Token's claims is the most obvious approach
   given the current code structure; though I'm not sure it is the best
   approach, perhaps it should instead fetch the user info in
   processAuthorizationResponse() and pass that as an argument to
   processAccessTokenCallback() which would then need a bit of
   restructuring.  But this made sense because it's also how the
   ThemeEvents::OIDC_ID_TOKEN_PRE_VALIDATE hook works.
 - OIDC *requires* that a UserInfo Endpoint exists, so why bother with
   that "if a UserInfo Endpoint is defined" bit?  Simply out of an
   abundance of caution that there's an existing BookStack user that is
   relying on it not fetching the UserInfo Endpoint in order to work with
   a non-compliant OIDC Provider.

[1]: https://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims
2023-12-15 14:11:48 -07:00
..
Actions My Account: Updated and started adding to tests 2023-10-19 14:18:42 +01:00
Activity URL Handling: Removed referrer-based redirect handling 2023-12-10 12:37:21 +00:00
Api Users API: Fixed sending invite when using form requests 2023-12-13 15:13:54 +00:00
Auth Oidc: Properly query the UserInfo Endpoint 2023-12-15 14:11:48 -07:00
Commands Search: Added further backslash handling 2023-09-23 13:41:10 +01:00
Entity Default templates: Fixed syntax for php8.0, added test 2023-12-12 15:59:12 +00:00
Helpers Default templates: Added tests to cover functionality 2023-12-12 15:04:40 +00:00
Permissions My Account: Covered profile and auth pages with tests 2023-10-19 16:06:59 +01:00
References Played around with a new app structure 2023-05-17 17:56:55 +01:00
Settings Notifications: Reorgranised classes into domain specific folders 2023-09-11 19:27:36 +01:00
test-data Added detection and thumbnail bypass for apng images 2022-01-04 13:10:35 +00:00
Unit Includes: Added back support for parse theme event 2023-11-27 21:39:43 +00:00
Uploads My Account: Updated and started adding to tests 2023-10-19 14:18:42 +01:00
User URL Handling: Removed referrer-based redirect handling 2023-12-10 12:37:21 +00:00
CreatesApplication.php Apply fixes from StyleCI 2021-06-26 15:23:15 +00:00
DebugViewTest.php Tests: Fixed debug test to work with social class changes 2023-12-06 16:57:15 +00:00
ErrorTest.php Uploads: Added user-facing message for Laravel post limit handling 2023-09-25 13:48:23 +01:00
FavouriteTest.php URL Handling: Removed referrer-based redirect handling 2023-12-10 12:37:21 +00:00
HelpTest.php Updated tests to use ssddanbrown/asserthtml package 2022-07-23 15:10:18 +01:00
HomepageTest.php Homepage: Added tags button to non-default home views 2023-09-24 09:31:44 +01:00
LanguageTest.php Locales: More use of locale objects, Addressed failing tests 2023-09-17 16:20:21 +01:00
OpenGraphTest.php Extracted test file handling to its own class 2023-02-08 14:39:13 +00:00
PublicActionTest.php Guest control: Cleaned methods involved in fetching/handling 2023-09-16 13:18:35 +01:00
PwaManifestTest.php PWA: Prevent passing credentials to avoid redirection issues 2023-11-07 14:33:37 +00:00
SecurityHeaderTest.php Middlware: Prevented caching of all app requests 2023-10-23 13:32:15 +01:00
StatusTest.php Added testing for webhook management interface 2021-12-10 14:54:58 +00:00
TestCase.php Guest control: Cleaned methods involved in fetching/handling 2023-09-16 13:18:35 +01:00
ThemeTest.php Merge branch 'v23-10' into development 2023-12-03 18:57:07 +00:00
UrlTest.php Quick run through of applying new test entity helper class 2022-09-29 22:11:16 +01:00