Compare commits

..

17 Commits

Author SHA1 Message Date
haburger fd6690ec85 new configuration version 2025-09-10 13:20:23 +00:00
haburger ba48cbb253 new configuration version 2025-09-09 13:39:10 +00:00
haburger 9a98a657c2 new configuration version 2025-09-09 09:05:40 +00:00
haburger fae3a6e302 new configuration version 2025-09-08 16:07:42 +00:00
haburger d18a83bb2a new configuration version 2025-09-05 05:52:36 +00:00
haburger 1b8503773e new configuration version 2025-09-04 15:31:45 +00:00
haburger 3f615f856b new configuration version 2025-09-04 08:32:43 +00:00
haburger 8820fd4bb5 new configuration version 2025-09-03 17:05:38 +00:00
haburger 9d4a5fd184 new configuration version 2025-09-03 17:00:01 +00:00
haburger 3a2c98739c new configuration version 2025-09-03 16:39:46 +00:00
haburger 55d5df785c new configuration version 2025-09-03 16:30:51 +00:00
haburger 75bfa98470 new configuration version 2025-09-03 16:28:24 +00:00
haburger 7d10c7bdaf new configuration version 2025-09-03 16:21:44 +00:00
haburger a3fad2bd5f new configuration version 2025-09-03 12:12:04 +00:00
haburger 559214b638 new configuration version 2025-09-03 10:21:20 +00:00
haburger 93eed7e60c new configuration version 2025-09-03 07:02:18 +00:00
haburger fdd705eed5 new configuration version 2025-08-28 09:34:41 +00:00
13 changed files with 257 additions and 53 deletions

View File

@ -46,7 +46,7 @@ spec:
podDisruptionBudget:
maxUnavailable: "50%"
git:
tag: "r-9849dba282e5e9421988bf7092f242ff73d83ce5"
tag: "r-d6878093aefa2bfb8cc241b61fff5fe94bc95282"
dir: "DEFAULT-ADN-AGOV-PROJECT/DEFAULT-ADN-AGOV-INV/auth-sts"
credentials: "git-credentials"
keystores:

View File

@ -20,6 +20,8 @@ Configuration:
level: "DEBUG"
- name: "AgovCaptcha"
level: "DEBUG"
- name: "ArtifactResolutionService"
level: "DEBUG"
- name: "AuthEngine"
level: "INFO"
- name: "AuthPerf"
@ -27,9 +29,11 @@ Configuration:
- name: "IdmAuth"
level: "DEBUG"
- name: "OpTrace"
level: "DEBUG"
level: "INFO"
- name: "Recovery"
level: "DEBUG"
- name: "Saml"
level: "DEBUG"
- name: "Script"
level: "DEBUG"
- name: "SessCoord"

View File

@ -46,7 +46,7 @@ spec:
podDisruptionBudget:
maxUnavailable: "50%"
git:
tag: "r-9849dba282e5e9421988bf7092f242ff73d83ce5"
tag: "r-53c09bd6632aebeda2b892197a01a8f7f185561d"
dir: "DEFAULT-ADN-AGOV-PROJECT/DEFAULT-ADN-AGOV-INV/auth"
credentials: "git-credentials"
database:

View File

@ -0,0 +1,2 @@
#!/bin/bash
echo 'password'

View File

