我有一个ASP.NET MVC测试应用程序,它应该作为一个隐式OIDC客户端从IdentityServer4应用程序获得访问和id令牌(两者都是DOTNetCore3.1)。IdSvr配置了几个外部OIDC内部流离失所者:一个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“的回调请求很好,前端通道用户代理结束于目标测试应用程序的后auth端点,令牌可用。当我使用ADFS时,在ADFS中对用户进行身份验证之后,流就会用HTTP 500停止,并命中"/signin-oidc“端点,IdSvr日志读取:
CORS请求路径: /signin-oidc从原产地:<>但被忽略,因为path不是针对允许的IdentityServer CORS端点2020-09-20 12:34:01.157 +02:00来自RemoteAuthentication:无法解除保护message.State的INF错误。
我已经根据IdentityServer4文档设置了CORS,所以问题可能是别的什么?
在检查对"/signin-oicd“的KeyCloak和ADFS回调请求的差异时,我可以看到,ADFS确实向请求添加了Referer/oicd,而KeyCloak没有添加。除此之外,这两项要求似乎非常相似。
希望有人能帮忙。
发布于 2020-09-20 16:00:34
如果您看到来自ADFS的Origin,那么我猜您需要将ADFS域添加到允许的CORS端点列表中。
发布于 2020-09-20 21:22:45
ADFS事件日志中显示了什么错误?
问题还可能是ADFS4.0 不支持CORS
https://stackoverflow.com/questions/63978258
复制相似问题