当前位置: 首页 > 知识库问答 >
问题:

节点中VSCode Azure帐户扩展的“刷新令牌已过期”

于意智
2023-03-14

我正在尝试使用Azure帐户扩展在VSCode中进行身份验证,如下所述:https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/identity/identity/README.md#authenticating-通过visual studio代码

然后使用DefaultAzureCredential,如下所述:https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/identity/identity/README.md#authenticating-使用defaultazurecredential

我已经安装了“@azure/identity”:“^1.1.0”,我正在使用上面的示例尝试通过azure进行身份验证以访问应用程序配置实例,但身份验证失败,出现以下错误。

invalid_grant(status code 400).
More details:
AADSTS700082: The refresh token has expired due to inactivity. The token was issued on 2020-03-19T16:25:46.3627136Z and was inactive for 90.00:00:00.
Trace ID: 391fe4c9-beb4-4253-9b9f-cada7a647900
Correlation ID: b5b7743b-371e-482a-adb7-8d2260d6029b
Timestamp: 2020-11-03 08:24:13Z
AuthenticationError: invalid_grant(status code 400).
More details:
AADSTS700082: The refresh token has expired due to inactivity. The token was issued on 2020-03-19T16:25:46.3627136Z and was inactive for 90.00:00:00.
Trace ID: 391fe4c9-beb4-4253-9b9f-cada7a647900
Correlation ID: b5b7743b-371e-482a-adb7-8d2260d6029b
Timestamp: 2020-11-03 08:24:13Z
    at IdentityClient.<anonymous> (C:\projects\udi-form\node_modules\@azure\identity\src\client\identityClient.ts:99:21)
    at Generator.next (<anonymous>)
    at fulfilled (C:\projects\udi-form\node_modules\@azure\identity\node_modules\tslib\tslib.js:111:62)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)

我已经尝试多次退出和返回,这似乎工作正常。VSCode中的状态栏显示了我的帐户,我可以从我的订阅中进行选择,因此存在连接。

我已经调试了一段时间,似乎没有在脚本运行后设置任何预期的环境变量。我是否需要一些额外的启动配置来进行设置?

我当前正在使用此配置运行ts节点脚本:

        {
            "name": "TS file",
            "type": "node",
            "request": "launch",
            "args": ["${fileBasename}"],
            "runtimeArgs": [
                "-r",
                "ts-node/register",
                "-r",
                "tsconfig-paths/register"
            ],
            "cwd": "${fileDirname}",
            "outputCapture": "std",
            "resolveSourceMapLocations": [
                "${workspaceFolder}/**",
                "!**/node_modules/**"
            ],
            "env": {
                "NODE_ENV": "development"
            }
        },

我测试的代码是这个文件。除了导入的azure模块之外,它没有其他依赖项:

import { AppConfigurationClient } from "@azure/app-configuration"
import { DefaultAzureCredential } from "@azure/identity"

import { setLogLevel } from "@azure/logger"
setLogLevel("verbose")

const start = async () => {
    const credentials = new DefaultAzureCredential()
    const appConfigClient = new AppConfigurationClient("[app configuration endpoint]", credentials)
    console.log(await appConfigClient.getConfigurationSetting({ key: "inf/cdnUrl" }))
}

start().catch((error) => {
    console.error(error)
    process.exit(1)
})

编辑:为VisualStudioCodeCredential调出DefaultAzureCredential无效。

共有1个答案

涂煌
2023-03-14

对于其他看这个问题的人。原来这是一个边缘案件与我的设置。

简而言之,一旦前一个刷新令牌过期,扩展没有正确地重新协商新的刷新令牌。

Github上的MS团队在此解决了这一问题:https://github.com/microsoft/vscode-azure-account/issues/234

 类似资料:
  • 在一个小项目上工作并使用jwt令牌进行了一些身份验证,整个过程如下所示: < li >在auth/register上生成jwt令牌以及刷新令牌 < li >使用令牌发出请求 < li >如果令牌过期,我将查询请求用户及其refreshToken,比较其当前请求refreshToken和数据库令牌 < li >如果令牌匹配,我将生成一个新令牌和一个新刷新令牌。 整个问题是第五步,假设我向“/me/f

  • 我有一个基于web的应用程序,使用谷歌OAuth2.0作为登录框架。它以前一直工作得很好,直到昨天。访问令牌过期后,applcation无法获取刷新令牌。除此之外,“请求许可”页面已经改为“有离线访问”,而不是“知道你在谷歌上是谁”和“查看你的电子邮件”。 我试图寻找类似的问题,但我找不到一个。这是从昨天开始发生的。在此之前,我从来没有对代码做过任何改变。

  • 仍然存在,我可以通过它刷新访问令牌。 如果某人有G套件帐户,那么过期时间是否有特殊值,还是保持不变? 根据文档,我最多可以拥有50个令牌,那么有没有其他替代方法,这样我就可以在50个请求后获得有效的令牌。

  • 我的技能需要帐户链接,它将通过OAuth 2.0协议使用AWS cognito用户池对客户进行身份验证。我可以在用户池中指定刷新令牌的TTL,我决定将其有效期设置为60天。 据我所知,alexa将访问令牌与您的技能收到的每个请求一起发送给您,以便您能够识别使用该技能的客户。如果他们的访问令牌过期,alexa将通过在将带有访问令牌的请求转发给您之前刷新他们的令牌来处理此问题。因此,您可以拥有有效的访

  • 我一定是漏掉了什么! 我一直在尝试使用新的(对我来说是新的,来自delphi xe2环境)TOAuth2Authenticator、TRESTClient、TRESTRequest、TRESTResponse组件刷新过期的OAUTH2令牌 null 我假设(看来是错误的),如果我尝试对服务器执行请求,并且令牌已经过期,那么组件应该有足够的细节来意识到令牌已经过期,并在需要的时候刷新它。 我认为没有

  • 我正在使用Google Oauth2 API连接到Google广告,当我的@gmail出现时,我将成为唯一一个刷新令牌。com帐户对两个不同的谷歌广告帐户具有读取权限。 我有账户a@gmail.com.此帐户具有对谷歌广告帐户的读取权限b@gmail.com和c@gmnail.com. 当我用b@gmail.com和c@gmail.com的帐户的电子邮件a@gmail.com创建两个到谷歌广告的连