Jump to content

Lesson Learned #273:UsernamePasswordCredential: tenantId,clientId,username and password are required


Recommended Posts

Guest Jose_Manuel_Jurado
Posted

Today, I worked on a service request that our customer got the following error message: UsernamePasswordCredential: tenantId, clientId, username and password are required parameters using Node.Js connecting Azure SQL DB with Tedious. Following, I would like to share my findings here.

 

 

 

The customer is using the following code:

 

 

 

 

 

var Connection = require('tedious').Connection;

var Request = require('tedious').Request;

const readline = require('readline');

const rl = readline.createInterface({

input: process.stdin,

output: process.stdout

});

 

var config = {

server: "servername.database.windows.net", // or "localhost"

database:"DatabaseName",

authentication: {

type: "azure-active-directory-password",

options: {

username: "username@microsoft.com",

password: "MyPassword",

clientId: "x47b3ce9-xxxxx-xxxxx-xxxxxx",

tenantId: "x2f988bf-xxxx-xxxxx-xxxxx"

}

}

};

 

console.log('Hello world');

var connection = new Connection(config);

 

// Setup event handler when the connection is established.

connection.on('connect', function (err) {

if (err) {

console.log('Error: ', err)

}

// If no error, then good to go...

console.log('Hello world 2');

executeStatement();

});

 

connection.connect();

 

function executeStatement() {

request = new Request("select 42, 'hello world'", function (err, rowCount) {

if (err) {

console.log(err);

} else {

console.log(rowCount + ' rows');

}

});

 

request.on('row', function (columns) {

columns.forEach(function (column) {

console.log(column.value);

});

});

 

connection.execSql(request);

}

 

 

 

 

 

Checking the source code here: tedious/connection.ts at master · tediousjs/tedious (github.com) in the function called UsernamePasswordCredential in the line number 3411. The parameter used is authentication.options.userName instead of authentication.options.username.

 

 

 

 

 

switch (authentication.type) {

case 'azure-active-directory-password':

credentials = new UsernamePasswordCredential(

authentication.options.tenantId ?? 'common',

authentication.options.clientId,

authentication.options.userName,

authentication.options.password

);

break;

 

 

 

 

 

All points to that the value of the parameter using authentication.options.userName will be empty and for this reason we got this error message. Once we change in the connection string authentication.options.userName the error is bypassed.

 

 

 

 

 

var config = {

server: "servername.database.windows.net", // or "localhost"

database:"DatabaseName",

authentication: {

type: "azure-active-directory-password",

options: {

userName: "username@microsoft.com",

password: "MyPassword",

clientId: "x47b3ce9-xxxxx-xxxxx-xxxxxx",

tenantId: "x2f988bf-xxxx-xxxxx-xxxxx"

}

}

};

 

 

 

 

 

Enjoy!

 

Continue reading...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...