IdentityServer4和Azure AD - 输入凭据后,将空白页404添加到login.live

时间:2017-10-05 19:18:16

标签: azure-active-directory openid-connect identityserver4

我正在尝试将Azure AD设置为开发环境中IdentityServer4的外部提供程序。谷歌和Facebook提供商已经成功连接起来。 我被定向到login.microsoft.com上的登录页面,在那里我输入我的登录ID并选择一个MS帐户,然后它指示我作为空白页面登录login.live.com(404)而不是重定向回我的IdentityServer实例

我尝试了很多东西,但没有运气。

我是否需要在Azure中启用企业应用程序?

我错过了什么吗?

IdentityServer网址 Guide to deploying 3rd party JARs to remote repository

IdentityServer网址 http://localhost:5000

http://localhost:47740

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

...
app.UseOpenIdConnectAuthentication(CreateAzureAdOptions(clientId, tenantId));
...

 public static OpenIdConnectOptions CreateAzureAdOptions(string clientId, string tenentId)
    {
        return new OpenIdConnectOptions
        {
            DisplayName = "Azure Active Directory",
            AuthenticationScheme = "Azure",
            ClientId = clientId,
            Authority = string.Format(CultureInfo.InvariantCulture, "https://login.microsoftonline.com/{0}", tenentId),
            ResponseType = "id_token",
            Scope = { "openid" },
            SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme,
            AutomaticChallenge = true,
            AutomaticAuthenticate = true,
            RequireHttpsMetadata = false,
            TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = false
            }
        };
    }

1 个答案:

答案 0 :(得分:2)

这可能与从AAD返回时url的大小有关。这实际上是404.15 IIS特定的状态代码。如果您从外部身份提供商返回了大量索赔(即个人资料图片base64),那么您将始终在网址长度HTTP Error 404.15 - query url too long RSS中达到上限。

IdenitityServer4在文档中有一个主题,通过使用下面的分布式缓存来解决此问题。它位于Sign-in with External Identity Providers - State, URL length, and ISecureDataFormat

<强>抽象

  

幸运的是,IdentityServer为您提供了此实现,由在DI容器中注册的IDistributedCache实现(例如标准MemoryDistributedCache)提供支持。要使用IdentityServer提供的安全数据格式实现,只需在配置DI时调用AddOidcStateDataFormatterCache上的IServiceCollection扩展方法即可。如果未传递任何参数,则配置的所有OpenID Connect处理程序将使用IdentityServer提供的安全数据格式实现。