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

问题描述

我一直在通过以下方法测试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 个选项(下图中的第一个和第二个)。

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...