Fix: SAML SP metadata endpoint generates incorrect XML with IDP EntityID #2313
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Issue
The SAML Service Provider metadata endpoint (/auth/v1/sso/saml/metadata) was generating incorrect XML that used the Identity Provider's EntityID as the base URL for all Service Provider service endpoints, instead of using the Supabase project's own URLs.
Expected:
Actual (before fix): Impact: Identity Providers correctly rejected the metadata as it claimed the SP was hosted at the IDP's domain, completely blocking SAML SSO integration.Related Issue: #41716
Root Cause
The samlsp.DefaultServiceProvider() function (from crewjam/saml v0.4.14) was incorrectly initializing the ServiceProvider's MetadataURL, AcsURL, and SloURL fields, causing them to use incorrect base URLs during metadata generation.
Solution
Explicitly override the ServiceProvider's URL fields after creation to ensure they use the correct Supabase project base URL:
MetadataURL → {base}/sso/saml/metadata
AcsURL → {base}/sso/saml/acs
SloURL → {base}/sso/saml/slo
Changes
File:
internal/api/saml.go
Added URL override logic in
getSAMLServiceProvider()
function (lines 54-72) to manually set the correct URLs after samlsp.DefaultServiceProvider() initialization.