没有浏览器的SAML和Java Standalone应用程序?

时间:2014-11-25 09:42:28

标签: single-sign-on saml wso2is spring-saml

我正在使用SP(Spring-SAML)和IDP(WSO2IS)测试SSO。它们在浏览器上运行良好。

现在我想将它带到Java独立应用程序。提供用户凭据和SP URL,用户可以登录应用程序并访问SP。 为了实现这一点,我基本上需要使用HTTPClient(用于处理Cookie,POST,Redirect,Auto-POST)并按照浏览器上的SAML消息流进行操作。

我想知道最有效的方法。有没有图书馆或示例?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:-1)

我设法使用HtmlUnit无头浏览器创建了一个相对简单的解决方案。在我的情况下,我必须从需要SAML身份验证的网站下载PDF文件。

import com.gargoylesoftware.htmlunit.UnexpectedPage;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.*;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;

...

private static byte[] samlAuthenticateAndDownloadFile(String url, String username, String password) throws Exception {
    byte[] fileBytes;
    try (final WebClient webClient = new WebClient()) {
      final HtmlPage loginPage = webClient.getPage(url);

      final HtmlForm loginForm = loginPage.getForms().get(0);

      final HtmlSubmitInput button = loginForm.getInputByName("login");
      final HtmlTextInput usernameField = loginForm.getInputByName("username");
      final HtmlPasswordInput passwordField = loginForm.getInputByName("password");

      usernameField.setValueAttribute(username);
      passwordField.setValueAttribute(password);

      final UnexpectedPage pdfPage = button.click();

      InputStream inputStream = pdfPage.getInputStream();

      fileBytes = IOUtils.toByteArray(inputStream);
    }

    return fileBytes;
  }