什么是OpenID Connect
OpenID Connect1.0是一个位于OAuth2.0之上的简单身份认证层,是基于OAuth2.0授权协议基础上的由Google,微软,Facebook等公司于2014年发布的最新的认证授权协议(http://openid.net/specs/openid-connect-core-1_0.html),具有更高的安全性,灵活性,并符合未来安全发展的趋势。
OpenID Connect应用
在该协议中,使用令牌(id_token)替换OAuth2的access_token,id_token生成时使用私钥进行签名,使用时用公钥进行校验。使用JSON数据格式进行传输,并支持各类加密算法(如RSA)。
结合Api网关的使用场景,实现方案分为两个重要的部分:
1. Authorization server(AS):认证服务器,负责生成id_Token并管理公钥私钥对。
AS在整个体系中担任id_token生产者角色,称作API令牌,所生成的id_token必须符合OIDC(1.0版本)协议中的规范(http://openid.net/specs/openid-connect-core-1_0.html)。
1) Consumer(调用者)向API网关发送获取id_token认证请求,比如:通过用户名和密码(U+P)的方式。
2) API网关透传该请求到AS。
3) AS向Provider(服务提供方)发送认证用户信息请求。
4) Provider响应认证结果,若失败则直接响应错误信息。
5) 认证结果成功,AS生成id_token,id_token中包含了User信息(可扩展,也可包含其他必要信息)。
6) API网关将AS返回的id_token响应给Consumer。
2. Resource server(RS):资源服务器,负责校验id_token,并解析出相应的信息。
RS在整个体系中担任id_token消费者角色,只有id_token校验通过,才能将请求转发给Provider。
1) Consumer用带有id_token的参数去请求API网关。
2) Api网关会保存校验所使用的公钥,验证并解析id_token获取其中的User信息传给Provider,若验证失败则直接返回错误信息。
3) Provider处理请求并返回结果给Api网关。
4) API网关透传Provider响应的结果给Consumer。
小结
以上只是简单描述了下OpenID Connect结合Api网关应用场景的实现方案,但并不是唯一的。比如在这个实现方案中,AS是一套独立部署的应用,其实也可以把它集成到Provider中去,或者集成到Api网关中;同样的,RS也可以集成到Provider中去,大家可以根据不同的实际情况采取不同的方案。