我正在尝试使用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方法中没有用户 - 它是空白的。没有用户名或声明。所以看起来用户没有被传递给方法。
答案 0 :(得分:0)
好的,这需要很长时间才能找到,但在某些时候我将其添加到我的代码中:
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter("Bearer"));