如何解决Keycloak .net 5 api 服务
我一直在尝试让 Keycloak 使用以下设置:
- 角度前端
- ASP .NET 5 服务
- 这是一个简单的 api,它应该验证不记名令牌并返回控制器中的值。这是让我适应的部分。
我的客户端 ID 是 api,所以我认为那是应该存在的,但它想要 JWT 的 Aud 属性中的内容。就我而言,它是“帐户”。据我所知,如果我使 apiName = "account" ,它会验证 jwt 并工作,但我什至不需要客户端机密,所以有些东西“不正确”。我只是不确定现在发生了什么。
代码如下:
services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication(options =>
{
//base - address of your identityserver
options.Authority = Configuration["Authentication:KeycloakAuthentication:ServerAddress"] + "/auth/realms/" + Configuration["Authentication:KeycloakAuthentication:Realm"];
//name of the API resource
options.ApiName = "account";
options.ApiSecret = Configuration["Authentication:KeycloakAuthentication:ClientSecret"];
options.EnableCaching = true;
options.RequireHttpsMetadata = false;
})
.AddCookie(options =>
{
options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
options.Cookie.Name = "api.cookie";
});
app.UseAuthentication();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");
});
解决方法
如果您使用的是 Keycloak,则不应使用 AddIdentityServerAuthentication
。该方法明确配置为与 IdentityServer 设置一起使用。但是您使用 Keycloak 作为身份验证提供程序,因此无需将 IdentityServer 添加到组合中。
相反,您应该直接使用 JWT Bearer 身份验证方案。像这样:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Authority = Configuration["Authentication:KeycloakAuthentication:ServerAddress"] + "/auth/realms/" + Configuration["Authentication:KeycloakAuthentication:Realm"],options.Audience = "account",options.RequireHttpsMetadata = false;
});
使用 JWT 不记名身份验证,您的服务器已经收到一个在您的应用程序外部检索到的令牌(在您的情况下,用户通过 Keycloak 的 Angular 客户端检索到它)。所以你不需要在你的服务器中与认证提供者建立信任关系;您只需要验证一个令牌。为此,您既不需要客户端 ID,也不需要客户端机密。您只需要知道授权本身是什么,这样服务器就可以从中检索信息(如签名密钥)以验证令牌。
根据您的 Keycloak 设置,您可能还想配置 TokenValidationParameters
,以便您可以向令牌添加进一步检查。但除此之外,你不需要做任何其他事情。由于您使用的是无状态承载身份验证,因此您也不需要配置 cookie 身份验证方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。