如何将AAD用于从Web应用程序到Web API应用程序的Azure版“Windows身份验证”?

时间:2016-10-18 19:50:04

标签: azure asp.net-web-api azure-active-directory

我有两个应用程序:

  1. MVC网站(通过OAuth保护的面向用户的Web应用程序 - > Google)
  2. Web API站点(“私有”Web服务)
  3. 这些托管在Azure的应用服务计划中。这些Web服务只能由我自己的应用程序使用 - 我不需要担心外部消费。其实我特意不想外面消费。我的网络应用程序正在将OAuth用于Google - 这在此无关紧要。

    因此,要了解我的问题的核心:我的网络服务目前在代码中没有身份验证/授权模型,但我不希望任何人公开使用它。在总体上,我们只使用Windows Auth通过IIS将其锁定,并将消费Web应用程序的服务帐户设置为以Windows Auth允许访问的用户身份运行。我想在Azure中做同等的事情。

    我知道Azure并不完全相同,但我不得不相信这是可能的。我甚至以我想要的方式使用“身份验证/授权”选项卡中的设置锁定了我的Web服务(我可以尝试导航到它,但是一旦我使用有效的组织帐户登录,我只能获得我的Swagger UI)。所以我的一半战斗已经解决,但我无法弄清楚如何做另一半 - 相当于设置我的消费MVC应用程序的服务帐户运行。

    我是否可以通过门户网站执行此操作,而无需专门针对此方案进行编码?对于使用上述锁定服务的安全部分,我真的很喜欢PaaS级或IaaS级解决方案。如果我在为这个问题提供PaaS或IaaS安全解决方案时走错了路,我也会对其他途径持开放态度。我并不反对改变代码 - 我们在RestSharp代码中确实有一个单行代码来使用Windows身份验证,但是大部分工作/配置都在代码之外,这就是我在这里的目的。

1 个答案:

答案 0 :(得分:3)

如果使用IaaS路径,您可以使用与在IIS上直接运行之前完全相同的方式托管VM中的应用程序。好处是你可以像以前一样运行,但是你仍然需要管理VM;即安装更新并注意其安全性。

但是,如果您想要一个PaaS解决方案,那么您需要修改前端应用程序的代码以将身份验证令牌传递给后端API,假设后端接受相同的身份验证前端。有关如何将身份验证信息从一个应用程序传递到另一个应用程序的示例,请参阅https://azure.microsoft.com/en-us/documentation/articles/app-service-api-dotnet-get-started/

或者,您可以使用应用标识来调用后端API。这样,调用与任何用户都无关,而是在应用程序的上下文中完成。有关如何设置,配置和所需代码的更多详细信息,请参阅https://github.com/Azure-Samples/active-directory-dotnet-daemon

如果您想允许您的用户使用他们的Google帐户登录,那么您可以使用应用标识(上面的第二个选项)处理您的API授权,假设API独立于请求用户身份。

直接通过Azure门户中的菜单启用Azure Web App的身份验证会在应用程序的前面添加Azure AD身份验证,并要求您将Azure AD生成的访问令牌传递给API以使其正常工作。