gpt4 book ai didi

jwt - .net core web api jwtbearer 中间件如何使用身份验证提供程序验证 OpenID Connect token

转载 作者:行者123 更新时间:2023-12-05 03:52:31 26 4
gpt4 key购买 nike

这几天我一直在用头撞墙。解决方案可能太简单了,无法在博客中陈述,所以我在这里提出这个问题。

我正在开发一个 .NET Core Web API,它应该将所有身份验证和授权委托(delegate)给 Keycloak 身份提供程序服务器。

我在我的 Startup.cs 文件中编写了以下代码:

services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;

}).AddJwtBearer(o =>
{
o.Authority = "https://idp.abc.xyz/auth/realms/master";
o.Audience = "products-api";
});

services.AddAuthorization(options =>
{
options.AddPolicy("Administrator", policy => policy.RequireClaim("user_roles", "product_catalog_admin"));
options.AddPolicy("User", policy => policy.RequireClaim("user_roles", "product_catalog_user"));


});

现在我可以使用 Postman 从 IDP 请求 token 并将该 token 发送到 Web API。然后 Web API 验证该 token ,但除了 URL 之外不知道任何关于 IDP 的信息,并且只向 IDP 的公共(public) URL 发出请求以获取一些配置。

问题:如果 Web API 对 IDP 一无所知,它如何知道 token 有效且未被篡改(使用不同的 key 创建)?

最佳答案

AddJwtBearer 将使用您提供的选项在内存中执行 token 验证。默认情况下,这涉及以下操作:

  • 验证颁发者
  • 验证受众
  • 检查 token 的 exp 声明是否在过去(过期)
  • 验证访问 token 的数字签名

第 4 项检查是最复杂的,默认情况下这涉及从 IDP 的 JWKS 端点下载 token 签名公钥,然后在 JWT 的 kid header 中选择一个。 blog post我的有一些关于这是如何工作的细节。

当然,您应该始终测试上述 4 种情况,并确保在每种情况下 API 访问都被拒绝并返回 401 错误响应,客户端可以针对此进行编码。

关于jwt - .net core web api jwtbearer 中间件如何使用身份验证提供程序验证 OpenID Connect token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62161576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com