我正在尝试使用 Keycloak 作为我的 OIDC 提供程序,用于 CSC API v2 的特定用例,其中在
8.4.2 oauth2/authorize
部分中,我们应该使用 CSC API 特定于授权的参数,例如 numSignatures
、hashes
、signatureQualifier
等
使用 Keycloak,我们可以定义新的客户端范围
service
和 credential
,并根据 CSC API 规范(使用用 Java 或 JavaScript 开发的自定义映射器)配置按要求运行的映射器。到目前为止,一切都很好。客户端可以使用这些范围并获取访问令牌。
但是,当我们发送带有自定义参数的身份验证请求时,我们如何配置或设置 Keycloak 以根据此类自定义参数做出决策?
典型的请求可能如下所示:
GET https://www.example.org/oauth2/authorize?
response_type=code&
client_id=<OAuth2_client_id>&
redirect_uri=<OAuth2_redirect_uri>&
scope=credential&
code_challenge=K2-ltc83acc4h0c9w6ESC_rEMTJ3bww-uCHaoeK1t8U&
code_challenge_method=S256&
signatureQualifier=eu_eidas_qes&
numSignatures=1&
hashes=MTIzNDU2Nzg5MHF3ZXJ0enVpb3Bhc2RmZ2hqa2zDtnl4&
hashAlgorithmOID=2.16.840.1.101.3.4.2.1&state=12345678
根据请求,我们想检查客户端/用户是否有权访问指定的
signatureQualifier
,否则拒绝。
执行此操作的正确方法是什么?我想检查更多自定义参数并根据它们的值决定。
我们是否应该使用 Keycloak Authentication SPI 来开发自定义验证器和自定义属性,以使其符合 CSC API 规范及其授权?
我还没有找到任何其他方法,我想确定这是在 Keycloak 中实现它的正确方法。
是的,您需要实现自定义
Authenticator
并定义自定义 AuthenticationFlow 或修改现有的。
验证参数和用户权限后,您可以使用 *Mappers
将这些验证值映射到访问令牌中。