使用 OKTA 进行 Ocelot 网关身份验证
Posted
技术标签:
【中文标题】使用 OKTA 进行 Ocelot 网关身份验证【英文标题】:Ocelot Gateway authentication with OKTA 【发布时间】:2021-10-18 16:35:31 【问题描述】:我是身份服务器的新手。我实际上是在尝试对 Okta 提供者从 Ocelot 网关生成的 JWT 令牌进行身份验证,并在身份验证成功后允许访问底层 API。
我实际上可以使用 Postman 成功生成 ID 和访问令牌。但是我用token传给Ocelot网关总是显示401 unauthorized
错误。
这是来自 Ocelot 网关的代码。
代码
public void ConfigureServices(IServiceCollection services)
services
.AddAuthentication()
.AddJwtBearer("Bearer", options =>
options.Audience = "api://default"; // Okta Authorization server Audience
options.Authority = "https://dev-12345678.okta.com/"; // Okta Authorization Issuer URI URL e.g. https://subdomain.okta.com/oauth2/authidentifier
options.RequireHttpsMetadata = false;
);
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Remove("scp");
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Add("scp", "scope");
services.AddOcelot(Configuration);
IdentityModelEventSource.ShowPII = true;
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
app.UseAuthentication().UseOcelot().Wait();
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
endpoints.MapControllers();
);
【问题讨论】:
【参考方案1】:我会查看 Configure 方法中项目的顺序。我会将 UseRouting 作为首要项目之一,例如:
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
app.UseRouting();
app.UseHttpsRedirection();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
endpoints.MapControllers();
);
app.UseOcelot();
通过这样做search查看 Github 中的现有示例
【讨论】:
以上是关于使用 OKTA 进行 Ocelot 网关身份验证的主要内容,如果未能解决你的问题,请参考以下文章
在 Ocelot 中注入 AuthenticationMiddleware - 如何返回 401
.Net 5:无法启动 Ocelot,不受支持的身份验证提供程序