mirror of
https://github.com/BookStackApp/BookStack.git
synced 2026-02-05 16:49:47 +03:00
OpenID with Azure AD is returning invalid_request #3877
Closed
opened 2026-02-05 07:44:58 +03:00 by OVERLORD
·
11 comments
No Branch/Tag Specified
development
l10n_development
further_theme_development
release
llm_only
vectors
v25-11
docker_env
drawio_rendering
user_permissions
ldap_host_failover
svg_image
prosemirror
captcha_example
fix/video-export
v25.12.3
v25.12.2
v25.12.1
v25.12
v25.11.6
v25.11.5
v25.11.4
v24.11.4
v25.11.3
v25.11.2
v25.11.1
v25.11
v25.07.3
v25.07.2
v25.07.1
v25.07
v25.05.2
v25.05.1
v25.05
v25.02.5
v25.02.4
v25.02.3
v25.02.2
v25.02.1
v25.02
v24.12.1
v24.12
v24.10.3
v24.10.2
v24.10.1
v24.10
v24.05.4
v24.05.3
v24.05.2
v24.05.1
v24.05
v24.02.3
v24.02.2
v24.02.1
v24.02
v23.12.3
v23.12.2
v23.12.1
v23.12
v23.10.4
v23.10.3
v23.10.2
v23.10.1
v23.10
v23.08.3
v23.08.2
v23.08.1
v23.08
v23.06.2
v23.06.1
v23.06
v23.05.2
v23.05.1
v23.05
v23.02.3
v23.02.2
v23.02.1
v23.02
v23.01.1
v23.01
v22.11.1
v22.11
v22.10.2
v22.10.1
v22.10
v22.09.1
v22.09
v22.07.3
v22.07.2
v22.07.1
v22.07
v22.06.2
v22.06.1
v22.06
v22.04.2
v22.04.1
v22.04
v22.03.1
v22.03
v22.02.3
v22.02.2
v22.02.1
v22.02
v21.12.5
v21.12.4
v21.12.3
v21.12.2
v21.12.1
v21.12
v21.11.3
v21.11.2
v21.11.1
v21.11
v21.10.3
v21.10.2
v21.10.1
v21.10
v21.08.6
v21.08.5
v21.08.4
v21.08.3
v21.08.2
v21.08.1
v21.08
v21.05.4
v21.05.3
v21.05.2
v21.05.1
v21.05
v21.04.6
v21.04.5
v21.04.4
v21.04.3
v21.04.2
v21.04.1
v21.04
v0.31.8
v0.31.7
v0.31.6
v0.31.5
v0.31.4
v0.31.3
v0.31.2
v0.31.1
v0.31.0
v0.30.7
v0.30.6
v0.30.5
v0.30.4
v0.30.3
v0.30.2
v0.30.1
v0.30.0
v0.29.3
v0.29.2
v0.29.1
v0.29.0
v0.28.3
v0.28.2
v0.28.1
v0.28.0
v0.27.5
v0.27.4
v0.27.3
v0.27.2
v0.27.1
v0.27
v0.26.4
v0.26.3
v0.26.2
v0.26.1
v0.26.0
v0.25.5
v0.25.4
v0.25.3
v0.25.2
v0.25.1
v0.25.0
v0.24.3
v0.24.2
v0.24.1
v0.24.0
v0.23.2
v0.23.1
v0.23.0
v0.22.0
v0.21.0
v0.20.3
v0.20.2
v0.20.1
v0.20.0
v0.19.0
v0.18.5
v0.18.4
v0.18.3
v0.18.2
v0.18.1
v0.18.0
v0.17.4
v0.17.3
v0.17.2
v0.17.1
v0.17.0
v0.16.3
v0.16.2
v0.16.1
v0.16.0
v0.15.3
v0.15.2
v0.15.1
v0.15.0
v0.14.3
v0.14.2
v0.14.1
v0.14.0
v0.13.1
v0.13.0
v0.12.2
v0.12.1
v0.12.0
v0.11.2
v0.11.1
v0.11.0
v0.10.0
v0.9.3
v0.9.2
v0.9.1
v0.9.0
v0.8.2
v0.8.1
v0.8.0
v0.7.6
v0.7.5
v0.7.4
v0.7.3
0.7.2
v.0.7.1
v0.7.0
v0.6.3
v0.6.2
v0.6.1
v0.6.0
v0.5.0
Labels
Clear labels
🎨 Design
📖 Docs Update
🐛 Bug
🐛 Bug
:cat2:🐈 Possible duplicate
💿 Database
☕ Open to discussion
💻 Front-End
🐕 Support
🚪 Authentication
🌍 Translations
🔌 API Task
🏭 Back-End
⛲ Upstream
🔨 Feature Request
🛠️ Enhancement
🛠️ Enhancement
🛠️ Enhancement
❤️ Happy feedback
🔒 Security
🔍 Pending Validation
💆 UX
📝 WYSIWYG Editor
🌔 Out of scope
🔩 API Request
:octocat: Admin/Meta
🖌️ View Customization
❓ Question
🚀 Priority
🛡️ Blocked
🚚 Export System
♿ A11y
🔧 Maintenance
> Markdown Editor
pull-request
Mirrored from GitHub Pull Request
No Label
🐕 Support
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/BookStack#3877
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @ccy1ju on GitHub (Jun 22, 2023).
Attempted Debugging
Searched GitHub Issues
Describe the Scenario
I am setting up BookStack in docker containers, and I want to have the SSO with Azure AD trough OpenID, so far this is the docker compose file:
But when I try to connect I am getting this error
production.ERROR: invalid_request {"exception":"[object] (League\OAuth2\Client\Provider\Exception\IdentityProviderException(code: 400): invalid_request at /app/www/app/Auth/Access/Oidc/OidcOAuthProvider.php:104)
With no further information.
The tenant, client and secret are correct, only the secret and the issuer are in quotes, and I tried without quotes as well, and encoding. I know I have connectivity to Azure AD because I could set the Azure AD as a third party login, but I don't want the users to be able to register themselves, instead I would give them access directly in Azure AD.
I've been the whole day here and I have no clue.
Does anyone know why this is happening?
Thanks in advance.
Exact BookStack Version
v23.05.2
Log Content
production.ERROR: invalid_request {"exception":"[object] (League\OAuth2\Client\Provider\Exception\IdentityProviderException(code: 400): invalid_request at /app/www/app/Auth/Access/Oidc/OidcOAuthProvider.php:104)
PHP Version
8.2.7
Hosting Environment
RHEL 8 server, but inside docker containers.
@ssddanbrown commented on GitHub (Jun 22, 2023):
Nothing obvious to me based on the provided config.
invalid_requestis an azure AD error, so I'd imagine the request is reaching AzureAD, unless being throw off by coincidence.Using my video here, can you ensure you've gone down the exact same path as I do in that video? Maybe create a new AzureAD app, following the video, just to be sure so there's no chance of variance on that side of things.
@ccy1ju commented on GitHub (Jun 22, 2023):
Hi Dan,
Sadly I am behind a corporate network and takes like 2 weeks to have a new app registration approved.
Is there any way I can see the request that BookStack is sending?
I cannot see it in Azure due to privileges, again, corporate network
@ssddanbrown commented on GitHub (Jun 22, 2023):
Within the
vendor/league/oauth2-client/src/Provider/AbstractProvider.phpfile you could insert:After line 635 (Before the line
if (false === is_array($response)) {), which would dump both the request and full response, hopefully in a way that shows full details.The
redirect_uriis most common thing to be wrong, but could also be the client_id/secret, especially in AzureAD where there's a lot of variation in displayed ids and different options for secrets.@ccy1ju commented on GitHub (Jul 4, 2023):
Hi @ssddanbrown ,
I finally got my new app registration and I followed every step from the video and I had no luck :c
I managed to get some logs about the error and I found that is this one:
"error":"invalid_request","error_description":"AADSTS900144: The request body must contain the following parameter: 'client_id'.
When is getting the token from the token endpoint, it is not placing the option "client_id" in the request body, the request is "redirect_uri=https%3A%2F%2Fexample.com%2Foidc%2Fcallback&grant_type=authorization_code&code=0.ASEAGR7lCsg....", and that's it, no more params.
I know that the client_id is valid because the authorization endpoint is being reached and getting the code, but something happens when it gets to the token endpoint, but I cannot find why is not placing it in the request body
This is the response to the dd($request)
@ssddanbrown commented on GitHub (Jul 4, 2023):
The data to the token endpoint call is not expected to include a
client_idat all, so that's fine.The
client_idis used in the authorization step, which is the first step, long before the token request.It's strange that you'd get that particular
client_iderror since it's clear you're going beyond that step in the authentication.Are you sure that error message is current and relevant to whatever error you're currently getting?
If you are still getting the originally reported error, then dumping the response as per my last comment would be helpful to maybe get more detail in regard to what's going wrong.
@ccy1ju commented on GitHub (Jul 4, 2023):
Yes, I modified the AbstractProvider with this
So every time the request fails I am seeing that error
@ssddanbrown commented on GitHub (Jul 4, 2023):
@ccy1ju Okay, I've spent a couple of hours on this, and have been able to emulate this error manually based upon guesses/theory about what's going on.
When calling the token endpoint, BookStack authorises the request via client credentials (id and secret) passed as a header using basic auth. OAuth providers support this authorization (
client_secret_basic) as standard but there's also the option of using the client id/secret in the body (client_secret_post).I was able to emulate this by force removing the expected header used for
client_secret_basic, in which case Azure appears to assumeclient_secret_postis in use and therefore complains about the missingclient_idin the request.In your environment, I'd guess this is arising due to one of the following:
Authorization(Or more specifically basic auth) headers from requests.client_secret_basicsupport on specific accounts for some reason.For looking into (2), can you go to the URL:
Then confirm the values under the
token_endpoint_auth_methods_supportedproperty.@ccy1ju commented on GitHub (Jul 4, 2023):
@ssddanbrown ,

The supported methods are these
But maybe it is the proxy, because indeed I am running all this behind a corporate proxy
Is there a way I can change the basic auth to post?
@ssddanbrown commented on GitHub (Jul 5, 2023):
That's not an option we provide.
It's something hardcoded here:
295cd01605/app/Access/Oidc/OidcService.php (L115)You could change
HttpBasicAuthOptionProviderto\League\OAuth2\Client\OptionProvider\PostAuthOptionProviderbut I have not tested that.I'd probably not look to make the auth method configurable either, since the existing basic auth is the more significant/spec-required option of the two, and I don't want to grow our options based upon external arbitrary corporate environment rules.
@ccy1ju commented on GitHub (Jul 5, 2023):
@ssddanbrown Thank you very much!!
Changing the HttpBasicAuthOptionProvider() for PostAuthOptionProvider() worked like a charm!!
@ssddanbrown commented on GitHub (Jul 10, 2023):
Good to hear you got something working! Just keep in mind that code edits may interfer upon updates.
Since the cause was likely found, and there are likely external influences here causing the issue, I'll go ahead and close this off.