如何解决使用“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 flow 与 MSAL.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 举报,一经查实,本站将立刻删除。