场景:想要绕过KC登录页面,直接到某个 idp 去授权
之前写过一个KC的自定义SPI,来获取可用的 IDP 列表,也把授权URL返回了,和登录页上的一样,但是这个接口有个问题,它和登录一样有超时时间,你一段时间内不访问,它会失效,
那现在我们有了更好的方法,仍然让KC自己跳转:
获取 idp 列表,我们仍然用上面的方法;
然后按照下面的URL构造idp授权链接,通过访问这个链接,KC会自动重定向到 IDP 的授权页面,不用考虑时效性,而且可以直接获取授权码code,来换取 access_token
/auth/realms/fetest/protocol/openid-connect/auth?response_type=code&kc_idp_hint=github&nonce=nonce&redirect_uri=http://localhost&client_id=60c1ab2ae88824dba74cfe29
核心参数:
response_type:返回类型,固定:code
kc_idp_hint:Idp ID
redirect_uri:授权callback URL,后面用code换token时务必保持该参数一样
这个功能自 6.x 的时候就已经支持
参考:
- https://www.keycloak.org/docs/latest/server_admin/#_client_suggested_idp
- https://stackoverflow.com/questions/46390571/how-to-bypass-keycloak-login-form-and-jump-directly-to-the-idp-login
- https://stackoverflow.com/questions/56776381/keycloak-identity-broker-api