首页 > 解决方案 > 尝试使用 KeyCloak 授权我的 API - 如果我正在调试,则无法授权并引发错误

问题描述

我正在尝试使用 KeyCloak 来验证我的 API 代码。我已经根据这里的示例实现了它,多次检查了我的参数,但是当我使用 Postman 拨打电话并调试代码时,出现以下错误:

无法从程序集“System.IdentityModel.Tokens.Jwt,版本=5.2.2.0,文化=中性,PublicKeyToken=31bf3856ad364e35”加载类型“System.IdentityModel.Tokens.ISecurityTokenValidator”。

此代码是 C# .net 4.7.1,NuGet 包是最新的稳定版(即 5.2.2)。KeyCloak 在我的机器上本地安装,并且正在运行并且可以访问。关于我可能做错了什么的任何想法,或者我如何找出无法通过身份验证的原因。

这是我的代码:

            app.UseCookieAuthentication(new CookieAuthenticationOptions{AuthenticationType = persistentAuthType});
        app.SetDefaultSignInAsAuthenticationType(persistentAuthType);
        app.UseKeycloakAuthentication(new KeycloakAuthenticationOptions
        {
            Realm = kcValues.Realm,
            ClientId = kcValues.Audience,
            ClientSecret = kcValues.AudienceSecret,
            KeycloakUrl = kcValues.Url,
            AuthenticationType = persistentAuthType,
            SignInAsAuthenticationType = persistentAuthType,
            AllowUnsignedTokens = false,
            DisableIssuerSigningKeyValidation = false,
            DisableIssuerValidation = false,
            DisableAudienceValidation = false,
            TokenClockSkew = TimeSpan.FromSeconds(2)
        });

kcValues 对象只保存 KeyCloak 引用——无论我是使用它们还是硬编码这些值都无关紧要。

编辑:经过更多探索,当我删除授权时,API 方法中没有用户 - 它是空白的。没有用户名或声明。所以看起来用户没有被传递给方法。

标签: c#oauthkeycloak

解决方案


好的,这花了很长时间才找到,但在某些时候我将它添加到我的代码中:

config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter("Bearer"));
  • 我认为这是让这个工作以前工作的尝试。删除它使其工作 - 至少它现在在未经授权时重定向到 keycloak。

推荐阅读