Phl*_*ash 5 gateway separation-of-concerns federation oauth-2.0
语境
嗨,我正尝试为我们公司的产品设计一种具有以下三个属性的访问控制解决方案:
我目前的想法是在网关服务中支持OpenID Connect(OIDC)/ OAuth 2协议,通过销售/运营工作流在带外创建客户IdP端点与我们的网关之间的信任关系,以及网关之间的信任关系。和内部产品是我们内部开发工作的一部分。
消息流变为:
注意:除了使用SAML断言以及IdP和RP的SAML联合,并且与所涉及的IdP一样,这与Gov.UK验证身份解决方案类似。
我还期望在以后的阶段支持协议/令牌转换(例如:SAML断言-> OIDC令牌),或具有专有身份提供者机制的客户,并集成我们自己的IdP(AzureAD)以供员工访问。
所以有什么问题?
似乎OIDC / OAuth 2没有现有流程,可以在没有最终用户的情况下跨两个系统(实际上是安全性边界)明确区分身份验证和访问授权,并且这也不是存在用户的设计的一部分(所有这些图有一个完成两个任务的授权服务器)。
我们的大多数客户将从他们的后端调用我们的服务,不存在最终用户或浏览器,因此我们无法使用支持id_tokens(或auth代码)的交互式OIDC流,而剩下的client_credentials流,并且仅处理访问令牌。
我是否全部错了(OIDC / OAuth方法是否错误)?
我们是否应该将客户的访问令牌转换为网关中的其他访问令牌(因为他们无法创建id_tokens)?
我知道令牌交换的标准草案(https://tools.ietf.org/html/draft-ietf-oauth-token-exchange-14),这会有所帮助吗?
我会考虑JWT和/或SAML 断言授予类型。这些旨在使用由已执行用户身份验证的受信任第三方身份提供商颁发的令牌从 OAuth 服务器获取访问令牌。这将产生如下所示的架构:
(4) Look up prod-
ucts +------------+
+----------->+ |
| | API/DB of |
| | products |
+----------------+ +--------------+---+ | |
| Some | | | | |
| Trusted | (3)JWT or SAML grant | Your OAuth | +---+--------+
| IDP <--+ +--------------------->+ server | |
| | | | +----------------+ <------------+
+---+------------+ | | | +--------+------+--+ (5) Allowed products
| | (1) | | (7) Access token ^ |
| OIDC, SAML | | scoped for your APIs | | (6) Burn allowed products into
| or|other | | +<-----+ access token as claims
JWT or SAML | | |
(2) token intended+----+----------+-+ | +------------------+ +----------------+
for your OAuth| +<--+ | | | +<-----+
| server | Some | | | | | |
+----------> Client +------------------->+ Your gateway +------------->+ Your APIs | ^ (11) Fine grained
| | (8) Attempt to | | (10) Attempt| | | authorization using
| | access your APIs | | to access | +------+ claims in access
+-----------------+ with your access +--+-----^---------+ APIs with +----------------+ token
token as proof of | | access token
authentication | | that's been authorized to
+-->--+ an extent
(9) Course grained
authorization using
scope, URL & HTTP method
Run Code Online (Sandbox Code Playgroud)
在步骤 9 和 10 之间,如果您不使用拆分令牌方法,我可能会将访问令牌转换为虚拟令牌。这将防止客户端看到您的访问令牌中只需要您自己的内部 API 知道的内容。
归档时间: |
|
查看次数: |
279 次 |
最近记录: |