我正在使用以下代码段对Azure目录进行身份验证:
//Client ID values
string applicationId = ***;
string applicationSecret = ***;
var client = new KeyVaultClient
(
async (authority, resource, scope) =>
{
var adCredential = new ClientCredential(applicationId, applicationSecret);
var authenticationContext = new AuthenticationContext(authority, null);
return (await authenticationContext.AcquireTokenAsync(resource, adCredential)).AccessToken;
}
);
这将创建一个KeyVaultClient,该目录已通过身份验证。
我的问题是,当我尝试将这个lambda函数移动到常规函数时,就像这样:
string authority = "";
ClientCredential adCredential = new ClientCredential(applicationId, applicationSecret);
AuthenticationContext authenticationContext = new AuthenticationContext(authority, null);
这就是我的问题似乎存在的地方。无法设置AuthenticationContext,因为权限字符串为空。但是这怎么可能在lambda函数中起作用而不在它之外,它看起来像lambda函数中的权限字符串也是空白的?有问题的项目是为测试而创建的,因此它没有任何可以使用的定义。有人知道发生了什么让lambda工作吗?
答案 0 :(得分:1)
没有lambda的代码等价于
public static async Task<string> AuthenticationCallback(string authority, string resource, string scope) {
var adCredential = new ClientCredential(applicationId, applicationSecret);
var authenticationContext = new AuthenticationContext(authority, null);
return (await authenticationContext.AcquireTokenAsync(resource, adCredential)).AccessToken;
}
var client = new KeyVaultClient(AuthenticationCallback);
请记住,KeyVaultClient
需要KeyVaultClient.AuthenticationCallback Delegate
作为参数。
不确定为什么要使用内联代码行替换lambda(相当于对函数的调用) - 当然,lambda将在稍后使用相关参数调用,而您的内联代码在站点上执行(在您的问题中没有明确说明)