【发布时间】:2018-10-13 05:07:13
【问题描述】:
我有一个非常基本的函数应用程序,它接受 GET 并返回一些静态文本。最终,我希望它将 POST 正文写入队列,但为了简单起见,该函数只返回文本。如果我保持身份验证关闭,我可以加载 url 并在我的浏览器或邮递员中获得响应。如果我在函数应用程序中启用 aad auth 并创建一个简单的应用程序注册然后在我的浏览器中转到该站点,我会提示我进行身份验证,我可以交互登录;到目前为止不用担心。
我想使用密钥访问该功能以供应用程序使用而无需交互式登录,因此在应用程序注册中我转到密钥并生成一个。这就是我的问题开始的地方。如果我使用邮递员并使用我的应用程序 ID 和密钥配置 oauth,我可以获得一个令牌,我也通过直接对 https://login.microsoftonline.com//oauth2/token 进行 POST 并注意不记名令牌回复来验证这一点。但是,当我尝试使用不记名令牌访问我的函数应用程序(通过手动添加授权标头或让邮递员从 oauth 2.0 表单中添加它)时,我总是被 401 拒绝,说明“您无权查看此目录”或页面。当我对我的函数应用执行 GET 操作时。有人可以指出我正确的方向吗?提前致谢。
来自登录网址的示例回复
{
"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 对带有令牌的函数应用的响应
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 集成与功能键混合使用。后者是一种自包含的授权机制,通过将
?code=<func-key-from-portal>附加到函数URL 或通过将x-functions-key: <func-key-from-portal>标头与函数的每个请求一起传递来工作。使用功能键时不涉及 OAuth。
标签: azure restful-authentication