我正在尝试将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
...
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
}
};
}
答案 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提供的安全数据格式实现。