使用Azure Active Directory的Azure功能身份验证

时间:2018-11-27 12:41:21

标签: c# azure oauth-2.0 azure-active-directory azure-web-app-service

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

但是上面的代码导致未经授权的呼叫。我不确定自己在做什么错。

2 个答案:

答案 0 :(得分:3)

如果您的天蓝色功能认证级别为匿名功能密钥,我们可以使用accesstoken直接访问您的天蓝色功能api。

我用您提到的方式获得了访问令牌。根据Azure资源门户网站(https://resources.azure.com/),默认的allowedAudiences为

  "https://{functionAppName}.azurewebsites.net/.auth/login/aad/callback"

因此,我将https://{functionAppName}.azurewebsites.net/添加为允许的辅助对象

enter image description here

然后,我可以直接使用访问令牌。我用邮递员测试。

enter image description here

我们还可以使用以下方法获取简单身份验证令牌。访问令牌是您获得的令牌。

Post https://xxx.azurewebsites.net/.auth/login/aad
Content-Type:application/json
{
    "access_token":"eyJ0eXAiOix...rtf2H7lyUL-g34HVw"
}

enter image description here

之后,我们可以使用get令牌访问azure函数api

enter image description here

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

答案 1 :(得分:1)

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

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

    i。转到“集成触发器”,将“授权级别”设置为“匿名” enter image description here

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

    enter image description here

  2. 在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

  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>

enter image description here enter image description here enter image description here