Как проверить удаленный SSO WebSite с помощью HtmlUnit - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь проверить SSO с помощью HtmlUnit и не удается.

implementation group: 'net.sourceforge.htmlunit', name: 'htmlunit', version: '2.35.0'

Мой код похож на это: -

java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(java.util.logging.Level.OFF);

try (final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_60)) {
    webClient.getCookieManager().setCookiesEnabled(true);
    webClient.addRequestHeader("authority", "my.organization.com");
    webClient.addRequestHeader("referer", "https://research.development.com/login/");
    webClient.addRequestHeader("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36");

    webClient.getOptions().setJavaScriptEnabled(true);
    webClient.getOptions().setRedirectEnabled(true);
    webClient.getOptions().setThrowExceptionOnScriptError(false);
    webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
    webClient.getOptions().setThrowExceptionOnScriptError(false);

    webClient.getOptions().setCssEnabled(true);
    webClient.getOptions().setMaxInMemory(-1);

    // Enter User Name
    final HtmlPage page = webClient.getPage(
            "https://my.organization.com/as/authorization.oauth2?platSite=XYZZ/xyzz&client_id=RESEARCH-DEVELOPMENT-2&response_type=code&scope=openid xyz_auth_info profile email xyz_analytics_info urn:com:xyz:idp:policy:product:indv_identity&prompt=login&redirect_uri=https://research.development.com/login/");

    final HtmlInput username = (HtmlInput) page.getHtmlElementById("xyz-email");
    username.setValueAttribute("test-user@gmail.com");

    final HtmlButton continueButton = page.getHtmlElementById("xyz-xyzPrimaryBtn");

    // Enter Password
    final HtmlPage passwordPage = continueButton.click();

    webClient.waitForBackgroundJavaScriptStartingBefore(10000);

    final HtmlInput password = (HtmlInput) passwordPage.getHtmlElementById("xyz-password");
    password.setValueAttribute("password");

    // Sign In
    final HtmlForm signinForm = passwordPage.getFormByName("xyzForm");

    final ScriptResult nextPage = signinForm.fireEvent(Event.TYPE_SUBMIT);

    webClient.waitForBackgroundJavaScriptStartingBefore(10000);
}

}

Я вижу, что яудалось успешно ввести имя пользователя и пароль и отправить форму

Что я не могу выяснить, это как получить возвращенный код из формы POST

Разве это невозможно?

Форма имеет эти атрибуты

<form class="xyz-signin-form" method="POST" action="/as/F7zpZ/resume/as/authorization.ping?client_id=RESEARCH-DEVELOPMENT-2&" autocomplete="off" name="xyzForm" novalidate>

Как получить доступ к ответу из этого POST?

...