如何在本地测试 Azure Active Directory(回复 URL)

pre*_*elb 7 asp.net azure azure-active-directory azure-web-app-service

我已将测试 .NET Web Api 提升到 Azure 应用程序服务,并在 Azure Active Directory 下包含应用程序注册。然后我去本地做了一些测试,发现Azure希望在登录后在应用程序注册中使用回复URL。应用程序注册中的回复 URL 是应用程序服务的 URL。我的本地实例类似于https://localhost:44377/。在初始部署到 Azure 后,您应该如何在本地测试更改?我能想到的就是创建另一个应用程序注册进行测试,使用我的本地主机回复 URL,然后更新我的 web.config 以指向该开发应用程序注册。然后在再次发布之前,将 web.config 更新回其他应用程序注册。

下面是我用于身份验证的代码,它基于一个简单的 MVC 项目的标准模板。应用程序注册值用于重定向 URL,但也许我应该在测试时覆盖下面的这些值?

      public class AccountController : Controller
{
    public void SignIn()
    {
        // Send an OpenID Connect sign-in request.
        if (!Request.IsAuthenticated)
        {
            HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" },
                OpenIdConnectAuthenticationDefaults.AuthenticationType);
        }
    }
Run Code Online (Sandbox Code Playgroud)

Jas*_*n P 1

您可以通过指定要在身份验证请求中使用的回复 URL 来拥有多个回复 URL。您可以在 Startup.cs 中配置身份验证时执行此操作。您需要将 RedirectUri 添加到您的OpenIdConnectAuthenticationOptions.Notifications.RedirectToIdentityProvider

var openIdOptions = new OpenIdConnectAuthenticationOptions
{
  //...
  Notifications = new OpenIdConnectAuthenticationNotifications
  {
    RedirectToIdentityProvider = (context) =>
    {
      context.ProtocolMessage.RedirectUri = "<current reply uri>";

      return Task.FromResult(0);
    }
  }
  // ...
};
Run Code Online (Sandbox Code Playgroud)

该回复 uri 可以从您的 web.config 中提取或使用动态生成context.Request

如果您想在生产后使用不同的 AD 应用程序,您可以拥有两个应用程序,并将客户端 ID 和密钥放入 web.config 中。