我创建了一个示例Azure函数,没有什么复杂的,只是一个简单的Hello,World。已向AAD注册了一个应用程序,并且已为AAD配置了该功能身份验证,并且将“授权级别”设置为“匿名”。使用浏览器,我可以导航到功能URL,要求其登录并按预期获得结果。当使用C#客户端时,获得令牌(与浏览器中使用的令牌相同)后,我得到401未经授权的结果。我也尝试过Postman取得相同的结果。 401“您无权查看此目录或页面。”
var clientCredential = new ClientCredential("16c17039-xxxx-4514-xxxx-fc68a97fxxxx", "00000009q_XwxPP]oyDo8UqZfAsxxxx");
AuthenticationContext context = new AuthenticationContext("https://login.microsoftonline.com/xxxxx.onmicrosoft.com", false);
AuthenticationResult authResult = await context.AcquireTokenAsync(
"16c17039-xxxx-4514-xxxx-fc68a97fxxxx",
clientCredential);
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", authResult.AccessToken);
var response = await client.GetAsync("https://xxxx.azurewebsites.net/api/Sample?code=xxxxx");
response.EnsureSuccessStatusCode();
很明显,我缺少一些配置,但是似乎找不到问题所在。
答案 0 :(得分:0)
我没有在你这边重现你的问题。这是我的步骤供您参考。
1。使用http触发器创建函数
2。通过使用Express模式启用App Service身份验证。
3。使用C#调用函数url
None
4。在vs中查看结果
代码中唯一的区别是我使用static void Main(string[] args)
{
var clientCredential = new ClientCredential("{app_client_id}", "{app_client_secret}");
AuthenticationContext context = new AuthenticationContext("https://login.microsoftonline.com/xx.onmicrosoft.com", false);
AuthenticationResult authResult = context.AcquireTokenAsync(
"{app_client_id}",
clientCredential).Result;
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", authResult.AccessToken);
var response = client.GetAsync("https://tonytestad.azurewebsites.net/api/HttpTrigger1?code=LoyOi4C&name=123").Result;
response.EnsureSuccessStatusCode();
}
来获得结果。