如何在Azure函数中实现按代收费流程?出现“ AADSTS50000:发行令牌时出错”失败

时间:2019-01-23 16:41:53

标签: azure authentication asp.net-core oauth-2.0 azure-active-directory

我想从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),则该方法有效,但实际上我不希望该流成功-我想使用用户主体来控制访问。

0 个答案:

没有答案