@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIFdzCCA1+gAwIBAgIUdL2pr5w+jKA9HF9llVbMRTK4MO8wDQYJKoZIhvcNAQEL
BQAwSzELMAkGA1UEBhMCQ0gxDTALBgNVBAcMBEJlcm4xEjAQBgNVBAoMCUFHT1Yg
V29yazEZMBcGA1UEAwwQYXRiLXdvcmstaWRwLWtleTAeFw0yNTA5MDMwNjQ2Mjha
Fw0zNTA5MDEwNjQ2MjhaMEsxCzAJBgNVBAYTAkNIMQ0wCwYDVQQHDARCZXJuMRIw
EAYDVQQKDAlBR09WIFdvcmsxGTAXBgNVBAMMEGF0Yi13b3JrLWlkcC1rZXkwggIi
MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2s6fPlpWv/1zEnail7TCUphEQ
A/dr/uY+qQqA/okB+Okd5hGDow7zBe/zICn7PJlGXzkq87o4Q3ZFvOFLqvlhwprp
OQquIviN6VBss2F3c174Zkk7ksciLQzPYjGBgw+l/ZeZY/AOYBeConsrHobTbjPd
StI8FZr8zVnamMWd/nBnryA5mZy9+vKz3iPJXPXZmyhBnOJfPZjMmkLvY9wEfGfc
rGrbqh6f7grleVNU16Rt46TtJRIqWEAdqi1I81d3kEWuqHkYCZf1ZJpDtprJPVko
fWViFzMz7zuAK5kdaGVwu0R7zeKz6FCHWWQ5bqScQbZ53zX6D3sP6ZNnZXdo6n0L
i+x17sgZa6VJtWF6s/UUxl8jPteprfRHrgIT3yKK9ewpXEhcc4aNJyCTiXpicOOn
QUBkkxyT7MtG1j51GPFcoFsBn4X9A1BXUmz2+YrDfFKtj0LwKZe6naI5v+FGtqeQ
/GeRpaFISwg/L5ewHe3NTH//8ZyWQsbJ2FEIff3LM+0+ivrORJs45GW12ny6MDY1
Q8PTEsPL/9nhY1Mf99qpB9ivouVF/vGDWont16PhaZ2N31Osbbok3Emfbk0MVfvh
MuY0PPX/eWfn+5WlxBegS9PXbrcNW7MV0vsow8Js9+B29nao/VeFOQDfrU9p//xu
nDkeh9z5vqRP7clgMQIDAQABo1MwUTAdBgNVHQ4EFgQUqqmWA9MTwbzRFOfxZbu8
nIyk4dEwHwYDVR0jBBgwFoAUqqmWA9MTwbzRFOfxZbu8nIyk4dEwDwYDVR0TAQH/
BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAnh1nayZy7CjTDvXjht0jNEyCPahL
/gzcfx173FWnDbG3DMqjKB0u7bbpWIdStvTHpvs4NOg7H1/3Xc3cu3vtw6PF3Tkt
ZGJrMgZ5H9BUPW7BeNPqylh0Xj9vWUhxOdRfthzHcuSg2H6k5GBe+ROVIWLcc5g2
vIuEEnpL9H5mlt4MofodPJjDrOvbJ5eDOGnNlcSKgPy8ZxrvyesmjFquu9/941p5
wOpGhfVRH6U9GBIy1wWjjO4y2oRtgdgV0Dm57VNaxNi4R0cRW+eg7H7jED2gWVdS
Zftkrq44/lXFnWZDXWq8JJs0QPPD30i8fbGvZjRbrVQus5wW+dlirSkljQD8WpiY
N7PS2y+Io9WDetabxDSkHQGduldlHqnjvvR7TtLBT73fbmrra7nLrxbwAyQs/lp9
r2904tzgBfhHb5GCrYE1s3h339eb/HXZlPqG1EcYimsAIyyBQ7WyHOgXq5RqwgbW
9O8aQUWPQrdtWrv8BkYSjjgDSxj9Pu7yBFnSdyI879uvBZDYovm/MmgcguAaJ8UC
PUcchbvgdLJHnbBA5aFm/Fkhb2WKi3Q0vExUHM3sXazJAAjIplbunHkqf8Wc7lva
94y3AXN9dg5LEjcwkjQbyGmmuSFq0Hse0b1KE+4INYUigECUcXuKYWrP0RuPzCKU
4g4p3ZpFGmoq4lM=
-----END CERTIFICATE-----

View File

