|
CAS supports the standardized SAML 1.1 protocol primarily to support attribute release to clients and single sign-out. Requesting SAMLA SAML 1.1 ticket validation response is obtained by validating a ticket via POST at the /samlValidate URI. An example request/response follows for a successful ticket validation attempt. Example Request POST /cas/samlValidate?ticket= Host: cas.example.com Content-Length: 491 Content-Type: text/xml <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header/> <SOAP-ENV:Body> <samlp:Request xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol" MajorVersion="1" MinorVersion="1" RequestID="_192.168.16.51.1024506224022" IssueInstant="2002-06-19T17:03:44.022Z"> <samlp:AssertionArtifact> ST-1-u4hrm3td92cLxpCvrjylcas.example.com </samlp:AssertionArtifact> </samlp:Request> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Example Response <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header /> <SOAP-ENV:Body> <Response xmlns="urn:oasis:names:tc:SAML:1.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" IssueInstant="2008-12-10T14:12:14.817Z" MajorVersion="1" MinorVersion="1" Recipient="https://eiger.iad.vt.edu/dat/home.do" ResponseID="_5c94b5431c540365e5a70b2874b75996"> <Status> <StatusCode Value="samlp:Success"> </StatusCode> </Status> <Assertion xmlns="urn:oasis:names:tc:SAML:1.0:assertion" AssertionID="_e5c23ff7a3889e12fa01802a47331653" IssueInstant="2008-12-10T14:12:14.817Z" Issuer="localhost" MajorVersion="1" MinorVersion="1"> <Conditions NotBefore="2008-12-10T14:12:14.817Z" NotOnOrAfter="2008-12-10T14:12:44.817Z"> <AudienceRestrictionCondition> <Audience> https://some-service.example.com/app/ </Audience> </AudienceRestrictionCondition> </Conditions> <AttributeStatement> <Subject> <NameIdentifier>johnq</NameIdentifier> <SubjectConfirmation> <ConfirmationMethod> urn:oasis:names:tc:SAML:1.0:cm:artifact </ConfirmationMethod> </SubjectConfirmation> </Subject> <Attribute AttributeName="uid" AttributeNamespace="http://www.ja-sig.org/products/cas/"> <AttributeValue>12345</AttributeValue> </Attribute> <Attribute AttributeName="groupMembership" AttributeNamespace="http://www.ja-sig.org/products/cas/"> <AttributeValue> uugid=middleware.staff,ou=Groups,dc=vt,dc=edu </AttributeValue> </Attribute> <Attribute AttributeName="eduPersonAffiliation" AttributeNamespace="http://www.ja-sig.org/products/cas/"> <AttributeValue>staff</AttributeValue> </Attribute> <Attribute AttributeName="accountState" AttributeNamespace="http://www.ja-sig.org/products/cas/"> <AttributeValue>ACTIVE</AttributeValue> </Attribute> </AttributeStatement> <AuthenticationStatement AuthenticationInstant="2008-12-10T14:12:14.741Z" AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:password"> <Subject> <NameIdentifier>johnq</NameIdentifier> <SubjectConfirmation> <ConfirmationMethod> urn:oasis:names:tc:SAML:1.0:cm:artifact </ConfirmationMethod> </SubjectConfirmation> </Subject> </AuthenticationStatement> </Assertion> </Response> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Client SupportThe SAML 1.1 protocol is supported in the following clients as of this writing:
Customizing the SAML artifact usedIn different versions of CAS, we've swapped the artifact type created by the SamlCompliantUniqueTicketIdGenerator. Unfortunately, not often for the better! As of CAS 3.4, the generator can handle both. When constructing an instance of the SamlComplaintUniqueTicketIdGenerator, you may set the "saml2compliant" property to "true" in order to generate SAML2 artifacts. Otherwise SAML1 compliant artifacts are generated. The example Spring configuration would look like the following (overriding the WEB-INF/spring-configuration/uniqueIdGenerators.xml): <bean id="samlServiceTicketUniqueIdGenerator" class="org.jasig.cas.util.SamlCompliantUniqueTicketIdGenerator"> <constructor-arg index="0" value="https://localhost:8443" /> <property name="saml2compliant" value="true" /> </bean> |