shibboleth.Conditions.Scripted and User-Agent http header ?

Jarno Huuskonen jarno.huuskonen at uef.fi
Mon Mar 28 05:34:26 UTC 2022


Hi,

On Fri, 2022-03-25 at 15:45 +0000, Cantor, Scott via users wrote:
> I used a Spring Expression for this, but there are equivalent ways to do
> it with a script. My SameSite condition is
> 
>     <bean id="osu.SameSiteExpression" class="java.util.regex.Pattern"
> factory-method="compile"
>         c:_0="(Firefox)|(Chrom(e|ium)/[1234789])" />
> 
>     <bean id="osu.SameSiteCondition"
> class="net.shibboleth.ext.spring.util.SpringExpressionPredicate"
>         c:expression="#custom.matcher(#input.getHeader('User-Agent') ?:
> '').find() and !(#input.getHeader('User-Agent') ?:
> '').contains('UCBrowser')"
>         p:customObject-ref="osu.SameSiteExpression" />
> 
> As I thought, the input here is the servlet request, nothing fancier.

Thanks,

I (think) I got it working with shibboleth.Conditions.Scripted:
    <bean id="UEF.SameSiteCondition" parent="shibboleth.Conditions.Scripted"
factory-method="resourceScript"
        p:returnOnError="true" p:hideExceptions="true"
        c:_0="javascript" c:_1="%{idp.home}/conf/samesite.js" />

and
samesite.js:
-----------------8<------------
// https://catchjs.com/Blog/SameSiteCookies
//
https://devblogs.microsoft.com/dotnet/upcoming-samesite-cookie-changes-in-asp-net-and-asp-net-core/
// https://gist.github.com/skoranda/d4c9a132c50e82db341c433a75e616df
function isOlderUcBrowser(ua) {
        var match = ua.match(/UCBrowser\/(\d+)\.(\d+)\.(\d+)\./);
        if (!match) return false;
        var major = parseInt(match[1]);
        var minor = parseInt(match[2]);
        var build = parseInt(match[3]);
        if (major != 12) return major < 12;
        if (minor != 13) return minor < 13;
        return build < 2;
}

var activate = true;
var logger =
Java.type("org.slf4j.LoggerFactory").getLogger("UEF.sameSiteCondition");
try {
        if (input != null) {
                var UA = input.getHeader("User-Agent");
                if (UA != null) {
                        logger.debug('SameSite condition UA: ' + UA);
                        if (UA.contains("iPhone OS 12_") ||
UA.contains("iPad; CPU OS 12_") ||
                                UA.contains("Chrome/5") ||
UA.contains("Chrome/6") ||
                                UA.contains("Chromium/5") ||
UA.contains("Chromium/6") ||
                                (UA.contains(" OS X 10_14") &&
                                ((UA.contains("Version/") &&
UA.contains("Safari")) ||
                                        UA.endsWith("(KHTML, like
Gecko)"))))
                        {
                                activate = false;
                        }
                        else {
                                // UC Browser < 12.13.2
                                if (UA.contains("UCBrowser/")) {
                                        activate = !isOlderUcBrowser(UA);
                                }
                        }
                }
        }
}
catch (e) {
        logger.debug('SameSite condition error: ' + e);
}
logger.debug('SameSite condition verdict: ' + activate);
activate;

-- 
Jarno Huuskonen



More information about the users mailing list