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

时间:2018-05-16 11:16:00

标签: c# oauth keycloak

我正在尝试使用KeyCloak来验证我的API代码。我已根据样本here多次检查我的参数来实现它,但是当我使用Postman进行调用并调试代码时,我收到以下错误:

  

无法加载类型' System.IdentityModel.Tokens.ISecurityTokenValidator'来自assembly&System; Identity.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方法中没有用户 - 它是空白的。没有用户名或声明。所以看起来用户没有被传递给方法。

1 个答案:

答案 0 :(得分:0)

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

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