如何使用 Keycloak 保护前端和 REST API

Posted

技术标签:

【中文标题】如何使用 Keycloak 保护前端和 REST API【英文标题】:How to protect frontend and rest API with Keycloak 【发布时间】:2021-03-08 14:27:23 【问题描述】:

我对 Keycloak 服务器非常陌生,我想用它来保护我的前端应用程序和后端 rest API,它们也在互联网上开放。到目前为止,我所理解和所做的是在 Keycloack 上创建 2 个客户端,1 个用于使用客户端协议(openid-connect)和访问类型(公共)的前端,然后在客户端我使用采用者将用户重定向到 Keycloak 登录页面并进行身份验证并获取令牌。现在对于后端(rest-apis),我创建了一个单独的客户端,它再次使用客户端协议(openid-connect)但具有访问类型(机密)和身份验证流:浏览器流和直接授权流都是直接授权和之后我得到客户端ID和客户端秘密来调用Keycloak rest api。

现在我希望当用户从前端进行身份验证并获取令牌并将标头请求发送到我的 rest API 时,我在这里调用一些 Keycloak rest api 通过提供 client_id 和 client_secret 来验证此令牌。

我正在使用 Keycloak 的以下 api 来验证我在前端生成的令牌:

http://localhost:8120/auth/realms/evva_realm/protocol/openid-connect/token/introspect

但结果是这样的:


    "active": false

可能是我使用了一些错误的 api 或者整个架构来验证和保护我的后端 api 不正确。有人可以帮我了解问题出在哪里吗?

【问题讨论】:

【参考方案1】:

@user565 我发现这篇中等帖子对我有用。我相信您也可以从中受益。

它基本上创建了两个客户端,一个用于后端,另一个用于前端。问题是它们通过利用客户端范围、角色和复合角色功能来共享相同的角色。

希望对您有所帮助:https://medium.com/devops-dudes/secure-front-end-react-js-and-back-end-node-js-express-rest-api-with-keycloak-daf159f0a94e

【讨论】:

以上是关于如何使用 Keycloak 保护前端和 REST API的主要内容,如果未能解决你的问题,请参考以下文章

需要使用 Keycloak 和 oAuth2 保护普通 Spring REST API 的示例

无法使用 keycloak 保护 python flask rest api 服务

如何使用 Keycloak 保护 Angular 8 前端和使用网关、eureka 的 Java Spring Cloud 微服务后端

使用 Keycloak 保护 Spring Boot REST 服务时的 NullPointer

Keycloak,如何保护不提供网页的 Spring Boot 后端?

如何使用 keycloak 保护 angular/spring 应用程序?