繁体   English   中英

使用 Azure Active Directory 的 Azure Function 身份验证

[英]Azure Function authentication using Azure Active Directory

我想在 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}");

但是上面的代码导致了未经授权的调用。 我不确定我做错了什么。

如果您的azure function 身份验证级别是匿名的或者还需要function key ,我们可以使用accesstoken 直接访问您的azure function 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 token访问azure函数api

在此处输入图片说明

注意:标题是x-zumo-auth :令牌

关于这个问题,您需要创建一个客户端应用程序来调用您的 Azure 函数。 详细步骤如下。

  1. 为 Azure 函数配置 Azure AD。 请参阅https://docs.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings#auth

    一世。 转到触发器的集成,将授权级别设置为匿名在此处输入图片说明

    ii. 进入身份验证/授权并配置 Azure AD

    在此处输入图片说明

  2. 在 azure 门户上的 AD 中注册客户端应用程序。 有关更多详细信息,请参阅https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-v1-integrate-apps-with-azure-ad

    一种。 打开 Azure Active Directory 并单击应用程序注册,选择新应用程序注册。

    输入您的姓名和重定向 URL,您可以写任何内容。 然后点击创建按钮。

    C。 设置->所需权限->添加,选择你在step1中使用的应用

    d. 选择权限-> APPLICAION PERMISSIONS -> 选择-> 完成-> 授予权限-> 是

    e. 创建一个密钥并复制它

    F。 复制应用程序 ID

  3. 测试

获取令牌:

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>

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM