通过AAD身份验证在C#客户端中调用Azure函数

时间:2020-04-15 16:33:49

标签: c# azure

我创建了一个示例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();

很明显,我缺少一些配置,但是似乎找不到问题所在。

1 个答案:

答案 0 :(得分:0)

我没有在你这边重现你的问题。这是我的步骤供您参考。

1。使用http触发器创建函数

enter image description here

2。通过使用Express模式启用App Service身份验证。

enter image description here

3。使用C#调用函数url

None

4。在vs中查看结果

enter image description here

代码中唯一的区别是我使用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(); } 来获得结果。