如何在本地验证连接到Azure应用服务?

7

有很多教程可以了解如何配置给定的Azure App Service实例的身份验证属性:

Api Apps

扩展应用程序服务身份验证/授权

有关配置Azure服务器端属性的指南:

AAD

FaceBook

Twitter

Google

Microsoft Account

我认为这些都是在我们的Azure App Service组件前面的服务器网关上设置属性。这种方法很好,因为你可以通过将用户浏览器定向到~/.auth/login/XYZ来简单地启动登录流程。
然而,在开发时,我无法弄清楚我应该如何对其中任何一个进行身份验证,通过localhost在我的PC上本地运行MVC应用程序和API应用程序。我没有本地运行的网关。没有端点侦听localhost/.auth/login/XYZ。
那么,情况怎样?你如何在那里进行身份验证?具体来说,你如何以这样一种方式开发,使得你将要在本地完成的任何工作都可以发布到你的Web和Api应用程序中,并且在Azure的App Service生态系统内工作的身份验证体验呢?

可能类似于问题https://dev59.com/Gn3aa4cB1Zd3GeqPhb98 - Gandhali Samant
@GandhaliSamant 我认为这不是同一件事情。我的问题是关于2015年3月发布的Azure应用服务。这种新方法使得你的Azure资产坐落在一个由Microsoft Managed Gateway管理的后台,为你执行oAuth“舞蹈”操作。在Azure上非常好用。但在Web应用或API应用的开发阶段,代码运行在本地时,尚不清楚是否已经存在任何可以帮助/处理它的东西。 - Nate Jackson
您可以拥有2个AD应用程序。一个用于生产,另一个用于开发。然后,在Web应用程序的应用设置中保留您的凭据信息,例如客户端ID、密钥、租户ID和登录URL。同样,在本地环境中,您可以将凭据保存在系统环境中。现在,您可以从系统环境获取凭据,而不是从web.config获取。希望这正是您想要的。 - Jack Zeng
2个回答

3
根据这篇文章,唯一的方法是编写一些仅在开发环境下运行的代码,使用与生产环境中Azure提供的相同的声明来伪造IPrincipals
  • 在web.config中创建一个appSetting值,用于标识应用程序是否处于本地开发模式,例如:

    <add key="EnableLocalLogin" value="true" />
  • 在Azure门户应用程序设置中将此值定义为false。该值将覆盖在web.config中配置的值。

  • 创建另一个登录选项,仅在EnableLocalLogin appSetting为true时显示。
  • "作为本地开发人员登录"按钮只是调用一个操作方法,该方法:
    • 检查应用程序是否处于本地开发模式。
    • 如果是,则构造一个具有适当声明的IPrincipal类的实例,并调用ASP.Net Identity系统将身份分配给当前上下文。

是的。我发现微软直接没有提供任何内容。虽然我没有使用你回答中Glav所用的相同代码,但我们最终还是自己编写了IPrincipal,并在我们的代码中添加了一些#if DEBUG块。虽然不理想,但迄今为止,17个月过去了,我没有因此失眠。 - Nate Jackson
就我所知 - 并非每个应用程序都是用C#编写的,也不是每个应用程序都使用dotnet。我现在面临的挑战是在一个混合的NodeJS应用程序上,同时在服务器端和客户端运行 - 同时使用EasyAuth。我还需要使用相同的机制来授权后端的Web API调用。 - undefined
并不是每个应用都是用C#/.NET编写的。当然,回答似乎正是楼主所需要的,但不幸的是,它没有预料到七年后其他人的需求。 - undefined
看起来你可能有一个在这个问题被提问和回答时还不存在的选项:https://hajekj.net/2020/05/01/running-easyauth-locally/。但除此之外,Easy Auth在本地使用起来应该和以往一样容易:https://learn.microsoft.com/en-us/azure/app-service/tutorial-auth-aad?pivots=platform-linux#how-do-i-test-this-authentication-on-my-local-development-machine。 - undefined

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接