我想对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}");
但是上面的代码导致未经授权的呼叫。我不确定自己在做什么错。
答案 0 :(得分:3)
如果您的天蓝色功能认证级别为匿名或功能密钥,我们可以使用accesstoken直接访问您的天蓝色功能api。
我用您提到的方式获得了访问令牌。根据Azure资源门户网站(https://resources.azure.com/),默认的allowedAudiences为
"https://{functionAppName}.azurewebsites.net/.auth/login/aad/callback"
因此,我将https://{functionAppName}.azurewebsites.net/
添加为允许的辅助对象
然后,我可以直接使用访问令牌。我用邮递员测试。
我们还可以使用以下方法获取简单身份验证令牌。访问令牌是您获得的令牌。
Post https://xxx.azurewebsites.net/.auth/login/aad
Content-Type:application/json
{
"access_token":"eyJ0eXAiOix...rtf2H7lyUL-g34HVw"
}
之后,我们可以使用get令牌访问azure函数api
注意:标题为 x-zumo-auth :令牌
答案 1 :(得分:1)
关于此问题,您需要创建一个客户端应用程序来调用您的Azure函数。详细步骤如下。
为Azure功能配置Azure AD。请参阅https://docs.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings#auth。
ii。进入身份验证/授权并配置Azure AD
在azure门户上的AD中注册一个稳定的应用程序。有关更多详细信息,请参阅https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-v1-integrate-apps-with-azure-ad。
a。打开Azure Active Directory,然后单击“应用程序注册”,选择“新应用程序注册”。
b。输入您的名称和重定向URL,您可以编写任何内容。然后点击创建按钮。
c。设置->所需权限->添加,选择您在步骤1中使用的应用程序
d。选择权限->应用权限->选择->完成->授予权限->是e。创建密钥并复制
f。复制应用程序ID
测试
获取令牌:
METHOD: POST
Url : https://login.microsoftonline.com/your directory ID/oauth2/token
HEADERS: Content-Type : application/x-www-form-urlencoded
BODY:
grant_type+=client_credentials&resource+=”your Function APP ID”&client_id+++++=”the application that your register id”&client_secret+=”the key you create”
测试功能:
METHOD: Get
Url : https://<Functionname>.azurewebsites.net/api/HttpTriggerCSharp1?name=azure
HEADERS: Authorization : Bearer <access token>