尝试使用 KeyCloak 授权我的 API - 如果我正在调试,授权失败并抛出错误

Trying to authorise my API using KeyCloak - fails to authorise and throws an error if I am debugging

我正在尝试使用 KeyCloak 来验证我的 API 代码。我已经按照样例实现了 here 多次检查我的参数,但是当我使用 Postman 进行调用并调试代码时,出现以下错误:

Could not load type 'System.IdentityModel.Tokens.ISecurityTokenValidator' from assembly 'System.IdentityModel.Tokens.Jwt, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.

此代码是 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 方法中没有用户 - 它是空白的。没有用户名或声明。所以看起来用户没有被传递给方法。

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

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