Вход в Microsoft OpenId с использованием веб-браузера javafx

В настоящее время я занимаюсь разработкой небольшого приложения, которое позволяет пользователям входить в систему, используя одну из своих социальных платформ. Я уже внедрил OpenId, используя Facebook и Google, которые отлично работают. Проблема началась, когда я попытался реализовать ее с помощью Microsoft.

Сначала мне пришлось обновиться до Java 13, так как я использую OpenJDK, так как он не прошел проверку целостности, которая была решена в OpenJDK Java 13.

Сейчас я сталкиваюсь с проблемой невозможности войти в систему, поскольку файлы cookie блокируются Javafx Webview. Я использовал этот ответ Установка cookie с использованием JavaFX WebEngine/WebView, но без удачи.

Ответ на следующий запрос https://login.live.com/oauth20_authorize.srf?scope=openid&client_id= "" & response_type = code & redirect_uri = https://login.live.com/oauth20_desktop.srf

является

https://login.live.com/cookiesDisabled.srf uaid = 3745b6b82c9a41ecac8f145573df4d9c & mkt = EN-US & lc = 1033

public void microsoftLogin () {

    WebView webview = new WebView();
    Stage stage = new Stage();
    stage.initModality(Modality.APPLICATION_MODAL);
    stage.initOwner(anchorPane.getScene().getWindow());
    stage.initStyle(StageStyle.UTILITY);
    stage.setScene(new Scene(webview));
    stage.sizeToScene();




    Oauth2 microsoftLogin = new Oauth2().setURL("https://login.live.com/oauth20_authorize.srf")
                            .addScope("openid")
                            .setRedirectUri("https://login.live.com/oauth20_desktop.srf")
                            .setClientId("05f57f35-f90e-4478-ab29-50a838eabdce")
                            .setResponseType("code")
                            .build();



        try {

            Map<String, List<String>> headers = new LinkedHashMap<>();
            headers.put("Set-Cookie", Arrays.asList());
            java.net.CookieHandler.getDefault().put(URI.create("https://login.live.com"), headers);
            if(webview.getEngine().getLoadWorker().getState() == Worker.State.READY) {
                webview.getEngine().load(microsoftLogin.toString());
                webview.getEngine().locationProperty().addListener((observableValue, s, t1) -> {
                    System.out.println(t1);
                    System.out.println(GoogleAccess.cookies().getCookieStore().getCookies().toString());
                });
            }
        }catch (IOException exception){
            exception.printStackTrace();
        }






    stage.show();
}

Кто-нибудь уже сталкивался с этой проблемой? Я собираюсь вообще отказаться от входа в Microsoft, но не хочу ограничивать своих пользователей только Facebook и Goole, которые, я уверен, в любом случае покрывают большинство пользователей.

0 ответов

Я отправляю это через 11 месяцев после вашего вопроса, и до сих пор Microsoft OpenId несовместим с OpenJFX и Java 11 или выше.

Библиотека Microsoft User-Agent находится под лицензией MIT. Здесь необходимо внести изменения.

Подробнее об этом здесь: https://developer.okta.com/blog/2019/08/14/javafx-tutorial-oauth2-oidc

Другие вопросы по тегам