仅允许对Azure应用程序的1个端点进行公共访问

仅允许对Azure应用程序的1个端点进行公共访问,azure,azure-active-directory,azure-functions,Azure,Azure Active Directory,Azure Functions,我正在构建一个小的Azure无服务器应用程序,它有3个不同的函数,由3个不同的HTTP事件触发。我将每个函数的“授权级别”设置为“匿名”。然后我设置身份验证(在应用程序级别)以链接到我的Azure Active Directory。虽然我花了一些时间才弄明白这一部分,但最终它似乎发挥了巨大的作用。问题是,现在我需要为这些函数中的每一个传递承载令牌,而我需要其中一个能够公开访问。 有没有办法不需要我将一个功能拆分为一个单独的Azure应用程序?不确定您是如何实现应用程序级安全性的,但在普通OWIN

我正在构建一个小的Azure无服务器应用程序,它有3个不同的函数,由3个不同的HTTP事件触发。我将每个函数的“授权级别”设置为“匿名”。然后我设置身份验证(在应用程序级别)以链接到我的Azure Active Directory。虽然我花了一些时间才弄明白这一部分,但最终它似乎发挥了巨大的作用。问题是,现在我需要为这些函数中的每一个传递承载令牌,而我需要其中一个能够公开访问。
有没有办法不需要我将一个功能拆分为一个单独的Azure应用程序?

不确定您是如何实现应用程序级安全性的,但在普通OWIN或核心应用程序中,如果在授权标头中找不到有效的令牌(没有标头或令牌无效),则令牌处理程序将仅将未经身份验证的请求传递给控制器方法。然后由方法决定是处理请求还是拒绝未经授权。您可以相应地更改您的令牌验证器吗?(事实上,如果您的API可以接收不同发行人(AAD、B2C、Ping)发行的代币,您可以配置多个代币处理程序,每个代币处理程序都将尝试va

我认为URL授权规则在这里应该有所帮助

对于您的场景,启用身份验证/授权并允许在门户中进行匿名访问。接下来,您需要在站点的根目录中创建一个
Authorization.json
文件,并定义两个路由:

  • 在根目录下禁用匿名访问
  • 启用匿名函数URL的匿名访问
authorization.json

{
  "routes": [{
      "path_prefix": "/",
      "policies": { "unauthenticated_action": "RedirectToLoginPage" }
    },{
      "path_prefix": "/api/HttpTrigger1",
      "policies": { "unauthenticated_action": "AllowAnonymous" }
    }]
}


注意:请确保在启用身份验证/授权并在wwwroot文件夹中添加Authorization.json文件后停止/启动功能应用程序。

令牌验证器?我从未配置令牌验证器。我转到->“平台功能”->“身份验证/授权”并指定“请求未通过身份验证时要采取的操作:使用Azure Active Directory登录"然后将添加身份验证提供程序指向我的AAD,该AAD已配置1个用户和客户端凭据。我的代码中从未发生任何身份验证。一切都由Azure处理。如果授权标头丢失或无效,我的Azure功能将不会以任何方式触发抱歉,我误解了应用程序上的n级”-假定您是在代码中而不是在服务(“EasyAuth”)中进行验证的。我不相信有任何方法可以绕过该验证:它对所有函数都是打开的,或者对所有函数都是关闭的。在代码中,您将使用类似JWTTokenHandler类的东西并进行自己的验证(仅在需要的函数中)。当我的发行版中包含authorization.json文件时,当我的Azure build加载功能网站时,我收到一个错误?“由于发生内部服务器错误,无法显示页面。”我也遇到过同样的问题。让某些函数匿名肯定是一种常见的情况。我不知道他们为什么没有想到一种正式的方法来实现这一点!你找到解决方案了吗?