Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何在本地测试Azure Active Directory(回复URL)_Asp.net_Azure_Azure Web App Service_Azure Active Directory - Fatal编程技术网

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

Asp.net 如何在本地测试Azure Active Directory(回复URL),asp.net,azure,azure-web-app-service,azure-active-directory,Asp.net,Azure,Azure Web App Service,Azure Active Directory,我已将test.NET Web Api升级为Azure应用程序服务,并在Azure Active Directory下注册了一个应用程序。然后我在本地做了一些测试,发现Azure想在登录后在应用注册中使用回复URL。应用程序注册中的回复URL是应用程序服务的URL。我的本地实例将类似于。在对Azure进行初始部署后,您应该如何在本地测试更改?我所能做的就是创建另一个应用程序注册以进行测试,使用我的本地主机回复URL,然后更新我的web.config以指向该开发应用程序注册。然后在再次发布之前,将

我已将test.NET Web Api升级为Azure应用程序服务,并在Azure Active Directory下注册了一个应用程序。然后我在本地做了一些测试,发现Azure想在登录后在应用注册中使用回复URL。应用程序注册中的回复URL是应用程序服务的URL。我的本地实例将类似于。在对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);
        }
    }

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

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

      return Task.FromResult(0);
    }
  }
  // ...
};
var openIdOptions=新的OpenIdConnectAuthenticationOptions
{
//...
通知=新的OpenIdConnectAuthenticationNotifications
{
RedirectToIdentityProvider=(上下文)=>
{
context.ProtocolMessage.RedirectUri=“”;
返回Task.FromResult(0);
}
}
// ...
};
该回复uri可以从web.config中提取,也可以使用
context.Request
动态生成


如果要在投入生产后使用不同的广告应用程序,可以使用两个应用程序,并将客户端id和密码放入web.config。

如果要在本地进行测试,只需添加localhost作为回复URL,并确保web.config也列出localhost


如果您尚未这样做,请参考此存储库:

应用注册允许多个回复URL。我尝试将localhost URL添加到回复URL列表中,这允许我在本地进行测试,但它也破坏了已发布的应用程序服务。当登录到应用程序服务URL时,重定向决定使用我添加的第二个URL(localhost),这显然失败了。你可以让你的应用程序告诉Azure AD返回哪个URL。请看这里关于redirect_uri的部分:我刚刚看到了同一篇文章,并打算指出最下面的一条评论,即发布后不要在回复URL列表中保留“localhost”。我不清楚的是如何使用那篇文章中的信息覆盖回复URL。我的授权代码基于不同的示例,我的回复URL中确实定义了“localhost”。正在向第一篇文章添加代码示例。您可以编辑您的主机文件,为某些域名或端口添加localhost重定向。最后,再次回到这篇文章,并确认这将起作用。我为replyURL应用程序注册设置添加了两个值(一个用于生产,一个用于本地测试),然后在Azure门户中更新了生产版本的应用程序配置设置。现在,我的本地web配置具有localhost,而生产具有Azure设置。