Вход в 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