5 分钟部署一个 OIDC 服务并对接 nightingale
前言
就如在5 分钟部署一个 OAuth2 服务并对接 Shibboleth-IdP 3.4.6中提过的那样,OAuth2 作为一个授权协议,他对于认证的部分是缺乏标准规范的。这就是 OpenID Connect ——简称 OIDC 诞生的原因。
下图是 OpenID Connect 的架构,这里的 Core 部分主要基于 OAuth2.0 协议,增加了一个基于 JWT 的 id_token 机制,同时规定了 userinfo 的 endpoint。同时在 Discovery 中允许自动发现各个 endpoint 的 URL 地址,因此对于 OIDC 的 SSO 集成在全流程都是标准化的,同时他也向下兼容 OAuth2.0 ,因此有很好的客户端兼容性。
Apereo CAS - OIDC
是的,Apereo CAS 也可以支持 OIDC,所以如果你已经按照 15 分钟部署一个 CAS 服务并对接 Shibboleth-IdP 3.4.6 的路程部署好了 CAS 服务的话,那么只需要略微的调整,就可以让他支持 OIDC 了,5 分钟足矣。
下文假定已经安装好了 cas 6.1
修改
build.gradle,在dependencies内进一步增加oidc的编译依赖
注意 cas 目前已经更新到 6.3 版本,6.2 以后的版本在 build.gradle 中的配置有所区别,如果你使用的是新版本的话,此处因使用类似这样的格式引入。
在
cas-overlay-template/etc/cas/services/目录内新增oidc-n9e-1004.json文件,给夜莺注册oidc服务。注意这里serviceId要匹配夜莺rdb.yml中配置的redirectURL。
修改
cas-overlay-template/etc/cas/config/cas.properties,增加这条配置。
现在执行 ./docker-build.sh 重新生成 docker 镜像,并重新运行之。我们的 OIDC 服务就部署好了。访问 https://cas.example.org/cas/oidc/.well-known 试试看,应该可以看到 OIDC 的各项源数据信息了
对接 nightingale
nightingale 是最优秀的开源监控框架之一,他支持基于 OIDC 协议的 SSO。配置部分在 rdb.yml 的配置文件中的 sso 部分,如下所示:
这其中 ssoAddr 配置 OIDC 服务的根路径即可。redirectURL 则是 n9e 前端所在的服务地址的 /auth-callback 路由上。clientId 和 clientSecret 即是 OIDC 服务所配置的 client 信息。apiKey 是给商业版定制的功能,无需配置。attribtues 和 coverAttributes 部分就和 LDAP 的配置一样,做属性映射的作用。
完成所有配置后,重启 rdb 服务。注意重启后 ps -ef | grep rdb 看下服务是否正常启动。似乎如果由于 OIDC 对接部分自检无法通过的话,会直接退出 rdb 服务。如果调试期间有问题,建议直接在 n9e 按目录内直接 ./n9e-rdb 启动服务来观察服务启动状态。
如果一切正常,那么当你再次访问夜莺时,他就会自动重定向到你的 OIDC 服务进行认证授权了。并在完成认证后自动进入夜莺。
参考文献
以上
版权声明: 本文为 InfoQ 作者【冯骐】的原创文章。
原文链接:【http://xie.infoq.cn/article/a8026ed0ccba9ce50cb467421】。
本文遵守【CC BY-SA】协议,转载请保留原文出处及本版权声明。











评论 (1 条评论)