使用 'ms-rest-nodeauth' 刷新服务主体身份验证的访问令牌
Refresh access token for Service Principal authentication using 'ms-rest-nodeauth'
我有一个应用程序需要连接到 Azure SQL 服务器并使用 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 小时后过期。这会破坏解决方案,因为它会不断侦听新请求并且令牌会过期。
是否有办法 'refresh' 令牌或一些优雅的方式来处理获取新令牌?
能否请您尝试使用Silent flow with MSAL.js, which internally uses the refresh token to fetch new tokens as and when needed? 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,
},
},
},
};
我有一个应用程序需要连接到 Azure SQL 服务器并使用 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 小时后过期。这会破坏解决方案,因为它会不断侦听新请求并且令牌会过期。
是否有办法 'refresh' 令牌或一些优雅的方式来处理获取新令牌?
能否请您尝试使用Silent flow with MSAL.js, which internally uses the refresh token to fetch new tokens as and when needed? 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,
},
},
},
};