Azure AD回复网址:使用openid connect auth

时间:2017-10-24 18:47:55

标签: asp.net-mvc azure-active-directory openid-connect

我正在尝试构建一个不允许匿名用户访问的ASP.NET MVC应用程序(除了要向经过身份验证的用户显示的自定义URL之外允许使用该应用程序。)

现在,我已经在azure门户网站(portal.azure.com)注册了我的应用,并且我想使用多个网址。我添加了两个条目:

  1. https://localhost/test
  2. https://www.test.com
  3. 我使用以下代码在启动时配置身份验证:

    public void ConfigureAuth(IAppBuilder app) {
        app.SetDefaultSignInAsAuthenticationType(
              CookieAuthenticationDefaults.AuthenticationType);
        app.UseCookieAuthentication(new CookieAuthenticationOptions());
        app.UseOpenIdConnectAuthentication(
          new OpenIdConnectAuthenticationOptions {                                                                                        
              ClientId = clientId,                                                                                        
              Authority = authority,                                                                                        
              PostLogoutRedirectUri = postLogoutRedirectUri,                                                                                        
              Notifications = new OpenIdConnectAuthenticationNotifications {
                SecurityTokenValidated = VerificaUtilizadorAutenticado,
                AuthenticationFailed = TrataErroAutenticacao
             }
         });
    }
    

    一切似乎都运行良好,但在发布应用程序后,似乎我只能使用其中一个URI。我已经搜索过,似乎我可以使用OpenIdConnectAuthenticationOptions的RedirectUri属性来设置回复网址。所以,我已经尝试将其添加到设置中:

    RedirectUri = "https://localhost/test",
    

    不幸的是,这样做会打破一切,浏览器会卡在我的应用和MS之间。登录页面。由于用户已登录,因此会将用户重定向回我的应用程序。但是,似乎设置RedirectUri prop不会生成应用程序的身份验证cookie,因此它会将用户发送回登录页面。

    如果我删除了RedirectUri,那么即使我尝试访问https://www.test.com网络应用,我也会被重定向到https://localhost/test网站。

    我不确定是什么,但我错过了什么......有人可以帮忙吗?

    感谢。

    路易斯

2 个答案:

答案 0 :(得分:3)

当您发送想要登录AAD登录端点(https://login.microsoftonline.com)的用户时,您需要指定将用户(和授权码)重定向回的位置。

您可以通过两种方式指定:

  1. 您必须在应用的主要配置中配置回复网址,作为应用创建的一部分。
  2. 您必须在登录网址中指定一个回复网址,该网址与您配置的其中一个网址完全匹配:

    来自Authorization Code Grant Flow documentation

    https://login.microsoftonline.com/{tenant}/oauth2/authorize?
    client_id=6731de76-14a6-49ae-97bc-6eba6914391e
    &response_type=code
    &redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F   <-- this guy
    &response_mode=query
    &resource=https%3A%2F%2Fservice.contoso.com%2F
    &state=12345
    
  3. 如果您未在登录网址中指定重定向URI,则该用户将被重定向到您应用注册中指定的第一个网址。这听起来不是那么糟糕,但是知道AAD将您的回复URL视为无序列表,因此根据您点击的服务器或数据的复制方式,您可能会在不同的登录尝试中观察到不同的重定向行为。这就是为什么始终在登录端点中指定redirect_uri参数非常重要。

    如果您使用ADAL libraries进行身份验证而不是示例代码中显示的库,我觉得您的许多问题都可以解决,但如果您不想使用这些,那么您需要分享更多细节,如身份验证过程的HTTP跟踪。

答案 1 :(得分:2)

好的,经过一番挖掘后,我注意到设置redirecturi时遇到的问题是我失踪了......斜线(/)。因此,将/添加到门户网站上定义的URL并将其放在选项对象的重定向文件中就足以使其适用于不同的URI ...