我想从Azure函数(FuncA)代表当前用户在其他函数应用程序中调用另一个Azure函数(FuncB)。
两个应用程序中我都使用AAD作为身份验证提供程序。 FuncA的应用程序和FuncB的应用程序使用单独的应用程序注册,并且我已在FuncA的应用程序注册中将FuncB添加为“必需的许可”。
我正在尝试获取可以传递给Func B的承载令牌,但是AcquireTokenAsync失败,并显示“ AADSTS50000:发放令牌时出错”
这是我正在使用的代码:
var oldAuthToken = req.Headers.SingleOrDefault(_ => _.Key == "X-MS-TOKEN-AAD-ID-TOKEN").Value?.FirstOrDefault();
var userAssertion = new UserAssertion(oldAuthToken,
"urn:ietf:params:oauth:grant-type:jwt-bearer",
userName);
var clientId = "<application id of FuncA's App>";
var clientKey = "<Key of FuncA's App>";
var credential = new ClientCredential(clientId, clientKey);
string tenantId = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value;
var authority = $"https://login.microsoftonline.com/{tenantId}/";
var apiIdentifier = "<Func B's application id>";
var authContext = new AuthenticationContext(authority);
var result = await authContext.AcquireTokenAsync(apiIdentifier, credential, userAssertion);
编辑:如果我使用客户端凭据流(即,不要在代码的最后一行传递userAssertion),则该方法有效,但实际上我不希望该流成功-我想使用用户主体来控制访问。