为什么 OpenID Connect 让一个客户端为另一个客户端发起身份验证
Why OpenID Connect let a client initiate authentication for another client
我在 Keycloak 中使用 OpenID Connect 作为身份验证解决方案,我刚刚遇到了以下情况。
客户端A
向授权服务器发送授权请求,并在该请求中提供客户端B
的redirect_url
。
授权服务器对用户进行身份验证并将用户重定向到提供的 redirect_url
(用于客户端 B
)和 authentication_code
。
客户端 B
使用自己的 client_id
和密钥与授权服务器通信并获取其令牌。
我想知道为什么 OpenID Connect 允许这样做
过程中,一个客户端向另一个客户端发起认证是正常的事情吗?为什么发出的authentication_code
没有绑定到发起认证的客户端,为什么authentication_code
可以被其他客户端与其他client_id
一起使用?
注意:我知道 redirection_url
的有效性将在该过程中进行检查,但我想知道为什么授权码未绑定到 client_id 本身。
如果在 Keycloak 中确实可行,那么这是实现的问题,而不是规范的问题。 4.1.2. 部分中的 Oauth 规范为授权码指明了这一点:
The authorization code is bound to the client identifier and redirection URI.
至于重定向 URI,它也应该被验证,只有当客户端 A 的另一个重定向 URI 被列入白名单时,客户端 A 才应该能够使用客户端 B 的重定向 URI。
Proof Key for Code Exchange 也可以防止像您在此处描述的那样使用 Oauth 流程。
我在 Keycloak 中使用 OpenID Connect 作为身份验证解决方案,我刚刚遇到了以下情况。
客户端
A
向授权服务器发送授权请求,并在该请求中提供客户端B
的redirect_url
。授权服务器对用户进行身份验证并将用户重定向到提供的
redirect_url
(用于客户端B
)和authentication_code
。客户端
B
使用自己的client_id
和密钥与授权服务器通信并获取其令牌。
我想知道为什么 OpenID Connect 允许这样做
过程中,一个客户端向另一个客户端发起认证是正常的事情吗?为什么发出的authentication_code
没有绑定到发起认证的客户端,为什么authentication_code
可以被其他客户端与其他client_id
一起使用?
注意:我知道 redirection_url
的有效性将在该过程中进行检查,但我想知道为什么授权码未绑定到 client_id 本身。
如果在 Keycloak 中确实可行,那么这是实现的问题,而不是规范的问题。 4.1.2. 部分中的 Oauth 规范为授权码指明了这一点:
The authorization code is bound to the client identifier and redirection URI.
至于重定向 URI,它也应该被验证,只有当客户端 A 的另一个重定向 URI 被列入白名单时,客户端 A 才应该能够使用客户端 B 的重定向 URI。
Proof Key for Code Exchange 也可以防止像您在此处描述的那样使用 Oauth 流程。