mirror of
https://github.com/BookStackApp/BookStack.git
synced 2026-02-05 16:49:47 +03:00
Nextcloud as Identity Provider via the OIDC app, possible redirect problem? #5014
Closed
opened 2026-02-05 09:33:44 +03:00 by OVERLORD
·
8 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#5014
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 @MarioOsswald on GitHub (Oct 19, 2024).
Attempted Debugging
Searched GitHub Issues
Describe the Scenario
I tried yesterday the available NextCloud OIDC App from https://github.com/H2CK/oidc
The Purpose of this app is to use NC as the identity provider. I came close to get this working, but could not solve an issue with the Issuer definition, in particular, I guess, it's a rewrite problem or something related to it.
The details are:
I specified in BS .env file
OIDC_ISSUER=https://mynextclouddomain.tld
When I try a browser request with "https://mynextclouddomain.tld/.well-known/openid-configuration", the NC nginx redirects correctly to "https://mynextclouddomain.tld/index.php/.well-known/openid-configuration" and displays all the desired details, among them at first line 'issuer: "https://mynextclouddomain.tld/"'.
The problem is that BS doesn't get the results from the redirected URL. Instead, I receive an error
"OIDC Discovery Error: Error discovering provider settings from issuer at URL https://mynextclouddomain.tld/.well-known/openid-configuration". The request from BS is not redirected the way the browser request was.
My approach was to change the .env variable to
OIDC_ISSUER=https://mynextclouddomain.tld/index.php
This solves the discovery problem, but then leads to an error message like
"OIDC Discovery Error: Unexpected issuer value found on discovery response". There is then an obvious mismatch, since on BS's side the issuer variable includes the index.php (OIDC_ISSUER=https://mynextclouddomain.tld/index.php), while the discovery response delivers only 'issuer: "https://mynextclouddomain.tld/"'.
A "curl https://mynextclouddomain.tld/.well-known/openid-configuration" delivers (with <>)
html
head title 301 Moved Permanently /title /head
body
center h1 301 Moved Permanently /h1 /center
hr center nginx /center
/body
/html
while a "curl -L https://mynextclouddomain.tld/.well-known/openid-configuration" or "curl https://mynextclouddomain.tld/index.php/.well-known/openid-configuration" delivers the desired results.
I'm not experienced enough with NC or nginx redirect / rewrite features. Since the browser redirects correctly (without any required change from my side), I thought that's enough. I tried a few configurations, with no success. But probably someone more experienced has an immediate idea what to do, so that BS receives the auto discovery results from the correct redirected URL.
Exact BookStack Version
24.10
Log Content
No response
Hosting Environment
PHP8.3 on Ubuntu 24.04 LTS on VPS, official BS installation script used
@ssddanbrown commented on GitHub (Oct 19, 2024):
Hi @MarioOsswald,
For OIDC we stick pretty strongly to the spec, which does not mention allowing redirects for autodiscovery.
You could either somehow look to prevent the redirect to include
index.php(Which seems odd to me for a well-configured mature app like NextCloud but I'm not familiar with the app at all) or potentially you could work around this via some level of proxy at the webserver level (to handlehttps://mynextclouddomain.tld/.well-known/openid-configurationand provide a response forhttps://mynextclouddomain.tld/index.php/.well-known/openid-configuration).@MarioOsswald commented on GitHub (Oct 19, 2024):
Hi @ssddanbrown,
thanks for your fast reply (on a Saturday...), much appreciated!
I don't know where the redirect to include index.php comes from or how to prevent that, but I'll go through the nginx.conf again. To have a special proxy configuratoin for just this purpose would not be my first choice in our otherwise stable running system. But I'll have a look at it.
Could it be an option on your side to introduce two related variables in .env instead of one, for example:
OIDC_DISCOVERY_URL=https://mynextclouddomain.tld/index.php
OIDC_ISSUER=https://mynextclouddomain.tld/
This would, as far as I can say, solve the problem immediately. The discovery would work and the issuer would have no conflict...
@ssddanbrown commented on GitHub (Oct 19, 2024):
I wouldn't be keen to add/maintain extra options on our side to essentially work around environment-specific issues that go against the spec. I'd rather keep strongly to the spec, otherwise the scope of what we support gets stretched to all kinds of scenarios/use-cases.
@MarioOsswald commented on GitHub (Oct 19, 2024):
Very understandable, but it would probably open up a useful integration, since NextCloud became very popular and BS functionality / wiki is not included...
I'm not very familiar with the NextCloud security design, but it appears to be intentional to handle external services this way.
location ^~ /.well-known {
location = /.well-known/carddav { return 301 /remote.php/dav/; }
location = /.well-known/caldav { return 301 /remote.php/dav/; }
location /.well-known/acme-challenge { try_files $uri $uri/ =404; }
location /.well-known/pki-validation { try_files $uri $uri/ =404; }
return 301 /index.php$request_uri;
}
I don't get the oidc auto discovery results without the inclusion of index.php. I'll have a look at the nginx proxy features, maybe it is not the overkill as I expect. I also have the issue posted in the NextCloud oidc app git forum, maybe they have an idea over there...
@MarioOsswald commented on GitHub (Oct 21, 2024):
The NC OIDC app developer advised that Nextcloud it is not able to provide this endpoint without a configured redirect in the NC web server. But he suggested to set OIDC_ISSUER_DISCOVER=false and then to enter the correct details manually.
I did, but I fail to provide the key file (OIDC_PUBLIC_KEY=file:///keys/idp-public-key.pem) in the correct way.
I copied the key from my NC provider (plain text there) and created a folder "keys" on my BS server under /var/www/bookstack, created a file named idp-public-key.pem in that folder and pasted the content of my NC public idp key.
Nevertheless, when trying in BS, it displays the following error:
"ID token validation failed with error: Failed to read signing key with error: Failed to load key from file path with error: file_get_contents(file:///keys/idp-public-key.pem): Failed to open stream: No such file or directory".
Unfortunately, I don't know where exactly BS searches for the file...
@ssddanbrown commented on GitHub (Oct 21, 2024):
Probably easiest to keep it as an absolute path, so:
@MarioOsswald commented on GitHub (Oct 21, 2024):
Problem solved, have NC working as ID provider for BS.
Thanks a lot for your amazing support!
@ssddanbrown commented on GitHub (Oct 21, 2024):
Glad to hear things are now working! Will therefore close this off.