https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=43375

            Bug ID: 43375
           Summary: OAuth userinfo_url silently fails to parse JSON when
                    Content-Type has extra parameters (e.g. Microsoft
                    Graph)
   Initiative type: ---
        Sponsorship ---
            status:
           Product: Koha
           Version: Main
          Hardware: All
                OS: All
            Status: NEW
          Severity: major
          Priority: P5 - low
         Component: Authentication
          Assignee: [email protected]
          Reporter: [email protected]
        QA Contact: [email protected]
                CC: [email protected]
  Target Milestone: ---

When configuring an OAuth Identity Provider whose userinfo_url points to an
endpoint that returns a Content-Type header with parameters other than charset
(for example, Microsoft Graph API's /v1.0/me, which returns Content-Type:
application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8),
Koha::Auth::Client::OAuth::_get_data_and_patron fails to parse the response as
JSON and silently falls back to treating the body as URL-encoded form data,
resulting in all mapped fields being undef â even though the HTTP request
succeeded (200) and the body is valid JSON.

Root cause: the content-type check at Koha/Auth/Client/OAuth.pm line 86 is a
strict regex that only accepts application/json or text/javascript optionally
followed by a single ;charset=... parameter:

  $tx->res->headers->content_type =~
m!^(application/json|text/javascript)(;\s*charset=\S+)?$!

Any additional parameter (common in OData-based APIs like Microsoft Graph)
causes this regex to fail, silently routing the response through
Mojo::Parameters->new($body)->to_hash instead of $tx->res->json. No error or
warning is logged â from the admin's perspective, the identity provider
config looks correct, the external IdP call succeeds, but login fails
downstream with a generic 'No configuration found for your email domain' or
'External auth user cannot access resource' error.

Steps to reproduce:
1. Configure an OAuth Identity Provider with userinfo_url pointing to
https://graph.microsoft.com/v1.0/me (with an appropriate User.Read scope and a
valid Azure AD/Entra ID app).
2. Map any field (e.g. userid -> onPremisesSamAccountName).
3. Attempt to log in via this provider.
4. Observe the login fails to find/match a patron, despite the Graph API call
itself succeeding with correct data.

Suggested fix:
Relax the content-type check to accept any parameters after the media type, not
just charset:

  $tx->res->headers->content_type =~
m!^(application/json|text/javascript)(;|$)!

Test plan:
1. Apply the patch.
2. Run: prove t/db_dependent/Koha/Auth/Client/OAuth.t
   => SUCCESS (new subtest covering extra content-type parameters passes)
3. Configure an OAuth provider with Microsoft Graph userinfo_url.
4. Verify login works when the response includes extra Content-Type parameters.
   => SUCCESS

-- 
You are receiving this mail because:
You are watching all bug changes.
You are the assignee for the bug.
_______________________________________________
Koha-bugs mailing list -- [email protected]
To unsubscribe send an email to [email protected]
website : http://www.koha-community.org/
git : http://git.koha-community.org/
bugs : http://bugs.koha-community.org/

Reply via email to