繁体   English   中英

所有入口请求的身份验证代理

[英]Auth Proxy for all ingress requests

我们想提供一个基于子域识别租户的多租户应用程序。 我们使用 Keycloak 作为身份验证服务器,其中每个租户都有自己的领域。

现在我们要使用身份验证代理对对我们应用程序的所有请求进行身份验证。 如果请求已经过身份验证(它有一个 cookie),则应将请求转发到后端。 如果请求尚未经过身份验证(它没有 cookie),则应将请求转发到 Keycloak 和基于子域的正确领域,并且应启动 oAuth 流程。 成功登录后,应该设置一个cookie,以便所有后续请求都经过身份验证。 这正是oauth2-proxy提供的功能。 但是,我们还有一个进一步的要求,即我们有不同的领域来映射各个租户。 目前,oauth2-proxy 无法做到这一点。

除了提供此功能的 oauth2-proxy之外,是否还有其他解决方案(可能是 Nginx 或它的插件)?

谢谢

OIDC 插件

您可以将lua-resty-openidc与任何基于 Lua 的 Nginx 系统一起使用,例如 Kong 或 OpenResty。 这是一个已建立的插件,与 oauth2-proxy 完成相同的工作。 您可以为不同的路径配置它的多个实例,代表不同的租户:

location /tenant1/ {
    rewrite_by_lua_block {
        var opts = ... 
        local res, err = require("resty.openidc").authenticate(opts)
    }
}        
location /tenant2/ {
    rewrite_by_lua_block {
        var opts = ... 
        local res, err = require("resty.openidc").authenticate(opts)
    }
}

还有多种方法可以查看输入标准,例如origin标头并相应地重新路由,这有时会很有用,尽管有一个学习曲线。

设计

不过我会质疑你的设计。 多个领域实际上意味着您的应用程序需要处理多个授权服务器,这是一个复杂的设置。 例如,API 需要验证多种类型的访问令牌。

如果可能,更喜欢使用单个授权服务器并简单地将租户 ID 声明添加到访问令牌的解决方案,然后确保 API 拒绝租户 1 的用户访问租户 2 数据。

这个针对单个应用程序的多个领域的相关答案还讨论了围绕如何访问数据的一些权衡。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM