identityserver4 - 使用 ADFS 作为外部身份提供者的 IdentityServer4
问题描述
我有一个 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 没有。除此之外,这两个请求似乎非常相似。
希望有人可以提供帮助。
解决方案
ADFS 事件日志中显示什么错误?
问题也可能是 ADFS 4.0不支持 CORS?
推荐阅读
- c++ - C++ 应在标头和源代码中包含字符串
- angular - 当应用程序在 X 秒后未能获得当前位置时显示要使用的消息
- python - Python 3:以增量方式将多个字典写入 CSV 文件
- c# - 在 C# 中并行运行任务
- git - git-tfs 克隆错误:路径包含超过允许的 259 个字符
- c# - 按另一个数组中指定的顺序对数组进行排序
- hyperledger-fabric - Hyperledger Fabric CA 客户端的 fabric-ca-client-config.yaml 配置文件中“注册”字段的用途
- angular - 现有 Angular 4 项目中的离子框架
- sql-server - SQL SERVER中如何根据MonthStart_Date和MonthEnd_date多次复制表记录
- javascript - 来自 chrome 扩展的注入脚本多次返回值