Skip to content

Commit 4e9a72d

Browse files
authored
Only add NameIdPolicy if NameIdFormat is set (#2)
1 parent 8380e0f commit 4e9a72d

File tree

2 files changed

+50
-3
lines changed

2 files changed

+50
-3
lines changed

Diff for: build_request.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,11 @@ func (sp *SAMLServiceProvider) buildAuthnRequest(includeSig bool) (*etree.Docume
4141
authnRequest.CreateElement("saml:Issuer").SetText(sp.IdentityProviderIssuer)
4242
}
4343

44-
nameIdPolicy := authnRequest.CreateElement("samlp:NameIDPolicy")
45-
nameIdPolicy.CreateAttr("AllowCreate", "true")
46-
nameIdPolicy.CreateAttr("Format", sp.NameIdFormat)
44+
if sp.NameIdFormat != "" {
45+
nameIdPolicy := authnRequest.CreateElement("samlp:NameIDPolicy")
46+
nameIdPolicy.CreateAttr("AllowCreate", "true")
47+
nameIdPolicy.CreateAttr("Format", sp.NameIdFormat)
48+
}
4749

4850
if sp.RequestedAuthnContext != nil {
4951
requestedAuthnContext := authnRequest.CreateElement("samlp:RequestedAuthnContext")

Diff for: build_request_test.go

+45
Original file line numberDiff line numberDiff line change
@@ -175,3 +175,48 @@ func TestScopingIDProviderOmitted(t *testing.T) {
175175
require.Nil(t, el)
176176
}
177177
}
178+
179+
func TestScopingNameIDPolicyIncluded(t *testing.T) {
180+
spURL := "https://sp.test"
181+
sp := SAMLServiceProvider{
182+
AssertionConsumerServiceURL: spURL,
183+
AudienceURI: spURL,
184+
IdentityProviderIssuer: spURL,
185+
IdentityProviderSSOURL: "https://idp.test/saml/sso",
186+
SignAuthnRequests: false,
187+
NameIdFormat: NameIdFormatPersistent,
188+
}
189+
190+
request, err := sp.BuildAuthRequest()
191+
require.NoError(t, err)
192+
193+
doc := etree.NewDocument()
194+
err = doc.ReadFromString(request)
195+
require.NoError(t, err)
196+
197+
idpEntry := doc.FindElement("./AuthnRequest/NameIDPolicy")
198+
199+
require.Equal(t, idpEntry.SelectAttrValue("Format", ""), NameIdFormatPersistent)
200+
}
201+
202+
func TestScopingNameIDPolicyOmitted(t *testing.T) {
203+
spURL := "https://sp.test"
204+
205+
sp := SAMLServiceProvider{
206+
AssertionConsumerServiceURL: spURL,
207+
AudienceURI: spURL,
208+
IdentityProviderIssuer: spURL,
209+
IdentityProviderSSOURL: "https://idp.test/saml/sso",
210+
SignAuthnRequests: false,
211+
}
212+
213+
request, err := sp.BuildAuthRequest()
214+
require.NoError(t, err)
215+
216+
doc := etree.NewDocument()
217+
err = doc.ReadFromString(request)
218+
require.NoError(t, err)
219+
220+
el := doc.FindElement("./AuthnRequest/NameIDPolicy")
221+
require.Nil(t, el)
222+
}

0 commit comments

Comments
 (0)