我有一个简单的资源服务器应用程序,用Sping Boot ,这是yaml文件:
server:
port: 8081
servlet:
context-path: /resource-server-jwt
spring:
security:
oauth2:
resourceserver:
jwt:
issuer-uri: http://localhost:8083/auth/realms/rasool
现在,我想在配置或代码中进行更改,以强制Spring Security使用授权服务器的调用内省端点来验证JWT标记,而不是使用密钥进行本地验证,但我没有找到任何spring security docs所说的方法。
1条答案
按热度按时间voase2hg1#
Spring引导
spring.security.oauth2.resourceserver.jwt.*
配置属性适用于JWT解码器。对于标记introspection,请改用
spring.security.oauth2.resourceserver.opaque-token.*
属性(标记可以是任何格式,包括JWT)。“opaque”表示资源服务器将标记视为“黑盒”,资源服务器将验证和属性检索委托给内省端点上的授权服务器:来自
.well-known/openid-configuration
的自检URI如果您使用Java配置,则交换机大致相同:将
http.oauth2ResourceServer().jwt()...
替换为http.oauth2ResourceServer().opaqueToken()...
关于授权服务器上声明的客户端的一些注意事项
授权服务器自检端点上的资源服务器自检标记使用客户端凭据流:对于它处理的每个请求,资源服务器都将向授权服务器发送一个请求以获取令牌详细信息。这可能会对性能产生严重影响。是否确实要切换到令牌自检?
因此,在上述属性中,必须使用以下内容配置客户端:
confidential
如果你还没有的话,可以创建一个。一旦保存了配置,你将从“凭证标签”中获得客户端密码。
请注意,您应该有其他(公共)客户端来标识用户(从Web /移动的应用程序或REST客户端),并代表这些用户查询资源服务器。
从授权服务器的Angular 来看,这意味着访问令牌将被发放给(公共)客户端,并由另一个(机密)客户端进行自检。
完整工作样品here
它为资源服务器做了一些有用的事情: