我正在尝试使用 Ocelot 在 ASP.Net API 网关中获得 JWT 不记名身份验证以与多个机构/发行者合作。一个颁发者是 Auth0,另一个是基于 IdentityServer4 的内部认证服务器;我们正在尝试从 Auth0 迁移,但仍有依赖它的外部客户端,因此我们希望支持两者,直到所有内容都经过全面测试以进行切换。
根据this MSDN blog post,应该可以通过设置TokenValidationParameters.ValidIssuers
而不是使用多个权限JwtBearerOptions.Authority
。但是,无论TokenValidationParameters.ValidIssuers
.
有谁知道如何让这个工作?这就是我设置身份验证的方式。它仅在注释行未注释时才有效(并且仅适用于由该单一机构颁发的令牌)。我期待 Ocelot 或 ASP.Net Core 从发行服务器获取密钥;两者都通过 .well-known/openid-configuration 提供 JWK,它与 ASP.Net Core 中间件一起使用。
public static void AddJwtBearerAuthentication(this IServiceCollection services, IConfiguration configuration)
{
services
.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
{
//options.Authority = configuration["Jwt:Authority"];
options.Audience = configuration["Jwt:Audience"];
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateIssuerSigningKey = true,
ValidateAudience = …
Run Code Online (Sandbox Code Playgroud) 我们在 API 网关后面有许多服务,而 API 网关本身又在 ingress-nginx 后面。我们尝试使用 HTTP/2 来加速到前端的数据传输,但我们所有的连接仍然使用 HTTP/1.1 完成。
客户端到 nginx 的连接是通过 HTTPS 进行的,但是 nginx 使用 HTTP 与我们的 API 网关通信,网关也使用 HTTP 与后端服务通信。
我们是否需要端到端使用 HTTPS 才能使 HTTP/2 正常工作?如果是这样,那么使用证书进行设置的最佳方法是什么?如果不是,什么可能导致连接下降到 HTTP/1.1?
我们使用 ingress-nginx 版本 0.21.0,其中包含 nginx 1.15.6 和 OpenSSL 1.1.1,这应该足以支持 TLS 1.3/ALPN/HTTP2。我们的 nginx 配置 configmap 已use-http2
设置为true
,我可以看到 pod/etc/nginx.conf
有一条listen ... http2;
线。
编辑 2019 年 10 月 5 日:
根据 @Barry Pollard 和 @Rico 的评论,我发现位于我们的 ingress-nginx 控制器前面的 AWS Elastic Load Balancer 不支持 HTTP/2。我已将 nginx 从堆栈中删除,并且我们的 API …