我正在使用SP(Spring-SAML)和IDP(WSO2IS)测试SSO。它们在浏览器上运行良好。
现在我想将它带到Java独立应用程序。提供用户凭据和SP URL,用户可以登录应用程序并访问SP。 为了实现这一点,我基本上需要使用HTTPClient(用于处理Cookie,POST,Redirect,Auto-POST)并按照浏览器上的SAML消息流进行操作。
我想知道最有效的方法。有没有图书馆或示例?
非常感谢您的帮助。
答案 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;
}