...
- functioning CAS 3.3 setup, with localization via the Maven overlay method, CASUM/Maintaining+local+customizations+using+Maven+2
- MS-AD authentication is function, CASUM/Active+Directory
- You can get LDAP attributes from AD into the CAS Princical (ie. the CAS user object )
You will need to map the AD "mail" attribute to the CAS princical "EmailAddress" attribute, eg. in the mapping section of the above article, use
HTML clipboard
CASUM/AttributesCode Block xml xml <map> <entry key="mail" value="EmailAddress" /> </map>
...
Code Block | ||||
---|---|---|---|---|
| ||||
--- cas-server-core/src/main/java/org/jasig/cas/authentication/principal/GoogleAccountsService.java 2009-03-18 08:27:22.000000000 -0700
+++ cas-server-local/src/main/java/org/jasig/cas/authentication/principal/GoogleAccountsService.java 2009-03-18 08:25:53.000000000 -0700
@@ -25,6 +25,9 @@
import java.util.zip.Inflater;
import java.util.zip.InflaterInputStream;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
/**
* Implementation of a Service that supports Google Accounts (eventually a more
* generic SAML2 support will come).
@@ -160,8 +163,36 @@
c.setTime(new Date());
c.add(Calendar.YEAR, 1);
- samlResponse = samlResponse.replace("<USERNAME_STRING>", getPrincipal()
- .getId());
+ /**
+ * samlResponse = samlResponse.replace("<USERNAME_STRING>", getPrincipal()
+ * .getId());
+ */
+ /**
+ * Modify Google return to pass in EmailAddress attribute, if exists.
+ *
+ */
+ String username = getPrincipal().getId();
+ Map<String, Object> attributes = getPrincipal().getAttributes();
+
+ /** Log instance for logging events, info, warnings, errors, etc. */
+ final Log log = LogFactory.getLog(this.getClass());
+
+ if (log.isInfoEnabled()) {
+ log.info("User [" + getPrincipal().getId() + "] has " + attributes.size() + " principal attributes");
+ }
+
+ /**
+ * try to find the attribute mapped in the CredentialsToLDAPAttributePrincipalResolver
+ * configuration in deployerConfigContext.xml
+ */
+ if(attributes.containsKey("EmailAddress")) {
+ username = (String)attributes.get("EmailAddress");
+ if (log.isInfoEnabled()) {
+ log.info("User [" + getPrincipal().getId() + "]: using EmailID [" + username + "]");
+ }
+ }
+ samlResponse = samlResponse.replace("<USERNAME_STRING>",username);
+
samlResponse = samlResponse.replace("<RESPONSE_ID>", createID());
samlResponse = samlResponse.replace("<ISSUE_INSTANT>", SamlUtils
.getCurrentDateAndTime());
|
Rebuild your overlay with maven:cd cas-server-local
...