尝试使用 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。
我正在尝试使用 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。