能否仅使用Keycloak做身份认证,配置响应仅返回id_token去除access_token?
问题解答
是否可以配置Keycloak仅返回id_token,去掉access_token?
Keycloak默认没有提供开箱即用的配置开关,来直接移除token响应中的access_token字段。如果你的业务场景确实只需要id_token,可以通过调整授权流程实现:
- 选择OIDC隐式流,请求授权端点时指定
response_type=id_token,此时回调地址将仅返回id_token,不会附带access_token - 若必须使用授权码流程,可以自行开发Keycloak的SPI扩展,自定义token端点的响应结构,过滤掉
access_token相关字段,不过该方案开发维护成本较高,非必要不推荐
OIDC是否规定id_token必须和access_token一同返回?
OIDC通用规范没有强制要求二者必须同时返回,返回内容完全取决于你使用的授权流程和请求参数:
- 授权码流程下,请求
scope=openid时,id_token是必须返回字段,access_token为该流程默认返回项,但不属于强制和id_token绑定的要求 - 隐式流指定
response_type=id_token的场景下,规范允许仅返回id_token,不需要附带access_token
用id_token做身份认证是否正确,身份认证必须用access_token吗?
这种用法完全符合OIDC规范要求,身份认证不需要使用access_token:
- OIDC设计中,
id_token的核心作用就是给客户端做身份认证使用,它本身是JWT格式,包含了用户身份标识、认证时间、签发方、有效期等身份认证必须的信息,你只需要按照规范校验签名、签发方(iss)、受众(aud)、有效期(exp)等字段合法,就可以直接用来确认用户身份 access_token的定位是授权凭证,是提供给资源服务器使用的,用于判断请求方是否有权限访问对应的资源接口,它不是为客户端身份认证场景设计的,不适合用来做身份认证
注意:如果你后续需要调用Keycloak保护的业务接口,还是需要使用
access_token发起请求,id_token不具备授权访问资源的能力。
内容的提问来源于stack exchange,提问作者Sina Askarnejad
相关产品推荐
相关产品推荐

