【问题标题】:Azure OAuth to function app issuesAzure OAuth 处理应用程序问题
【发布时间】: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=&lt;func-key-from-portal&gt; 附加到函数URL 或通过将x-functions-key: &lt;func-key-from-portal&gt; 标头与函数的每个请求一起传递来工作。使用功能键时不涉及 OAuth。

标签: azure restful-authentication


【解决方案1】:

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

后者是一种自包含的授权机制,通过附加来工作

?code=<func-key-from-portal>

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

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

函数的每个请求的标题。使用功能键时不涉及 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

【讨论】:

  • 感谢@evilSnobu 的解释。我觉得有道理。我确实看到,当您创建函数应用程序时,您可以将授权级别设置为匿名,并且在获取函数应用程序 url 时,它没有 code=... 在 url 中,它只是没有点击该代码是有效的身份验证.如果可以的话,我会请你喝咖啡:)
猜你喜欢
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
  • 2010-10-07
相关资源
最近更新 更多