java - 使用 javafx webview 登录 Microsoft OpenId
问题描述
我目前正在开发一个小型应用程序,它允许用户使用他们的一个社交平台登录。我已经使用 Facebook 和 Google 实现了 OpenId 登录,效果很好。当我尝试使用 Microsoft 实现它时,问题就开始了。
首先,我必须升级到 Java 13,因为我使用的是 OpenJDK,因为它未能通过在 OpenJDK java 13 中得到解决的完整性检查。
现在我面临无法登录的问题,因为 cookie 被 Javafx Webview 阻止。我已经使用了这个答案Setting a cookie using JavaFX's 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
公共无效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,无论如何我很确定它们涵盖了大多数用户
解决方案
我在您提出问题 11 个月后发布此内容,直到现在 Microsoft OpenId 与 OpenJFX 和 Java 11 或更高版本不兼容。
Microsoft User-Agent 库在 MIT 许可下。有必要在那里进行修改。
更多信息在这里:https ://developer.okta.com/blog/2019/08/14/javafx-tutorial-oauth2-oidc
推荐阅读
- android - 如何在我的应用程序中打开窗口并重定向到谷歌播放中的另一个应用程序下载页面
- python - 如何使用其中同一库中的多个函数为函数声明多个 kwargs
- javascript - reCAPTCHA v2 复选框小部件未在我的 REACT 应用程序上呈现
- c - 为什么在一行上声明变量会产生意想不到的结果?
- ios - iOS,我可以知道我是否有使用 CallKit 的来电吗?(不是网络电话)
- reactjs - NextJS,如何将服务器端呈现的应用程序上传到我的 FTP 帐户
- javascript - 在 Blade Foreach 循环中动态隐藏元素
- python - Numpy 在 Spyder 3.8 (Python 3) 中不起作用
- ios - Swift:确定类型是否符合协议导致错误
- c# - 如何将图像放入合并的单元格中