Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Microsoft Graph Api今天提供过期的设备代码_Java_Azure Active Directory_Microsoft Graph Api_Access Token_Azure Ad Graph Api - Fatal编程技术网

Java Microsoft Graph Api今天提供过期的设备代码

Java Microsoft Graph Api今天提供过期的设备代码,java,azure-active-directory,microsoft-graph-api,access-token,azure-ad-graph-api,Java,Azure Active Directory,Microsoft Graph Api,Access Token,Azure Ad Graph Api,我一直在通过以下方式测试MicrosoftGraphAPI用户访问令牌 . 昨天它工作正常,但今天它总是给我com.microsoft.aad.msal4j.MsalClientException:过期的设备代码。我没有给出任何设备代码,并在上创建了新的注册应用程序后进行了尝试 消费者设备代码消费者=(设备代码设备代码)->{ System.out.println(deviceCode.message()); }; //请求令牌,传递请求的权限范围 IAAuthenticationResult=

我一直在通过以下方式测试MicrosoftGraphAPI用户访问令牌 . 昨天它工作正常,但今天它总是给我com.microsoft.aad.msal4j.MsalClientException:过期的设备代码。我没有给出任何设备代码,并在上创建了新的注册应用程序后进行了尝试

消费者设备代码消费者=(设备代码设备代码)->{
System.out.println(deviceCode.message());
};
//请求令牌,传递请求的权限范围
IAAuthenticationResult=app.acquireToken(
DeviceCodeFlowParameters
.builder(范围集、设备代码使用者)
.build()
).例外情况(ex->{
System.out.println(“无法验证-”+ex.getMessage());
返回null;
}).join();

看起来浏览器在cookie中使用了过期的设备代码

设备代码由项目生成并提供给您。然后使用它进行身份验证

我没有发现你的代码是否有问题


一种解决方法是下载已完成的项目,然后按照运行该项目。

这是由无效的设备代码请求引起的…该请求的过期时间为
in=0

我通过调试到
DeviceFlowRequest::acquireDeviceCode
中发现了错误。
响应
声明“提供的客户端不支持此功能。客户端应用程序必须标记为“移动”。(但这被try/catch掩盖了,try/catch返回“Expired Device”错误。)


这给了我在身份验证中更新应用程序所需的提示,在底部(在高级设置下),我忽略了选中“允许公共客户端流”-“启用以下移动和桌面流”,然后单击“保存”按钮(在顶部)。

我也遇到了同样的问题。我在教程步骤中所做的唯一更改是在“支持帐户类型”中选择第一个选项。我选择了第二个选项来解决这个问题(我想第三个选项也可以)。但目前Microsoft identity Platform不支持它

因此我只有两个选择(下图中的第一个和第二个)


你为什么说“我不提供任何设备代码”?运行此示例代码项目时,应用程序将显示URL和设备代码,如“要登录,请使用web浏览器打开页面并输入代码F7CG945YZ进行身份验证”。您提供的代码似乎已过期。请尝试使用inprivate窗口打开页面。此错误之前使用的命令行语句。我以后再也看不到了。设备代码由项目生成并提供给您。然后使用它进行身份验证。我几乎看不出你的代码出了什么问题。但是您可以下载已完成的项目并按照命令运行它。访问令牌为空。请调试它以查看“/graphtutorial/src/main/java/graphtutorial/Authentication.java”文件中发生的情况:
Authentication.initialize(appId);最终字符串accessToken=Authentication.getUserAccessToken(appScopes)
    Consumer<DeviceCode> deviceCodeConsumer = (DeviceCode deviceCode) -> {
        System.out.println(deviceCode.message());
    };

    // Request a token, passing the requested permission scopes
    IAuthenticationResult result = app.acquireToken(
            DeviceCodeFlowParameters
                    .builder(scopeSet, deviceCodeConsumer)
                    .build()
    ).exceptionally(ex -> {
        System.out.println("Unable to authenticate - " + ex.getMessage());
        return null;
    }).join();