我正在使用SP (Spring-SAML)和IDP (WSO2IS)测试单点登录。他们在浏览器上工作得很好。
现在我想把它带到一个Java独立应用程序中。提供用户凭据和SP URL后,用户即可登录应用程序并访问SP。要实现这一点,基本上我需要使用HTTPClient (用于处理Cookie、POST、重定向、自动POST),并遵循浏览器上发生的SAML消息流。
我想知道做这件事最有效的方法。有没有什么库或者例子?
非常感谢您的帮助。
发布于 2016-08-26 13:45:51
我设法使用HtmlUnit headless浏览器创建了一个相对简单的解决方案。在我的例子中,我不得不从一个需要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;
}https://stackoverflow.com/questions/27123260
复制相似问题