Skip to content
Snippets Groups Projects
Commit d4b2bc3f authored by Daniel Gerhardt's avatar Daniel Gerhardt
Browse files

Allow SAML attribute used for loginId to be configured

parent bd580232
Branches
No related merge requests found
...@@ -297,6 +297,7 @@ public class AuthenticationProviderProperties { ...@@ -297,6 +297,7 @@ public class AuthenticationProviderProperties {
private Idp idp; private Idp idp;
private Sp sp; private Sp sp;
private Keystore keystore; private Keystore keystore;
private String userIdAttribute;
private int assertionConsumerServiceIndex; private int assertionConsumerServiceIndex;
private int maxAuthenticationLifetime; private int maxAuthenticationLifetime;
...@@ -334,6 +335,14 @@ public class AuthenticationProviderProperties { ...@@ -334,6 +335,14 @@ public class AuthenticationProviderProperties {
this.keystore = keystore; this.keystore = keystore;
} }
public String getUserIdAttribute() {
return userIdAttribute;
}
public void setUserIdAttribute(final String userIdAttribute) {
this.userIdAttribute = userIdAttribute;
}
public int getAssertionConsumerServiceIndex() { public int getAssertionConsumerServiceIndex() {
return assertionConsumerServiceIndex; return assertionConsumerServiceIndex;
} }
......
...@@ -20,6 +20,7 @@ package de.thm.arsnova.security.pac4j; ...@@ -20,6 +20,7 @@ package de.thm.arsnova.security.pac4j;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import org.pac4j.oauth.profile.facebook.FacebookProfile; import org.pac4j.oauth.profile.facebook.FacebookProfile;
import org.pac4j.oauth.profile.twitter.TwitterProfile; import org.pac4j.oauth.profile.twitter.TwitterProfile;
import org.pac4j.oidc.profile.OidcProfile; import org.pac4j.oidc.profile.OidcProfile;
...@@ -31,6 +32,7 @@ import org.springframework.security.core.userdetails.AuthenticationUserDetailsSe ...@@ -31,6 +32,7 @@ import org.springframework.security.core.userdetails.AuthenticationUserDetailsSe
import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import de.thm.arsnova.config.properties.AuthenticationProviderProperties;
import de.thm.arsnova.model.UserProfile; import de.thm.arsnova.model.UserProfile;
import de.thm.arsnova.security.User; import de.thm.arsnova.security.User;
import de.thm.arsnova.service.UserService; import de.thm.arsnova.service.UserService;
...@@ -44,10 +46,13 @@ import de.thm.arsnova.service.UserService; ...@@ -44,10 +46,13 @@ import de.thm.arsnova.service.UserService;
@Service @Service
public class OauthUserDetailsService implements AuthenticationUserDetailsService<OAuthToken> { public class OauthUserDetailsService implements AuthenticationUserDetailsService<OAuthToken> {
private final UserService userService; private final UserService userService;
private final AuthenticationProviderProperties.Saml samlProperties;
protected final Collection<GrantedAuthority> grantedAuthorities; protected final Collection<GrantedAuthority> grantedAuthorities;
public OauthUserDetailsService(final UserService userService) { public OauthUserDetailsService(final UserService userService,
final AuthenticationProviderProperties authenticationProviderProperties) {
this.userService = userService; this.userService = userService;
this.samlProperties = authenticationProviderProperties.getSaml();
grantedAuthorities = new HashSet<>(); grantedAuthorities = new HashSet<>();
grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_USER")); grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_USER"));
grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_OAUTH_USER")); grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_OAUTH_USER"));
...@@ -77,7 +82,14 @@ public class OauthUserDetailsService implements AuthenticationUserDetailsService ...@@ -77,7 +82,14 @@ public class OauthUserDetailsService implements AuthenticationUserDetailsService
grantedAuthorities, true); grantedAuthorities, true);
} else if (token.getDetails() instanceof SAML2Profile) { } else if (token.getDetails() instanceof SAML2Profile) {
final SAML2Profile profile = (SAML2Profile) token.getDetails(); final SAML2Profile profile = (SAML2Profile) token.getDetails();
user = userService.loadUser(UserProfile.AuthProvider.SAML, profile.getId(), final String uidAttr = samlProperties.getUserIdAttribute();
final String uid;
if (uidAttr == null || "".equals(uidAttr)) {
uid = profile.getId();
} else {
uid = profile.getAttribute(uidAttr, List.class).get(0).toString();
}
user = userService.loadUser(UserProfile.AuthProvider.SAML, uid,
grantedAuthorities, true); grantedAuthorities, true);
} else { } else {
throw new IllegalArgumentException("AuthenticationToken not supported"); throw new IllegalArgumentException("AuthenticationToken not supported");
......
...@@ -179,6 +179,7 @@ arsnova: ...@@ -179,6 +179,7 @@ arsnova:
store-password: arsnova store-password: arsnova
key-alias: saml key-alias: saml
key-password: arsnova key-password: arsnova
user-id-attribute: uid
assertion-consumer-service-index: 0 assertion-consumer-service-index: 0
max-authentication-lifetime: 3600 max-authentication-lifetime: 3600
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment