我正在尝试使用服务原则从 Azure 函数访问批处理池并遇到我不理解的身份验证问题。使用服务原则的初始登录工作正常,但随后使用凭据访问批处理池返回 401。
下面是我的代码的精简版,关键点有注释
module.exports.dispatch = function (context) {
MsRest.loginWithServicePrincipalSecret('AppId', 'Secret', 'TennantId', function(err, credentials){
if (err) throw err;
// This works as it prints the credentials
context.log(credentials);
var batch_client = new batch.ServiceClient(credentials, accountUrl);
batch_client.pool.get('mycluster', function(error, result){
if(error === null)
{
context.log('Accessed pool');
context.log(result);
}
else
{
//Request to batch service returns a 401
if(error.statusCode === 404)
{
context.log('Pool not found yet returned 404...');
}
else
{
context.log('Error occurred while retrieving pool data');
context.log(error);
}
//'Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly.
context.res = { body: error.body.message.value };
context.done();
}
});
});
};
使用服务原理的初始登录如何没有问题,但它返回的凭据无法访问批处理池?
实际的错误是检查请求上的 auth 标头,我可以看到,并且 Authorization 标头甚至不存在。
我已经三次检查了批处理帐户的 Active Directory 访问控制,App ID 和机密是属于批处理帐户所有者的。任何想法接下来要尝试什么?