Azure OAuth 功能应用程序问题

Azure OAuth to function app issues

我有一个非常基本的功能应用程序,它接受 GET 和 returns 一些静态文本。最终我希望它将 POST body 写入 queue 但为了简单起见,函数只是 returns 文本。如果我关闭身份验证,我可以加载 url 并在我的浏览器或邮递员中获得响应。如果我在函数应用程序中启用 aad 身份验证并创建一个简单的应用程序注册,然后在我的浏览器中转到该站点,我会收到身份验证提示,并且我可以交互式登录;到目前为止不用担心。

我想使用密钥访问该功能,以便在没有交互式登录的情况下使用应用程序,因此在应用程序注册中,我转到密钥并生成一个。这是我的问题开始的地方。如果我使用邮递员并使用我的应用程序 ID 和密钥配置 oauth,我可以获得一个令牌,我也通过直接对 POST 到 https://login.microsoftonline.com//oauth2/token 并记录不记名令牌回复来验证这一点.但是,当我尝试使用不记名令牌访问我的功能应用程序时(通过手动添加授权 header 或让邮递员从 oauth 2.0 表单添加它)我总是被 401 拒绝 'You do not have permission to view this directory or page.' 当我对我的功能应用程序执行 GET。有人能指出我正确的方向吗?提前致谢。

来自登录的回复示例 url

{
    "token_type": "Bearer",
    "expires_in": "3599",
    "ext_expires_in": "0",
    "expires_on": "1525312644",
    "not_before": "1525308744",
    "resource": "https://<siteaddress>.azurewebsites.net/",
    "access_token": "eyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..etc..."
}

使用令牌对函数应用程序获取响应

GET /api/t2 HTTP/1.1
> Host: <sitename>.azurewebsites.net
> Authorization: Bearer eyxxxxxxxxxxxxxxxxxxxxxxxxxxxx.....etc....
> Accept: */*
< HTTP/1.1 401 Unauthorized
< Content-Length: 58
< Content-Type: text/html
< WWW-Authenticate: Bearer realm="<sitename>.azurewebsites.net" authorization_uri="https://login.windows.net/<tenantid>/oauth2/authorize" resource_id="<app reg id>"
< X-Powered-By: ASP.NET
< Date: Thu, 03 May 2018 01:12:43 GMT

我相信您将 Azure AD 集成与 function keys (API key authorization) 混合使用。

后者是一种self-contained授权机制,通过附加

来工作
?code=<func-key-from-portal>

到函数 URL,或通过传递一个

x-functions-key: <func-key-from-portal>

header 对函数的每个请求。使用功能键时不涉及 OAuth。

示例:

GET /api/get-issues HTTP/1.1
Host: {funcapp}.azurewebsites.net
User-Agent: ajax-library-of-the-day
x-functions-key: rkW0PqT.....zcUBQ==

GET /api/get-issues?code=rkW0PqT.....zcUBQ== HTTP/1.1
Host: {funcapp}.azurewebsites.net
User-Agent: ajax-library-of-the-day