c# - 尝试使用 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 方法中没有用户 - 它是空白的。没有用户名或声明。所以看起来用户没有被传递给方法。
解决方案
好的,这花了很长时间才找到,但在某些时候我将它添加到我的代码中:
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter("Bearer"));
- 我认为这是让这个工作以前工作的尝试。删除它使其工作 - 至少它现在在未经授权时重定向到 keycloak。
推荐阅读
- symfony - 打开失败需要/symfony/phpunit-bridge/bootstrap.php
- c# - 如何将精灵旋转 90°
- apache-spark - 如何计算 Spark 集群或 MPI 集群中的数据通信成本和工作负载平衡率?
- json - 处理包含数组或值的 JSON 属性
- python - 为什么 list() 和 [] 之间的 getsizeof 有不同的结果
- php - laravel中从一个函数到另一个函数的变量
- python - 如何通过 Selenium 和 Python 将文本发送到搜索字段
- android - 在 Marshmallow+ 中使用窗口管理器在锁定屏幕上显示文本视图
- sql-server - SQL SUBSTRING from ntext field only text before and after
- rspec - 为什么“不要在诸如 `before` 之类的钩子中使用 `expect`”?