【问题标题】:Azure active directory authentication Function AppAzure Active Directory 身份验证功能应用程序
【发布时间】:2019-11-18 18:14:29
【问题描述】:

我正在通过以下 URL 为函数应用程序执行 azure Active Directory 身份验证 https://www.c-sharpcorner.com/article/secure-azure-function-with-azure-ad/

但是当我通过功能应用程序点击我的网址时 它是给未经授权的,我需要做任何其他事情吗

请找到以下屏幕截图。

感谢任何帮助

【问题讨论】:

    标签: azure-active-directory azure-functions


    【解决方案1】:

    如果您的 azure 函数身份验证级别是匿名的或还需要函数密钥,我们可以使用访问令牌直接访问您的 Azure 函数 API。详细步骤如下。

    1. 为 Azure Function 配置 Azure AD。请参考https://docs.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings#auth
    2. 获取访问令牌

    我使用以下代码使用 clientID 和 clientSecret 从 AAD 获取访问令牌:

    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 url”&client_id+++++=”the application that your register  id”&client_secret+=”the key you create”
    

    请注意,根据 Azure 资源门户 (https://resources.azure.com/),默认 allowedAudiences 是

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

    所以我将https://{functionAppName}.azurewebsites.net/ 添加为允许的观众。

    然后我可以直接使用访问令牌。我用 Postman 测试过:

    请注意,如果你的天蓝色函数认证级别不是匿名的,你需要添加函数密钥

    【讨论】:

    • 我将网址添加到允许的观众并使用邮递员;我仍然收到消息“您无权查看此目录或页面”。是否有可能我从 AAD 获得了错误的 access_token?
    • 您好,我能够解决问题。问题在于生成的 AAD 令牌。在 context.AcquireTokenAsync("https://.azurewebsites.net/", cc).Result 中传递应用 ID 而不是“https://.azurewebsites.net/”
    • 上面提到的URL中的小疑问login.microsoftonline.com/your目录ID/oauth2/token“你的目录ID”是必须的
    • 目录ID是必须的。如果您不知道您的目录 ID,您可以使用“common”。更多详情请参考docs.microsoft.com/en-us/azure/active-directory/develop/…
    • 您好,我知道租户 ID,但我们不想使用该 ID 生成令牌。还有其他选择吗?你在上面的陈述中提到“常见”我可以知道那是什么吗?我已经关注了你在上述声明中提到的 URL,但我没有得到任何东西