@ -134,6 +134,11 @@
<!-- source: pattern://8dbec5bb024707d73fca93ef -->
<KeyObject name="https://trustbroker-idp.agov-w.azure.adnovum.net" certificate="/var/opt/keys/trust/idp-pem-atb/truststore.jks"/>
</KeyStore>
<!-- source: pattern://b09a3092a59797b317c06ae4 -->
<KeyStore name="EncryptionKeys">
<!-- source: pattern://b09a3092a59797b317c06ae4 -->
<KeyObject name="DefaultEncryptionKey" certificate="/var/opt/keys/trust/idp-pem-atb-enc/truststore.jks"/>
</KeyStore>
<!-- source: pattern://cb8c63274fe346280de0ffd5 -->
<KeyStore name="Auth_Realm_Mobile_FIDO_UAFKeyStore">
<!-- source: pattern://cb8c63274fe346280de0ffd5 -->
@ -426,6 +431,8 @@
<!-- source: pattern://73efd00d67082ff1eb927922 -->
<ResultCond name="main" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_AGOV_IDP"/>
<!-- source: pattern://73efd00d67082ff1eb927922 -->
<ResultCond name="main_secure" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_AGOV_IDP_SEC"/>
<!-- source: pattern://73efd00d67082ff1eb927922 -->
<Response value="AUTH_CONTINUE">
<!-- source: pattern://73efd00d67082ff1eb927922 -->
<Gui name="saml_dispatcher" label="title.saml.failed">
@ -853,6 +860,10 @@
<!-- source: pattern://92cb6d5256008a32f12ceb93 -->
<property name="logoutTrigger" value="#{request['currentResource'].contains('logout') || inargs.containsKey('logout') || inargs.containsKey('SAMLLogout')}"/>
<!-- source: pattern://92cb6d5256008a32f12ceb93 -->
<property name="in.verify" value="Assertion, AuthnRequest, ArtifactResolve, ArtifactResponse"/>
<!-- source: pattern://92cb6d5256008a32f12ceb93 -->
<property name="in.prospectVerification" value="ArtifactResolve"/>
<!-- source: pattern://92cb6d5256008a32f12ceb93 -->
<property name="out.binding" value="http-post"/>
<!-- source: pattern://92cb6d5256008a32f12ceb93 -->
<property name="out.post.relayStateEncoding" value="HTML"/>
@ -939,6 +950,19 @@
<!-- source: pattern://92cb6d5256008a32f12ceb93 -->
<property name="out.attribute.http://schemas.agov.ch/ws/2025/07/identity/claims/op/conversationId" value="${inctx:connection.HttpHeader.traceparent:^([0-9a-f]+)-([0-9a-f]+)-([0-9a-f]+)-([0-9a-f]+)$:$2}"/>
</AuthState>
<AuthState name="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_AGOV_IDP_SEC" class="ch.nevis.esauth.auth.states.standard.ConditionalDispatcherState" final="false" resumeState="false">
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="default" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_AGOV_IDP_SEC_post"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="useArtifact" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_AGOV_IDP_SEC_artifact"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<Response value="AUTH_ERROR">
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<Gui name="AuthErrorDialog"/>
</Response>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<property name="condition:useArtifact" value="${sess:agov.idp.use.artifact:^true$}"/>
</AuthState>
<AuthState name="Auth_Realm_Main_IDP_ReturnTimeoutButKeepSession" class="ch.nevis.esauth.auth.states.scripting.ScriptState" final="false" resumeState="true">
<!-- source: pattern://826166d230a6a4849f2837ae -->
<Response value="AUTH_CONTINUE">
@ -1194,6 +1218,100 @@
<Arg name="ch.nevis.isiweb4.response.status" value="403"/>
</Response>
</AuthState>
<AuthState name="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_AGOV_IDP_SEC_post" class="ch.nevis.esauth.auth.states.saml.IdentityProviderState" final="false" resumeState="true">
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="IDP-initiated-ConcurrentLogout" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_Concurrent_Logout"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="IDP-initiated-SingleLogout" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_Prepare_Done"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="LogoutCompleted" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_Logout_Done"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="LogoutFailed" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_Logout_Fail"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="SP-initiated-ConcurrentLogout" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_Concurrent_Logout"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="SP-initiated-SingleLogout" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_Prepare_Done"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="authenticate:IDP-initiated-SSO" next="Auth_Realm_Main_IDP_RequestedRoleLevel"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="authenticate:SP-initiated-SSO" next="Auth_Realm_Main_IDP_RequestedRoleLevel"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="invalidAssertionConsumerUrl" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_AGOV_IDP_SEC"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="ok" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_Prepare_Done"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="stepup:IDP-initiated-SSO" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_Selector"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="stepup:SP-initiated-SSO" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_Selector"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<Response value="AUTH_ERROR">
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<Gui name="saml_idp" label="title.saml.failed">
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<GuiElem name="lasterror" type="error" label="error.saml.failed"/>
</Gui>
</Response>
<propertyRef name="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_AGOV_IDP"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<property name="out.issuer" value="https://auth.agov-w.azure.adnovum.net/SAML2SEC/"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<property name="out.binding" value="http-post"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<property name="out.post.relayStateEncoding" value="HTML"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<property name="out.encrypt" value="none"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<property name="out.encrypt.keystoreref" value="EncryptionKeys"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<property name="out.encrypt.keyobjectref" value="DefaultEncryptionKey"/>
</AuthState>
<AuthState name="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_AGOV_IDP_SEC_artifact" class="ch.nevis.esauth.auth.states.saml.IdentityProviderState" final="false" resumeState="true">
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="IDP-initiated-ConcurrentLogout" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_Concurrent_Logout"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="IDP-initiated-SingleLogout" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_Prepare_Done"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="LogoutCompleted" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_Logout_Done"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="LogoutFailed" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_Logout_Fail"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="SP-initiated-ConcurrentLogout" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_Concurrent_Logout"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="SP-initiated-SingleLogout" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_Prepare_Done"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="authenticate:IDP-initiated-SSO" next="Auth_Realm_Main_IDP_RequestedRoleLevel"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="authenticate:SP-initiated-SSO" next="Auth_Realm_Main_IDP_RequestedRoleLevel"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="invalidAssertionConsumerUrl" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_AGOV_IDP_SEC"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="ok" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_Prepare_Done"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="stepup:IDP-initiated-SSO" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_Selector"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<ResultCond name="stepup:SP-initiated-SSO" next="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_Selector"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<Response value="AUTH_ERROR">
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<Gui name="saml_idp" label="title.saml.failed">
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<GuiElem name="lasterror" type="error" label="error.saml.failed"/>
</Gui>
</Response>
<propertyRef name="Auth_Realm_Main_IDP_Auth_Realm_Main_IDP_Custom_AGOV_IDP"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<property name="out.issuer" value="https://auth.agov-w.azure.adnovum.net/SAML2SEC/"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<property name="out.binding" value="http-artifact"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<property name="out.post.relayStateEncoding" value="HTML"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<property name="out.encrypt" value="none"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<property name="out.encrypt.keystoreref" value="EncryptionKeys"/>
<!-- source: pattern://bb9e7806a04578e0ad468829 -->
<property name="out.encrypt.keyobjectref" value="DefaultEncryptionKey"/>
</AuthState>
<AuthState name="Auth_Realm_Main_IDP_Fido_Email_Verify" class="ch.nevis.idm.authstate.IdmUserVerifyState" final="false" resumeState="false">
<!-- source: pattern://7fb39bfd6c34685866a22180 -->
<ResultCond name="clientNotFound" next="Auth_Realm_Main_IDP_AuthnFailed_Client_NotFound"/>
@ -3452,6 +3570,21 @@
<!-- source: pattern://ab5a82719993921822e95751 -->
<property name="out.keyobjectref" value="Signer_IDP_AGOV"/>
</WebService>
<!-- source: pattern://14efdcb489f3f295fcbdf811 -->
<WebService name="IDP_AGOV_SEC_ARS" class="ch.nevis.esauth.auth.adapter.saml.ArtifactResolutionService" uri="/nevisauth/services/ars/sec" SSODomain="Auth_Realm_Main_IDP">
<!-- source: pattern://14efdcb489f3f295fcbdf811 -->
<property name="issuer" value="https://auth.agov-w.azure.adnovum.net/SAML2SEC/"/>
<!-- source: pattern://14efdcb489f3f295fcbdf811 -->
<property name="out.keystoreref" value="Store_IDP_AGOV"/>
<!-- source: pattern://14efdcb489f3f295fcbdf811 -->
<property name="out.keyobjectref" value="Signer_IDP_AGOV"/>
<!-- source: pattern://14efdcb489f3f295fcbdf811 -->
<property name="in.keystoreref" value="Store_IDP_AGOV"/>
<!-- source: pattern://14efdcb489f3f295fcbdf811 -->
<property name="in.verify" value="ArtifactResolve"/>
<!-- source: pattern://14efdcb489f3f295fcbdf811 -->
<property name="in.prospectVerification" value=""/>
</WebService>
<!-- source: pattern://7022472ae407577ae604bbb8 -->
<RESTService name="ManagementService" class="ch.nevis.esauth.rest.service.session.ManagementService"/>
</esauth-server>

