使用openid connect时如何保证客户端服务的GDPR/ToS合规性?

How to ensure GDPR/ToS compliance of client service when using openid connect?

背景

我们的网络应用需要用户主动同意我们的条款和条件。当用户登录时,我们会检查他们是否已经同意最新版本的条件。如果未提供,则用户需要同意并且将无法访问应用程序或其 API 的任何部分(尽管已正确登录)。

问题

我们正在使用 OpenID Connect 进行身份验证。我发现以下属性表明您可以要求同意自定义条件(请参阅 here):

这是要求同意客户服务条件吗?

我应该为它创建自定义声明吗? (-> ToS 可能会获得新版本并需要重新批准。)

或者:是否可以通过在调用回调 URI 之前显示自定义同意屏幕来扩展 OpenID Connect 流程?

Is it possible to extend the OpenID Connect flow by showing a custom consent screen before calling the callback URI?

这是不安全的,违背了 OIDC 的目标

作为提供给您的 OIDC 的消费者,允许您控制同意的外观将可以向最终用户展示一件事,然后让 OIDC 提供者用一些东西签署 JWT 声明否则完全。

可能你还没有意识到你们只是乙方和三方关系

甲方是同意丙方让乙方访问丙方控制的身份数据的最终客户。 如果您(B 方)获得许可,您就会知道最终客户的身份,OIDC 将在 C 方生成的 JWT 中向您授予额外数据。 JWT 是 C 方用来向您保证他们进行了 Authn 以证明 A 方是他们声称的身份的机制,他们是真实的并且他们向您保证 B 方。

所以你不能也不应该影响这个过程。

你不应该在生成 JWT 之前假设身份,所以影响任何与身份相关的事情都会破坏安全模型,如果你自己影响了结果你怎么能放心?这是荒谬的。

您不应该能够影响提供给终端客户的权限,因为终端客户甚至还没有决定是否授予您权限!

丙方知道最终客户是谁,他们已经建立了关系。 您正在使用 OIDC 进入中间并利用这种信任关系,因此您可以相信最终客户就是他们声称的人,因此您可以从 C 方获得有关最终客户的一些个人身份信息。

那是 OIDC 和您在流程中的角色,需要明确的是,在 OIDC 流程完成之前,您没有任何角色或权限,您甚至有权拥有一个包括终端客户的角色。

tos_uri policy_uri Is this meant for requiring consent to the client services conditions?

这是为了知情同意

最终客户端仍将显示相同的同意屏幕,并且 可能 OIDC 提供商会调整 UI 以显示指向您的服务条款或隐私政策的链接。

例如,在 OIDC 协议之外,Okta 允许您创建用于 OIDC 的应用程序,并在该应用程序配置中 it has these attributes

但在 OIDC Okta 期间,根本不调整 UI 来提示用户接受这些条款,甚至 last year Okta asked a client 添加定制字段来表示同意。

我需要重申,作为 OIDC 消费者,您不能也不应该在获得同意之前直接自定义 OIDC 流程。但是您可能会找到同意为您配置 UI 的 OIDC 提供商。这取决于他们,终端客户与身份提供者有关系,您实际上是在请求进入中间并利用它。

现在商业上是完全不同的情况。您向 OIDC 提供商付款,这使得 OIDC 提供商有经济动机来帮助您。这也意味着,如果 OIDC 提供商不 关心保护最终客户的身份而不是与支付账单的一方合作,则 OIDC 的安全特性会产生利益冲突。此外,最终用户甚至可能没有意识到他们已经与 OIDC 提供商建立了身份和信任关系,他们甚至可能认为这只是 2 方关系而不是 3 方,他们决定是否共享他们的身份和你。这也是为什么 B 方(您)的开发人员会误解 3 方关系,并假设他们拥有比基于 OIDC 协议的安全特性应有的更多控制权。

这种商业影响、终端客户混淆和实施误解导致 OIDC 协议不提供 3 方模型的预期安全特性,并破坏了对它的整体需求。在大多数情况下,您不需要 OIDC,特别是如果 3 方模型不方便并且您希望更多地影响同意,而 OIDC 提供者不提供此,并且您可能期望和想要 OIDC 不提供的更多元素, OIDC 可能不是您的业务所需要的。