我有一个ASP.NET MVC测试应用程序,该应用程序应作为隐式OIDC客户端使用,具有来自IdentityServer4应用程序(均为dotnet核心3.1)的访问和ID令牌。 IdSvr配置了两个外部OIDC IdP:一个KeyCloak实例和一个ADFS(4.0)同上。
我的ADFS IdSvr配置如下:
.AddOpenIdConnect("oidc_adfs", "ADFS", options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
options.SignOutScheme = IdentityServerConstants.SignoutScheme;
options.SaveTokens = true;
options.Authority = "<<ADFS endpoint>>";
options.ClientId = "<<ADFS defined client id>>";
options.ClientSecret = "<<ADFS defined client secret>>";
options.Resource = "<<My resource identifier in ADFS>>";
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
RoleClaimType = "role"
};
options.ResponseType = "id_token";
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("openid");
options.Scope.Add("profile");
});
在KeyCloak情况下,一切正常-对IdSvr的“ / signin-oidc”的回调请求正常,并且前通道用户代理在目标测试应用程序的验证后终结点处终止,并且令牌可用。 当我使用ADFS时,在ADFS中对用户进行身份验证后,流以HTTP 500停止,并且命中了“ / signin-oidc”端点,并且IdSvr日志显示为:
CORS请求从原点发出的路径为:/ signin-oidc: << ADFS_endpoint >>,但由于路径不是用于 允许IdentityServer CORS端点2020-09-20 12:34:01.157 +02:00 [INF]来自RemoteAuthentication的错误:无法取消保护 message.State ..
我已经根据IdentityServer4 docs设置了CORS,所以问题可能出在其他地方吗?
在检查KeyCloak和“ / signin-oicd”的ADFS回调请求中的差异时,我可以看到ADFS确实将Referer / Origin添加到请求中,而KeyCloak没有。除此之外,这两个请求似乎非常相似。
希望有人可以提供帮助。
答案 0 :(得分:0)
如果您看到来自ADFS的Origin标头,那么我想您需要将ADFS域添加到允许的CORS端点列表中。
答案 1 :(得分:0)
ADFS事件日志中显示什么错误?
问题还可能是ADFS 4.0 does not support CORS?