微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用“ms-rest-nodeauth”刷新服务主体身份验证的访问令牌

如何解决使用“ms-rest-nodeauth”刷新服务主体身份验证的访问令牌

我有一个应用程序需要连接到 Azure sql Server 并使用 Sequelize 作为 ORM。我试图通过使用服务主体进行身份验证来使解决方案更安全。我正在使用模块 @azure/ms-rest-nodeauth 来获取访问令牌并将其传递给我的数据库初始化程序中的 Sequelize。 “loginWithServicePrincipalSecret”函数通过传递 SPN 凭据为我获取访问令牌。

const sequelize = new Sequelize({
      database: AZURE_sql_DB,host: AZURE_sql_SERVER,dialect: 'mssql',logging: true,dialectOptions: {
        authentication: {
          type: 'azure-active-directory-access-token',options: {
            token: accesstoken,},}
      }
    })

问题是,虽然这可以建立连接,但访问令牌会在 1 小时后过期。这将破坏解决方案,因为它不断侦听新请求并且令牌将过期。

有没有办法“刷新”令牌,或者有什么优雅的方式来处理获取新令牌?

解决方法

您能否尝试将 Silent flowMSAL.js 一起使用,它在内部使用刷新令牌在需要时获取新令牌? acquireTokenSilent(@azure/msal-node) 可以进行令牌的静默更新,这意味着您无需自己获取刷新令牌。

var request = {
    scopes: ["Mail.Read"]
};

msalInstance.acquireTokenSilent(request).then(tokenResponse => {
    // Do something with the tokenResponse
}).catch(error => {
    if (error instanceof InteractionRequiredAuthError) {
        // fallback to interaction when silent call fails
        return myMSALObj.acquireTokenRedirect(request)
    }
});
,

发布我最终用于解决方案的内容。

Tedious 支持身份验证类型“azure-active-directory-service-principal-secret”,它在后台使用@azure/ms-rest-nodeauth 方法并处理身份验证。

{
  database: AZURE_SQL_DB,host: AZURE_SQL_SERVER,dialect: 'mssql',logging: true,dialectOptions: {
    authentication: {
      type: 'azure-active-directory-service-principal-secret',options: {
        clientId: AZURE_CLIENT_ID,tenantId: AZURE_TENANT_ID,clientSecret: AZURE_CLIENT_SECRET,},};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。