class KeyCloakOIDCConnector(OIDCConnector):
"""Keycloak-specific OIDC connector."""
def __init__(
self,
base_url: str,
realm: str,
client_id: str,
client_secret: str,
scope: str | list[str] | None = None,
admin_client_id: str | None = None,
admin_client_secret: str | None = None,
admin_scope: str | None = None,
verify_tls: bool = True,
timeout_seconds: int = 10,
) -> None:
token_url = (
f"{base_url}/realms/{realm}" "/protocol/openid-connect/token"
)
userinfo_url = (
f"{base_url}/realms/{realm}" "/protocol/openid-connect/userinfo"
)
introspection_url = (
f"{base_url}/realms/{realm}"
"/protocol/openid-connect/token/introspect"
)
user_lookup_url_template = (
f"{base_url}/admin/realms/{realm}/users" "?username={subject}"
)
super().__init__(
token_url=token_url,
userinfo_url=userinfo_url,
introspection_url=introspection_url,
client_id=client_id,
client_secret=client_secret,
scope=scope,
verify_tls=verify_tls,
timeout_seconds=timeout_seconds,
user_lookup_url_template=user_lookup_url_template,
admin_client_id=admin_client_id,
admin_client_secret=admin_client_secret,
admin_scope=admin_scope,
)