本篇文章将通过实例来详细讲解如何将前端代理服务器(BFF)接入身份认证。我们将使用一个示例应用来演示 BFF 与身份认证的集成过程。
通过这些实例讲解,你将掌握 BFF 与身份认证的集成技巧,为你的前端应用提供安全可靠的认证机制。
接下来,让我们开始具体讲解每个步骤的实现细节。
1 在 Naive BFF 中接入认证平台
本小节将介绍如何在 Naive BFF 中接入身份认证平台。Naive BFF 是一个简单的前端代理服务器,它负责处理前端应用和后端服务之间的通信,并且在其中实现身份认证和授权机制。
由于并没有标准,因此在 Naive BFF 中接入认证平台可能是非常随意的,即能工作即可。一切流程都是由前端主导的,后端只是转发而已。在这种模式下,仍然只能使用公开客户端模式,因为后端并没有参与到认证流程中。在这种架构下,BFF 只是起到了一个代理的作用,解决了前端调用认证平台接口的跨域问题。
如果身份认证平台基于安全考虑,没有配置 CORS,那么前端就无法直接调用认证平台的接口,而是需要通过后端来转发。
2 在 TMI BFF 中接入认证平台
本小节将介绍如何在TMI BFF 中接入身份认证平台。TMI BFF 是一个更高级的前端代理服务器,和 Naive BFF 相比,在和身份认证平台打交道的过程中,它可以提供更多的功能。
比如,它可以将整个认证过程的复杂性隐藏起来,只暴露简单的接口给前端应用调用。
在使用 TMI BFF 时,就完全可以使用机密客户端来和身份认证平台打交道,并且可以使用完整的授权码许可模式来完成认证。在前端详解授权码许可模式时展示了该流程涉及多个请求和跳转,然而在使用了 TMI BFF 的架构中,前端只需要向 BFF 发起一个令牌请求,就能获取到令牌响应。那些获取授权码、使用授权码再换取令牌的复杂请求响应都只发生在 BFF 和身份认证平台之间。
下面举一个例子来说明:在 egg.js 中对接 Keycloak。egg.js 是一个基于 Node.js 和 Koa 的企业级框架,它可以帮助我们快速搭建应用。接下来将使用egg.js 实现一个 TMI BFF,它将对接 Keycloak,实现身份认证和授权的功能。
完整的代码在https://github.com/Jeff-Tian/alpha,通过借助 egg-keycloak 插件,只需要很少的代码量就可以集成Keycloak。最终的效果可以在 https://uniheart.pa-ca.me/keycloak/login 体验。单击该链接后,会跳转至Keycloak 的登录页面,如图所示。
无论是通过邮箱/密码的方式,还是通过关注公众号登录的方式,登录完成后,会跳转回https://uniheart.pa-ca.me/keycloak/login 页面,并且以 JSON 格式展示获取的用户信息,如图所示。
文章未完待续,小伙伴们请等待一下哦!
本文摘自《数字身份认证技术与实践》,获出版社和作者授权发布。
数字身份认证技术与实践——jd