问题描述
我一直在通过以下方法测试Microsoft Graph api用户访问令牌 Java example URL。 昨天工作正常,但今天它总是给我com.microsoft.aad.msal4j.MsalClientException: 设备代码已过期 。我没有提供任何设备代码,并尝试在Azure Active Directory admin center
上创建了新的注册应用程序 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();
解决方法
好像浏览器在cookie中使用了“过期设备”代码。
设备代码由项目生成并提供给您。然后使用它进行身份验证。
我没有发现您的代码是否有问题。
一种解决方法是下载完成的项目here,然后按照README运行它。
,这是由无效的设备代码请求引起的,该请求有expiresIn=0
。
我通过调试到DeviceFlowRequest::acquireDeviceCode
中发现了我的错误。 response
指出“此功能不支持所提供的客户端。客户端应用程序必须标记为'mobile'。”。 (但这被返回“ Expired Device”错误的try / catch掩盖了。)
这给了我在https://aad.portal.azure.com/上更新应用程序所需的提示-在身份验证的底部(在高级设置下),我忽略了“允许公共客户端流”的检查-“启用以下功能移动和桌面流量”,然后点击“保存”按钮(位于顶部)。
,我遇到了同样的问题。我从教程步骤中更改的唯一一件事是在支持帐户类型中选择第一个选项。我无法通过选择第二个选项来解决这个问题(我猜第三个选项也可以)。但目前 Microsoft 身份平台不支持它。Refer here for more details
因此我只有 2 个选项(下图中的第一个和第二个)。