1

在此处输入图像描述我目前正在开发一个小型应用程序,它允许用户使用他们的一个社交平台登录。我已经使用 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,无论如何我很确定它们涵盖了大多数用户

4

1 回答 1

1

我在您提出问题 11 个月后发布此内容,直到现在 Microsoft OpenId 与 OpenJFX 和 Java 11 或更高版本不兼容。

Microsoft User-Agent 库在 MIT 许可下。有必要在那里进行修改。

更多信息在这里:https ://developer.okta.com/blog/2019/08/14/javafx-tutorial-oauth2-oidc

于 2020-08-05T12:36:18.877 回答