<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I haven't looked recently, but the InCommon certificate service app (run by Comodo) used the following methodology:</div>
<div style="font-family: Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<ol>
<li>Send an authnRequest with no authnContextClassRef (or was it PasswordProtectedTransport?)</li><li>After successful auth, lookup the user to see if MFA is required for this user<br>
</li><li>If MFA is required for that user, send another authnRequest with the authnContextClassRef set to
<a href="https://refeds.org/profile/mfa">https://refeds.org/profile/mfa</a><br>
</li></ol>
</div>
<div>
<div id="appendonsend"></div>
<div style="font-family:Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
This allows the application to decide if MFA is required, and it uses SSO to avoid prompting the user for their password twice.</div>
<div style="font-family:Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Andy<br>
</div>
<div style="font-family:Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" face="Calibri, sans-serif" color="#000000"><b>From:</b> users <users-bounces@shibboleth.net> on behalf of Guillaume Rousse <guillaume.rousse@renater.fr><br>
<b>Sent:</b> Tuesday, August 27, 2019 3:43 AM<br>
<b>To:</b> users@shibboleth.net <users@shibboleth.net><br>
<b>Subject:</b> Multiple authentication levels for a single application</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt">
<div class="PlainText">Hello list.<br>
<br>
I'm currently experimenting with strong authentication requirements. <br>
It's quite easy when a given application requires the same <br>
authentication method for all its users, by having a <br>
<samlp:RequestedAuthnContext> element inserted in the SAML request by <br>
the SP, and letting the IdP compute which authentication flow matches <br>
the request.<br>
<br>
However, it seems a little more complex to have different requirements <br>
for different user classes in a single application. Such a scenario <br>
would for instance mandate MFA authentication for admins, while <br>
password-based authentication would be enough for normal users. Whereas <br>
I'm confortable with the access control implementation in the <br>
application itself, I don't see how the let the user choose which <br>
authentication method to use.<br>
<br>
Either I need a way for the SP to issue two different kind of login <br>
requests, each using a different content in <br>
<samlp:RequestedAuthnContext> element, so as to have a single IdP select <br>
the correct authentication flow accordingly. I guess using different <br>
session initiators handlers, at different URLS, would be enough, but <br>
then I'll need different authentication links/buttons in the application <br>
( "login as user", and "login as admin").<br>
<br>
Either I use two different IdPs, each implementing only one <br>
authentication flow (password for one, MFA for the other), and I use a <br>
discovery service for the user to select which one to use. In this case, <br>
each IdP will always reply with the relevant authentication result, <br>
whatever the content of the <samlp:RequestedAuthnContext> element, <br>
meaning simplified SP configuration.<br>
<br>
I can also imagine using a single IdP, with MFA flow, and a conditional <br>
flow selection to automatically short-circuit the second factor <br>
authentication for users not needing it, but then I'll need a way to <br>
share the list of admins between the application and the IdP itself to <br>
avoid duplication and incoherences.<br>
<br>
Advices and suggestions welcome here.<br>
<br>
Regards.<br>
-- <br>
Guillaume Rousse<br>
Pôle SSI<br>
<br>
Tel: +33 1 53 94 20 45<br>
<a href="http://www.renater.fr">www.renater.fr</a><br>
<br>
</div>
</span></font></div>
</div>
</body>
</html>