96 return new SamlProtocol() {
99 protected Response buildAuthenticatedResponse(AuthenticatedClientSessionModel clientSession, String redirectUri, Document samlDocument, JaxrsSAML2BindingBuilder bindingBuilder)
throws ConfigurationException, ProcessingException, IOException {
100 Document document = bindingBuilder.postBinding(samlDocument).getDocument();
103 Soap.SoapMessageBuilder messageBuilder = Soap.createMessage()
108 createEcpResponseHeader(redirectUri, messageBuilder);
109 createRequestAuthenticatedHeader(clientSession, messageBuilder);
111 messageBuilder.addToBody(document);
113 return messageBuilder.build();
114 }
catch (Exception e) {
115 throw new RuntimeException(
"Error while creating SAML response.", e);
119 private void createRequestAuthenticatedHeader(AuthenticatedClientSessionModel clientSession, Soap.SoapMessageBuilder messageBuilder) {
120 ClientModel client = clientSession.getClient();
122 if (
"true".equals(client.getAttribute(SamlConfigAttributes.SAML_CLIENT_SIGNATURE_ATTRIBUTE))) {
123 SOAPHeaderElement ecpRequestAuthenticated = messageBuilder.addHeader(JBossSAMLConstants.REQUEST_AUTHENTICATED.get(),
NS_PREFIX_PROFILE_ECP);
125 ecpRequestAuthenticated.setMustUnderstand(
true);
126 ecpRequestAuthenticated.setActor(
"http://schemas.xmlsoap.org/soap/actor/next");
130 private void createEcpResponseHeader(String redirectUri, Soap.SoapMessageBuilder messageBuilder)
throws SOAPException {
131 SOAPHeaderElement ecpResponseHeader = messageBuilder.addHeader(JBossSAMLConstants.RESPONSE__ECP.get(),
NS_PREFIX_PROFILE_ECP);
133 ecpResponseHeader.setMustUnderstand(
true);
134 ecpResponseHeader.setActor(
"http://schemas.xmlsoap.org/soap/actor/next");
135 ecpResponseHeader.addAttribute(messageBuilder.createName(JBossSAMLConstants.ASSERTION_CONSUMER_SERVICE_URL.get()), redirectUri);
139 protected Response buildErrorResponse(
boolean isPostBinding, String uri, JaxrsSAML2BindingBuilder binding, Document document)
throws ConfigurationException, ProcessingException, IOException {
140 return Soap.createMessage().addToBody(document).build();
144 protected Response buildLogoutResponse(UserSessionModel userSession, String logoutBindingUri, SAML2LogoutResponseBuilder builder, JaxrsSAML2BindingBuilder binding)
throws ConfigurationException, ProcessingException, IOException {
145 return Soap.createFault().reason(
"Logout not supported.").build();
KeycloakContext getContext()
static final String NS_PREFIX_PROFILE_ECP
Definition: SamlEcpProfileService.java:54
static final String NS_PREFIX_SAML_PROTOCOL
Definition: SamlEcpProfileService.java:55
EventBuilder event
Definition: AuthorizationEndpointBase.java:61
RealmModel realm
Definition: AuthorizationEndpointBase.java:60
static final String NS_PREFIX_SAML_ASSERTION
Definition: SamlEcpProfileService.java:56
HttpHeaders headers
Definition: AuthorizationEndpointBase.java:65
KeycloakSession session
Definition: AuthorizationEndpointBase.java:69