Java Microsoft Graph Api今天提供过期的设备代码
我一直在通过以下方式测试MicrosoftGraphAPI用户访问令牌 . 昨天它工作正常,但今天它总是给我com.microsoft.aad.msal4j.MsalClientException:过期的设备代码。我没有给出任何设备代码,并在上创建了新的注册应用程序后进行了尝试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=
消费者设备代码消费者=(设备代码设备代码)->{
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();