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 没有为这种开箱即用的东西带来过滤器实现。为此,您可能需要编写自己的自定义 Filter
、Realm
、Token
、Info
、Matcher
和 Principal
。
或者,在 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,isPermitted() 不工作
apache shiro 使用 Hashing Credentials 无法成功登录