干货分享|如何将前端代理服务器(BFF)接入身份认证(2)

续集2

前篇文章在前面发布,同学们可以自行找一下。

本篇文章将继续通过实例来详细讲解如何将前端代理服务器(BFF)接入身份认证。我们将使用一个示例应用来演示 BFF 与身份认证的集成过程。

1)在 Keycloak 中新建一个安全领域

在 Keycloak 中新建一个安全领域(Realm),只需要取一个名字就好,如图所示。

代码片段:可切换语言,无法单独设置文字格式

2)在安全领域中新建一个客户端配置

你的 egg.js 服 务 所 公 开 的 终 端 节 点 ( 域 名 + 路径),可以使用通配符,比如https://uniheart.pa-ca.me/*,如图所示。

3)创建 keycloak.json 文件

在 egg.js 项目根目录下添加一个 keycloak.json 文件,内容如下,注意相关字段要和 Keycloak 对应。realm 对应刚刚创建的 Realm,resource 对应刚刚创建的客户端名称。

{"realm": "UniHeart","auth-server-url": "https://keycloak.jiwai.win/auth","ssl-required": "external","resource": "UniHeart-Client"}

4)引入 egg-keycloak 插件

随后,添加@jeff-tian/egg-keycloak 插件:

npm install --save @jeff-tian/egg-keycloak

并且在 config/plugin.ts 文件中增加如下配置:

{//...keycloak: {enable: true,package: '@jeff-tian/egg-keycloak',},// ...}

5)在路由中使用 Keycloak

可在想要保护的路由前,增加 Keycloak 中间件。比如,在/app/router/keycloak/index.ts 文件中,可以使用这样的代码来保护/keycloak/login 路由:

import { Application } from 'egg'export default (app: Application) => {const { router } = appconst subRouter = router.namespace('/keycloak')subRouter.get('keycloak.login','/login',app.keycloak.protect(),async ctx => {ctx.body = ctx.session['keycloak-token']},)}

以上代码的最终效果和前面所说的示例相同,其关键在于添加 keycloak.protect()中间件。

这样,就完成了基于 egg.js 的 BFF 与 Keycloak 的集成。在这个过程中,我们只需要配置好keycloak.json 文件,然后在路由中使用 keycloak.protect()中间件,就可以实现身份认证和授权的功能。

在这个过程中,egg.js 会自动处理和 Keycloak 的交互,包括获取授权码、使用授权码换取令牌、使用令牌获取用户信息等步骤。这样,我们就可以在 BFF 中使用 Keycloak 来实现身份认证和授权的功能。

如果前端使用了该 egg.js BFF,那么它不需要关心身份认证和授权的细节,只需要调用/keycloak/login接口,就可以获取令牌响应。授权码许可模式中的多个来回请求都由 egg.js BFF 代劳,前端团队也不需要了解 Keycloak 中配置的客户端密码等信息了。

文章未完待续,小伙伴们请等待一下哦!

本文摘自《数字身份认证技术与实践》,获出版社和作者授权发布。

数字身份认证技术与实践——jd

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值