global class JitHandlerExample implements Auth.SamlJitHandler {
// Do nothing on create
global User createUser(Id samlSsoProviderId, Id communityId, Id portalId, String federationIdentifier, Map<String, String> attributes, String assertion){
return null;
}
// On update
global void updateUser(Id userId, Id samlSsoProviderId, Id communityId, Id portalId, String federationIdentifier, Map<String, String> attributes, String assertion) {
// For Encrypted assertions use
// assertion = attributes.get('Sfdc.SamlAssertion')
// Get the subject
String subject = getSubjectFromAssertion(EncodingUtil.Base64Decode(assertion).toString());
// Do whatever you need to do with the subject
lwt.Dbg.al(subject);
lwt.Dbg.pub();
}
/**
* @description Method to get the subject from the assertion
*/
private String getSubjectFromAssertion(String decodedAssertion){
XmlStreamReader reader = new XmlStreamReader(decodedAssertion);
boolean isSafeToGetNextXmlElement = true;
while(isSafeToGetNextXmlElement) {
if (reader.getEventType() == XmlTag.START_ELEMENT) {
// Find the nameId element
if (reader.getLocalName() == 'NameID') {
// Go to the text part of the element (part after the start tag)
reader.next();
// Return the value of the element
return reader.getText();
}
}
if (reader.hasNext()) {
reader.next();
}else{
isSafeToGetNextXmlElement = false;
break;
}
}
return null;
}
}