【发布时间】:2018-11-27 12:41:21
【问题描述】:
我想在 Azure Functions 上启用身份验证。因此,我决定使用 EasyAuth(平台功能下的身份验证/授权链接)并成功配置身份验证过程。
当我手动登录到 Azure Function 终结点时,身份验证有效。但是,当我尝试以编程方式访问 API 时,无需任何手动用户干预,就会遇到身份验证问题:
Status Code:401, Unauthorized
我使用以下代码使用 clientID 和 clientSecret 从 AAD 获取访问令牌:
AuthenticationContext context = new AuthenticationContext("https://login.windows.net/<tenant-id>");
string key = "<client-secret>";
ClientCredential cc = new ClientCredential("<client-id>", key);
AuthenticationResult result = context.AcquireTokenAsync("https://<AzureFunctionAppName>.azurewebsites.net/", cc).Result;
return result.AccessToken;
然后我尝试将在标头中收到的访问令牌发送到我的 API 的新请求:
var content = "{\"on\":true, \"sat\":254, \"bri\":254, \"hue\":10000}";
var AADToken = GetS2SAccessToken();
HttpClient Client = new HttpClient();
Client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AADToken);
var foo = Client.PostAsync("https://<AzureFunctionAppName>.azurewebsites.net/.auth/login/aad", new StringContent(content.ToString())).Result;
Console.WriteLine($"result: {foo}");
但是上面的代码会导致未经授权的调用。我不确定我做错了什么。
【问题讨论】:
标签: c# azure oauth-2.0 azure-active-directory azure-web-app-service