使用ADFS作为外部身份提供程序的IdentityServer4

时间:2020-09-20 11:03:13

标签: identityserver4 openid-connect adfs4.0

我有一个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没有。除此之外,这两个请求似乎非常相似。

希望有人可以提供帮助。

2 个答案:

答案 0 :(得分:0)

如果您看到来自ADFS的Origin标头,那么我想您需要将ADFS域添加到允许的CORS端点列表中。

答案 1 :(得分:0)

ADFS事件日志中显示什么错误?

问题还可能是ADFS 4.0 does not support CORS