乏味:具有accessToken连接的Azure AD丢失-读取ECONNRESET



我正在开发一个应用程序,该应用程序正在使用Azure AD对用户进行身份验证,提取他的accessToken,然后使用此令牌使用以下设置连接到Azure SQL server。

但不幸的是,我得到ESOCKET";连接丢失-读取ECONNRESET";马上,

const config = {
server: 'db-server-name.database.windows.net',
authentication: {
type: 'azure-active-directory-access-token',
options: {
token: cloudAccessToken
}
},
options: {
debug: {
packet: true,
data: true,
payload: true,
token: false,
log: true
},
database: 'DBNAME',
encrypt: true,
packetSize: 8192,
keepAlive:true,
requestTimeout: 300000,
connectionTimeout: 32000,
}
};
const connection = new Connection(config);
connection.on('connect', function (err) {
if (err) {
console.log(err);
}
executeStatement();
});
connection.on('debug', function (text) {
console.log(text);
});
connection.on('error', function (err) {
console.error(err); // --> this gets trigger with error ESOCKET right away
});

你一定错过了什么。代码在下面提供给您。具体操作可以参考Jim的回答。

我已经测试过了,它对我有用。我认为它对你有用。有关更多详细信息,您可以参考这篇文章。

使用NodeJS中的服务主体连接到Azure SQL,但令牌被拒绝

var msrestAzure = require("ms-rest-azure");
var { Connection, Request } = require("tedious");
let clientSecret = "xxx";
let serverName = "xxx.database.windows.net";
let databaseName = "xxx";
let clientId = "xxx";
let tenantId = "xxx";
async function getConnect() {
// way for Azure Service Principal
let databaseCredentials = await msrestAzure.loginWithServicePrincipalSecret(
clientId,
clientSecret,
tenantId,
{
tokenAudience: "https://database.windows.net/",
},
);
// getting access token
let databaseAccessToken = await new Promise((resolve, reject) => {
databaseCredentials.getToken((err, results) => {
if (err) return reject(err);
resolve(results.accessToken);
});
});
var config = {
server: serverName,
authentication: {
type: "azure-active-directory-access-token",
options: {
token: databaseAccessToken,
},
},
options: {
debug: {
packet: true,
data: true,
payload: true,
token: false,
log: true,
},
database: databaseName,
encrypt: true,
},
};
var connection = new Connection(config);
connection.connect();
connection.on("connect", function (err) {
if (err) {
console.log(err);
}
executeStatement(connection);
});
connection.on("debug", function (text) {
console.log(text);
});
}
function executeStatement(connection) {
request = new Request("select * from CSVTest", function (err, rowCount) {
if (err) {
console.log(err);
} else {
console.log(rowCount + " rows");
}
connection.close();
});
request.on("row", function (columns) {
columns.forEach(function (column) {
if (column.value === null) {
console.log("NULL");
} else {
console.log(column.value);
}
});
});
request.on("done", function (rowCount, more) {
console.log(rowCount + " rows returned");
});
connection.execSql(request);
}
getConnect()
.then(() => {
console.log("run successfully");
})
.catch((err) => {
console.log(err);
});

最新更新