Skip to content

Commit 30d3380

Browse files
committed
Merge branch 'hotfix/22.1.2'
2 parents d5d4f09 + ad763d6 commit 30d3380

4 files changed

Lines changed: 44 additions & 3 deletions

File tree

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
We follow the CalVer (https://calver.org/) versioning scheme: YY.MINOR.MICRO.
44

5+
22.1.2 (11-21-2022)
6+
===================
7+
8+
* Add an extra check for username and its shib attribute during SSO
9+
510
22.1.1 (11-11-2022)
611
===================
712

etc/cas/config/instn-authn-prod.xsl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@
239239
<xsl:when test="$idp='https://login.iit.edu/cas/idp'">
240240
<id>iit</id>
241241
<user>
242-
<username><xsl:value-of select="//attribute[@name='email']/@value"/></username>
242+
<username><xsl:value-of select="//attribute[@name='mailother']/@value"/></username>
243243
<familyName><xsl:value-of select="//attribute[@name='sn']/@value"/></familyName>
244244
<givenName><xsl:value-of select="//attribute[@name='givenname']/@value"/></givenName>
245245
<fullname><xsl:value-of select="//attribute[@name='displayname']/@value"/></fullname>
@@ -397,7 +397,7 @@
397397
<xsl:when test="$idp='https://www.rediris.es/sir/csicidp'">
398398
<id>csic</id>
399399
<user>
400-
<username><xsl:value-of select="//attribute[@name='irismailmainaddress']/@value"/></username>
400+
<username><xsl:value-of select="//attribute[@name='mailother']/@value"/></username>
401401
<fullname><xsl:value-of select="//attribute[@name='displayname']/@value"/></fullname>
402402
<familyName/>
403403
<givenName/>
@@ -653,7 +653,7 @@
653653
<xsl:when test="$idp='https://shibboleth.usc.edu/shibboleth-idp'">
654654
<id>usc</id>
655655
<user>
656-
<username><xsl:value-of select="//attribute[@name='uscemailprimaryaddress']/@value"/></username>
656+
<username><xsl:value-of select="//attribute[@name='mailother']/@value"/></username>
657657
<fullname><xsl:value-of select="//attribute[@name='uscdisplaygivenname']/@value"/><xsl:text> </xsl:text><xsl:value-of select="//attribute[@name='uscdisplaysn']/@value"/></fullname>
658658
<familyName><xsl:value-of select="//attribute[@name='uscdisplaysn']/@value"/></familyName>
659659
<givenName><xsl:value-of select="//attribute[@name='uscdisplaygivenname']/@value"/></givenName>

src/main/java/io/cos/cas/osf/web/flow/login/OsfPrincipalFromNonInteractiveCredentialsAction.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,22 @@ protected Credential constructCredentialsFromRequest(final RequestContext contex
249249
final OsfPostgresCredential osfPostgresCredential = constructCredentialsFromShibbolethAuthentication(context, request);
250250

251251
final OsfApiInstitutionAuthenticationResult remoteUserInfo = notifyOsfApiOfInstnAuthnSuccess(osfPostgresCredential);
252+
final String ssoEppn = osfPostgresCredential.getDelegationAttributes().get("eppn");
253+
final String ssoMail = osfPostgresCredential.getDelegationAttributes().get("mail");
254+
final String ssoMailOther = osfPostgresCredential.getDelegationAttributes().get("mailother");
255+
if (!remoteUserInfo.verifyOsfUsername(ssoEppn, ssoMail, ssoMailOther)) {
256+
LOGGER.error(
257+
"[SAML Shibboleth] Critical Error: eppn={}, mail={}, mailOther={}, entityId={}, username={}, institutionId={}",
258+
ssoEppn,
259+
ssoMail,
260+
ssoMailOther,
261+
osfPostgresCredential.getDelegationAttributes().get("shib-session-id"),
262+
remoteUserInfo.getUsername(),
263+
remoteUserInfo.getInstitutionId()
264+
);
265+
throw new InstitutionSsoFailedException("Critical SAML-Shibboleth SSO Failure");
266+
}
267+
252268
osfPostgresCredential.setUsername(remoteUserInfo.getUsername());
253269
osfPostgresCredential.setInstitutionId(remoteUserInfo.getInstitutionId());
254270
if (StringUtils.isBlank(osfPostgresCredential.getInstitutionalIdentity())) {

src/main/java/io/cos/cas/osf/web/support/OsfApiInstitutionAuthenticationResult.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
import lombok.NoArgsConstructor;
66
import lombok.Setter;
77
import lombok.ToString;
8+
import lombok.extern.slf4j.Slf4j;
9+
10+
import org.apache.commons.lang.StringUtils;
811

912
import java.io.Serializable;
1013

@@ -19,11 +22,28 @@
1922
@NoArgsConstructor
2023
@ToString
2124
@Setter
25+
@Slf4j
2226
public class OsfApiInstitutionAuthenticationResult implements Serializable {
2327

2428
private static final long serialVersionUID = 3971349776123204760L;
2529

2630
private String username;
2731

2832
private String institutionId;
33+
34+
/**
35+
* Verify that the username comes from one of the three attributes in Shibboleth SSO headers.
36+
*
37+
* @param ssoEppn eppn
38+
* @param ssoMail mail
39+
* @param ssoMailOther customized attribute for email
40+
* @return true if username equals to any of the three else false
41+
*/
42+
public Boolean verifyOsfUsername(final String ssoEppn, final String ssoMail, final String ssoMailOther) {
43+
if (StringUtils.isBlank(username)) {
44+
LOGGER.error("[CAS XSLT] Username={} is blank", username);
45+
return false;
46+
}
47+
return username.equalsIgnoreCase(ssoEppn) || username.equalsIgnoreCase(ssoMail) || username.equalsIgnoreCase(ssoMailOther);
48+
}
2949
}

0 commit comments

Comments
 (0)