View File

@ -23,54 +23,72 @@ def redirect(String url) {
outargs.put('nevis.transfer.destination', url)
}
/**
* Extracts the content of the Issuer element from a parsed SAML message.
* The Issuer is optional according to SAML specification but we need it for dispatching.
*
* @param xml - as parsed by Groovy XmlSlurper
* @return text content of Issuer element converted or null
*/
String getIssuer(GPathResult xml) {
return xml.depthFirst().find { GPathResult node -> {
node.name().endsWith(":Issuer") || node.name().equalsIgnoreCase("Issuer")
}
}?.text()
}
String getIssuer(String value) {
if (value == null) {
String getNormalisedSamlMessage(String parameter) {
if (parameter == null) {
return
}
String text
byte[] decoded
def parser = new XmlSlurper()
// if value is raw xml then continue otherwise try to parse the base64 encoding
if (value.startsWith("<")) {
text = new String(value)
// if parameter is raw xml then continue otherwise try to parse the base64 encoding
if (parameter.startsWith("<")) {
text = new String(parameter)
}
else {
decoded = value.decodeBase64()
decoded = parameter.decodeBase64()
text = new String(decoded)
LOG.info("received SAML request $value")
}
return text
}
// after decoded, if redirect binding, we need to parse string to xml
if (text.startsWith("<")) {
LOG.debug("assuming POST/SOAP binding")
// plain String (POST/SOAP parameter)
def xml = parser.parseText(text)
return getIssuer(xml)
}
else {
LOG.debug("assuming redirect binding")
// should be deflate encoded (query parameter)
def is = new InflaterInputStream(new ByteArrayInputStream(decoded), new Inflater(true))
def xml = parser.parse(is)
return getIssuer(xml)
String getNodeText(GPathResult xml, String nodeName) {
return xml.depthFirst().find { GPathResult node -> {
node.name().endsWith(":${nodeName}") || node.name().equalsIgnoreCase(nodeName)
}
}?.text()?.trim()
}
def dispatchIssuer(i2s, String issuer) {
String getAttribute(GPathResult xml, String attributeName) {
return xml.depthFirst().find { GPathResult node -> {
node.attributes().containsKey(attributeName)
}
}?.attributes()?.get(attributeName)
}
String getNodeText(String parameter, String nodeName) {
String samlMessage = getNormalisedSamlMessage(parameter)
if (samlMessage == null) {
return
}
def parser = new XmlSlurper()
def xml = parser.parseText(samlMessage)
return getNodeText(xml, nodeName)
}
String getAttribute(String parameter, String attributeName) {
String samlMessage = getNormalisedSamlMessage(parameter)
if (samlMessage == null) {
return
}
def parser = new XmlSlurper()
def xml = parser.parseText(samlMessage)
return getAttribute(xml, attributeName)
}
String getIssuer(String value) {
return getNodeText(value, 'Issuer')
}
String getAttributeConsumingServiceIndex(String value) {
return getAttribute(value, 'AttributeConsumingServiceIndex')
}
String getProtocolBinding(String value) {
return getAttribute(value, 'ProtocolBinding')
}
def dispatchIssuer(i2s, String issuer, boolean secureMode) {
def result = i2s.get(issuer)
if (result == null) {
LOG.info("No SP found for issuer '$issuer'. Hint: check SAML SP Connector patterns.")
@ -80,22 +98,33 @@ def dispatchIssuer(i2s, String issuer) {
if(parameters.get('epdMode') == 'artifact' && result == 'epd'){
LOG.debug("EPD: Artifact mode")
result = result + "_artifact"
}else{
LOG.debug("EPD: POST mode")
} else if (result == 'main' && secureMode) {
LOG.debug("AGOV: Secure mode requested")
result = result + "_secure"
}
response.setResult(result)
session.put("saml.inbound.issuer", issuer)
session.put('saml.inbound.issuer', issuer)
session.put('saml.idp.result', result) // remember decision for sub-sequent requests without a SAML message
}
def dispatchIssuer(i2s, String issuer) {
dispatchIssuer(i2s, issuer, false)
}
def dispatchMessage(i2s, String message) {
def issuer = getIssuer(message)
def secureMode = (getAttributeConsumingServiceIndex(message) == '10101')
def useArtifact = ('urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact' == getProtocolBinding(message))
LOG.info("secureMode requested: ${secureMode}")
if (issuer == null) {
LOG.info("No issuer found in incoming SAML message. Giving up.")
}
session.put("saml.inbound.issuer", issuer)
dispatchIssuer(i2s, issuer)
session.put('saml.inbound.issuer', issuer)
session.put('agov.idp.use.artifact', '' + useArtifact)
dispatchIssuer(i2s, issuer, secureMode)
}
if (parameters.get('logoutConfirmation') == 'true' && "stepup" == request.getMethod()) {

View File

@ -20,6 +20,8 @@ Configuration:
level: "DEBUG"
- name: "AgovCaptcha"
level: "DEBUG"
- name: "ArtifactResolutionService"
level: "DEBUG"
- name: "AuthEngine"
level: "INFO"
- name: "AuthPerf"
@ -27,9 +29,11 @@ Configuration:
- name: "IdmAuth"
level: "DEBUG"
- name: "OpTrace"
level: "DEBUG"
level: "INFO"
- name: "Recovery"
level: "DEBUG"
- name: "Saml"
level: "DEBUG"
- name: "Script"
level: "DEBUG"
- name: "SessCoord"

View File

@ -47,7 +47,7 @@ spec:
podDisruptionBudget:
maxUnavailable: "50%"
git:
tag: "r-e89a903628d5717380e12490c3c41f93df97174b"
tag: "r-0574c5a2098562d6585435194234bdb2b0cf0858"
dir: "DEFAULT-ADN-AGOV-PROJECT/DEFAULT-ADN-AGOV-INV/proxy-idp"
credentials: "git-credentials"
database:

View File

@ -3,15 +3,15 @@ BC.Tracer.LogFile=pipe:///bin/sed -u -e "s/^/[navajo.log] /g" | /bin/egrep --lin
# source: pattern://2be125abf4a8be1a0ae5f007
BC.Tracer.ThresholdBase=3
# source: pattern://2be125abf4a8be1a0ae5f007
BC.Tracer.DebugProfile.IW4LuaFlt=4
BC.Tracer.DebugProfile.IW4LuaFlt=3
# source: pattern://2be125abf4a8be1a0ae5f007
BC.Tracer.DebugProfile.IsiwebOp=3
# source: pattern://2be125abf4a8be1a0ae5f007
BC.Tracer.DebugProfile.NPMySQLSes=3
# source: pattern://2be125abf4a8be1a0ae5f007
BC.Tracer.DebugProfile.NProxyOp=4
BC.Tracer.DebugProfile.NProxyOp=3
# source: pattern://2be125abf4a8be1a0ae5f007
BC.Tracer.DebugProfile.NavajoOp=3
BC.Tracer.DebugProfile.NavajoOp=4
# source: pattern://0ceb05c56644a59d648c13b9
ch.nevis.nevisproxy.LocalLogFileName=/var/opt/nevisproxy/default/conf/conditionallog.properties
# source: pattern://0ceb05c56644a59d648c13b9

View File

@ -1054,7 +1054,7 @@
<filter-mapping>
<filter-name>DefaultErrorFilter</filter-name>
<url-pattern>/*</url-pattern>
<exclude-url-regex>^/oidc4vp/.*$|^/resource/utility/.*$</exclude-url-regex>
<exclude-url-regex>^/auth/fidouaf$|^/auth/fidouaf/authenticationresponse/.*$|^/nevisfido/devices/credentials/.*$|^/nevisfido/devices/oobOperations/.*$|^/nevisfido/status$|^/nevisfido/token/dispatch/registration$|^/nevisfido/token/dispatch/targets/.*$|^/nevisfido/token/redeem/authentication$|^/nevisfido/token/redeem/registration$|^/nevisfido/uaf/1.1/authentication$|^/nevisfido/uaf/1.1/authentication/.*$|^/nevisfido/uaf/1.1/facets$|^/nevisfido/uaf/1.1/registration/.*$|^/nevisfido/uaf/1.1/request/deregistration/.*$|^/oidc4vp/.*$|^/resource/utility/.*$</exclude-url-regex>
</filter-mapping>
<!-- source: pattern://ecf4381f4653b0aa9a69b417, pattern://ecf4381f4653b0aa9a69b417#filters -->
<filter-mapping>