apache shiro:在 shiro.ini 中添加啥以使用 JWT 和 keycloak 作为授权服务器进行客户端身份验证

Posted

技术标签:

【中文标题】apache shiro:在 shiro.ini 中添加啥以使用 JWT 和 keycloak 作为授权服务器进行客户端身份验证【英文标题】:apache shiro: what to add in shiro.ini for client authentication using JWT with keycloak as authorization serverapache shiro:在 shiro.ini 中添加什么以使用 JWT 和 keycloak 作为授权服务器进行客户端身份验证 【发布时间】:2018-11-09 03:32:07 【问题描述】:

我对 shiro 和 keycloak 很陌生,我不知道如何将 JWT 配置添加到 shiro.ini 中,以便使用 keycloak 作为授权服务器来验证用户。

【问题讨论】:

我自己没有使用过 Shiro,但阅读了文档后,它看起来与 KC 重叠。你有什么理由同时使用两者吗? 是的,实际上我已经在 java 中构建了 rest api,我想使用 shiro 保护那个 rest api。因此,如果用户打开浏览器并访问该 url,shiro 会将其重定向到 keycloak 进行身份验证,并且在身份验证后该用户可以访问 url。 您可以使用此扩展程序将 Shiro 与 OpenId Connect 集成:github.com/bujiio/buji-pac4j 【参考方案1】:

您尝试使用资源和授权服务器归档的内容类似于 rfc6749 Implicit Grant。 Shiro 没有为这种开箱即用的东西带来过滤器实现。为此,您可能需要编写自己的自定义 FilterRealmTokenInfoMatcherPrincipal

或者,在 GitHub 上有一个 oAuth2 Server 和 Client 示例,使用 Shiro 并实现了上述类。它已经过时,但仍然给出了您需要做什么的基本概念。

如果您不喜欢遵循rfc6749 规范,您可以简单地实现AccessControlFilter 并在请求的Authorization 标头中不存在承载时将您的用户重定向到授权服务器。已经有一个关于如何实现这个here的教程。特别是,您应该查看示例 JWTVerifyingFilter 中的 onAccessDenied 代码,因为这是您应该进行重定向的方法。

【讨论】:

【参考方案2】:

我建议您关注buji-pac4j-demo 并查看那里的shiro.ini 文件。它具有不同 Web 服务身份验证协议(包括 JWT)的实现。

我相信这是相关的sn-p:

signingConfig = org.pac4j.jwt.config.signature.SecretSignatureConfiguration
signingConfig.secret = 12345678901234567890123456789012
encryptionConfig = org.pac4j.jwt.config.encryption.SecretEncryptionConfiguration
encryptionConfig.secret = 12345678901234567890123456789012

jwtAuthenticator = org.pac4j.jwt.credentials.authenticator.JwtAuthenticator
jwtAuthenticator.signatureConfiguration = $signingConfig
jwtAuthenticator.encryptionConfiguration = $encryptionConfig

parameterClient = org.pac4j.http.client.direct.ParameterClient
parameterClient.parameterName = token
parameterClient.authenticator = $jwtAuthenticator
parameterClient.supportGetRequest = true
parameterClient.supportPostRequest = false

【讨论】:

以上是关于apache shiro:在 shiro.ini 中添加啥以使用 JWT 和 keycloak 作为授权服务器进行客户端身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Apache Shiro:您将如何管理用户?

Apache Shiro,isPermitted() 不工作

apache shiro 使用 Hashing Credentials 无法成功登录

Apache shiro 属性“sessionManager.globalSessionTimeout”不存在

在 apache shiro 上为主题添加信息

无法传递参数apache shiro jsp servlet