如何使用 Keycloak 和 PKCE 流实现 React SPA 身份验证?

Posted

技术标签:

【中文标题】如何使用 Keycloak 和 PKCE 流实现 React SPA 身份验证?【英文标题】:How implement React SPA authentication with Keycloak and PKCE flow? 【发布时间】:2021-03-24 09:52:41 【问题描述】:

这是我第一次使用 Keycloak。我在本地机器上准备了一个 Keycloak 实例,我可以在其中创建领域、客户端等。

我找到了 React + Keycloak 的使用示例,但没有一个使用 PKCE 流。

我不知道如何配置 Keycloak 和 React。我只知道客户端应用程序必须能够生成代码验证器和代码质询。

我正在寻找一个使用 react 和 Keycloak 实现授权的简单示例,它应该遵循 OAuth 2.0 Authorization Code Grant with PKCE Flow 或关于在 React 端做什么以及在 Keycloak 端实现 OAuth 2.0 的提示。

我想做什么:

    设置 Keyclock 实例(准备就绪) 在 Keycloack 中注册公共客户端(准备就绪) 在 Web 中实现一个简单的登录场景(该场景遵循 OAuth 2.0 Authorization Code Grant with PKCE Flow)

【问题讨论】:

【参考方案1】:

转到您的领域,然后转到客户端并选择您的客户端:

Access Type 设置为public 启用Standard Flow Enabled 添加适当的重定向 Uris 转到Advanced Settings,在Proof Key for Code Exchange Code Challenge Method 字段中选择S256

在你的 React 应用的适配器上添加 "enable-pkce": true。

来自 keycloak 文档:

KeycloakInstalled 适配器支持 PKCE [RFC 7636] 机制 在代码中为令牌交换提供额外的保护 OIDC 协议。可以使用“enable-pkce”启用 PKCE:true 在适配器配置中设置。启用 PKCE 非常重要 推荐,以避免代码注入和代码重放攻击。

【讨论】:

是的,你的回答很有帮助,正是我所需要的。

以上是关于如何使用 Keycloak 和 PKCE 流实现 React SPA 身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

Keycloak、PKCE 和外部 IDP

无法使用 openid_client 通过带有 keycloak 的 pkce Flutter 应用程序进行身份验证

使用 PKCE 的授权代码流如何比没有 client_secret 的授权代码流更安全

在带有 PKCE 的 OAuth 授权流中使用时如何在 Azure 应用注册中启用 CORS?

使用openid_client通过带有ke​​ycloak的pkce颤振应用程序进行身份验证后如何获取刷新令牌?

在 PKCE 增强的授权代码流中保护 code_verifier 的最佳实践