使用 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

AKS 中的 Ocelot API 网关实现

.Net 5:无法启动 Ocelot,不受支持的身份验证提供程序

如何使用 Azure Active Directory 设置 Ocelot Api 网关

如何使用我的数据库创建身份验证服务器 OKTA?

带有 okta OAUTH 令牌身份验证的 Django Rest API