Making DataConnector failure non-fatal

Ian Bobbitt ibobbitt at globalnoc.iu.edu
Tue Feb 12 11:20:07 EST 2019


I have an HTTP DataConnector that fetches password expiration dates to run users through the ExpiringPassword interrupt.
This isn't enforcing any security policy, just giving users an additional warning.

Is there a way I can make failures on that DataConnector non-fatal, or provide a default if there's a failure? If the
webservice is unavailable, I get an error in the logs. The user is able to complete authentication, but the resulting
assertion contains no attributes.

2019-02-12 16:10:51,736 - ERROR [net.shibboleth.idp.profile.impl.ResolveAttributes:314] - Profile Action
ResolveAttributes: Error resolving attributes
net.shibboleth.idp.attribute.resolver.ResolutionException: Data Connector 'passwordExpiration': HTTP request failed
        at
net.shibboleth.idp.attribute.resolver.dc.http.impl.HTTPDataConnector.retrieveAttributes(HTTPDataConnector.java:109)
Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to apihost:443 [apihost/192.0.2.1] failed: connect
timed out
        at
org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:151)
Caused by: java.net.SocketTimeoutException: connect timed out
        at java.net.PlainSocketImpl.socketConnect(Native Method)

    <DataConnector id="passwordExpiration" xsi:type="HTTP"
                   httpClientRef="passwordExpirationHttpClient"
                   httpClientSecurityParametersRef="passwordExpirationHttpSecurity">
        <URLTemplate>
            <![CDATA[
                https://apihost/passwordExpiration.cgi?username=$paramEscaper.escape($resolutionContext.principal)
            ]]>
        </URLTemplate>
        <ResponseMapping>
            <ScriptFile>%{idp.home}/conf/passwordExpiration.js</ScriptFile>
        </ResponseMapping>
        <ResultCache expireAfterWrite="PT5S"/>
    </DataConnector>
    <AttributeDefinition xsi:type="Simple" id="passwordExpiration">
        <InputDataConnector ref="passwordExpiration" attributeNames="DCpasswordExpiration" />
        <AttributeEncoder xsi:type="SAML2String" name="https://idp.example.edu/idp/passwordExpiration"
friendlyName="passwordExpiration" encodeType="false" />
    </AttributeDefinition>


var HashSet = Java.type("java.util.HashSet");
var HttpClientSupport = Java.type("net.shibboleth.utilities.java.support.httpclient.HttpClientSupport");
var IdPAttribute = Java.type("net.shibboleth.idp.attribute.IdPAttribute");
var StringAttributeValue = Java.type("net.shibboleth.idp.attribute.StringAttributeValue");

var body = HttpClientSupport.toString(response.getEntity(), "UTF-8", 65536);
var result = JSON.parse(body);
//log.info(body);
//log.info(result);
var attr = new IdPAttribute("DCpasswordExpiration");
var values = new HashSet();
if (result.total == 1) {
    if (result.results[0].password_expiration_date != null) {
        d = new Date(result.results[0].password_expiration_date * 1000);
        val = new StringAttributeValue(d.toISOString()); // "2018-10-25T13:00:06.000Z"
        values.add(val);
    }
}
attr.setValues(values);
connectorResults.add(attr);

-- Ian

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4090 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://shibboleth.net/pipermail/users/attachments/20190212/a17b829b/attachment.p7s>


More information about the users mailing list