Introduction
Second Factor Only authentication allows a SP to authenticate only the second factor of a user. With SFO you can add two factor authentication to your institutions application gateway (e.g. Citrix Netscaler or F5 BIG-IP) or to the authentication or authorization gateway (e.g. Microsoft ADFS or Novell/NetIQ). SFO has its own authentication endpoint at SURFsecureID.
Once a user is registered with a second factor both SFO authentication and SURFsecureID can be used.
Differences between 'standard' SURFsecureID and SFO authentication
Feature | Standard authentication | SFO authenticaton |
---|---|---|
Authentication of first factor | Always | Never |
Authentication of second factor | Based on policy between IdP and SP | Always |
User registration | Using SURFsecureID selfservice registration and vetting by an RA | |
Standard SURFconext features | Attributes, Authorization, persistent identifiers | None |
With SFO the authentication via SURFconext is bypassed (see image below). This means that SURFconext functionality (e.g. attributes from the user's home IdP, the definition of authorization rules and persistent user identifiers) is not available.
Note that also with SFO the registration of users will be done by the institutions (IdP's): there is no work to be done for the SP.
SAML AuthRequest
To start a SFO the SP must send a SAML 2.0 AuthnRequest
to the SFO endpoint of the SURFsecureID Gateway. This request must:
- use the
urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect
binding - be signed using the
http://www.w3.org/2001/04/xmldsig-more#rsa-sha256
algorithm (XML signatures cannot be used). - include a
RequestedAuthnContext
with anAuthnContextClassRef
with one of the defined levels. - include the SURFconext identifier of the user in the
Subject
element as aNameID
(withFormat="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified",
see description ofAuthnRequest
in https://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf, line 2001).
SFO uses different SingleSignOn Location and AuthnConext
identifiers as compared with standard authentication.
The signature is not visible in the XML: it will be encoded in HTTP GET parameters according to the specification of the HTTP-Redirect
binding.
Determining the SURFconext identifier of a user
The SURFconext identifier is built from identifiers that the IdP of the user sends to SURFconext during authentication:
urn:collab:person:{{urn:mace:terena.org:attribute-def:schacHomeOrganization}}:{{urn:mace:dir:attribute-def:uid}}
where:
urn:collab:person:
= fixed prefix.{{urn:mace:terena.org:attribute-def:schacHomeOrganization}}
= value of schacHomeOrganisation attribute of the user; same for all users and will be something like "institution.nl
".{{urn:mace:dir:attribute-def:uid}}
= value ofuid
attribute of the user.
For the value of last two items: ask the administrator of the IdP .
Example: urn:collab:person:some-organisation.example.org:m1234567890
SAML Response
The result of a successful authentication is a SAML Response
. It does not contain an AttributeStatement
.
Error handling
When a user cannot be authenticated, the SURFsecureID gateway sends a SAML Response to the SP with a non success status:
urn:oasis:names:tc:SAML:2.0:status:Responder
with subcodeurn:oasis:names:tc:SAML:2.0:status:AuthnFailed =
Authentication not successfulurn:oasis:names:tc:SAML:2.0:status:Responder
with subcodeurn:oasis:names:tc:SAML:2.0:status:NoAuthnContext =
The user could not be authenticated at the requested level
Level: authentication strength
See explanation at "Levels of Assurance".
Implementation
SFO must be implemented at the SP. The authentication protocol is similar to the one used by the SURFsecureID gateway. The main difference is that the SP must send the identifier of the user in the Subject element of the SAML AuthnRequest (see description of AuthnRequest, line 2017).
- The SP will be registered at the SURFsecureID gateway as either SFO SP or a 'standard' SURFsecureID SP: this determines which endpoint he can access. If a SP implementation needs both, he can register an additional EnityID and use it to access the other endpoint.
- There is a white-list of SURFconext identities allowing SFO authentication. The SP must indicate in advance the institutions from which he wants to authenticate users with SFO.
You can find the metadata of the SFO endpoints on SURFsecureID Metadata for Service Providers.
Always do a first factor authentication before starting a SFO authentication
Starting an SFO authentication will immediately start an authentication at the SURFsecureID gateway: a push notification (tqr) or an SMS will be sent to the user being authenticated. If authentication is started for the wrong user, this will derange the targeted user and in case of SMS, incur a cost to the institution and possibly for the user.
By observing the behavior of the SFO authentication it is possible to determine whether a username exists.
For this reasons we advise to perform a first factor authentication before starting a SFO authentication.
Example
An example code for using SFO with SimpleSAMLphp can be found at: https://github.com/SURFnet/Stepup-SFO-demo