我有一个 ASP.NET MVC 测试应用程序,它应该作为隐式 OIDC 客户端工作,具有来自 IdentityServer4 应用程序的访问和 id 令牌(两者都是 dotnet core 3.1)。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”的回调请求正常,前端通道用户代理在目标测试应用程序的 post-auth 端点结束,并且令牌可用。当我使用 ADFS 时,用户在 ADFS 中通过身份验证后,流程停止并显示 HTTP 500,并且命中“/signin-oidc”端点,并且 IdSvr 日志显示:
对路径发出的 CORS 请求:/signin-oidc from origin: <<ADFS_endpoint>> 但被忽略,因为路径不适用于允许的 IdentityServer CORS 端点 2020-09-20 12:34:01.157 +02:00 [INF] 来自错误RemoteAuthentication: 无法取消保护 message.State..
我已经根据IdentityServer4 docs设置了 CORS ,所以问题可能是其他问题?
在检查 KeyCloak 和 ADFS 对“/signin-oicd”的回调请求的差异时,我可以看到 ADFS 确实将 Referer/Origin 添加到请求中,而 KeyCloak 没有。除此之外,这两个请求似乎非常相似。
希望有人可以提供帮助。