spring-security - 从查询参数动态设置注册 id
问题描述
当调用端点时,我有以下控制器来获取注册 ClientA。
@GetMapping("/token")
fun token(
@RegisteredOAuth2AuthorizedClient("clientA") authorizedClient: OAuth2AuthorizedClient
): ResponseEntity<String> {
val token = tokenService.getToken()
return ResponseEntity(token, HttpStatus.OK)
}
我想让客户端作为一个query param
并动态启动 OAuth2 进程。我怎样才能实现它?像下面这样的东西:
@GetMapping("/token?client={client}")
fun token(
@RegisteredOAuth2AuthorizedClient(${client}) authorizedClient: OAuth2AuthorizedClient
): ResponseEntity<String> {
val token = tokenService.getToken()
return ResponseEntity(token, HttpStatus.OK)
}
解决方案
我的解决方案是使用default authorization uri
anddefaultSuccessUrl("/token")
目标是轻松扩展客户端,此解决方案可以实现相同的目标。
解决方案:
- 注册
clientA
_application.yml
clientA:
client-id: Any
redirect-uri: http://localhost/index
provider: clientA-provider
scope: launch
client-name: clientA
client-authentication-method: none
authorization-grant-type: authorization_code
- 现在端点
/oauth2/authorization/clientA
是由 spring security 自动创建的。要获取令牌,请调用上面的 url。
/token
成功授权后,由于 defaultSuccessUrl("/token") ,端点转到。
下面显示了相关的代码片段:
override fun configure(http: HttpSecurity) {
http.csrf()
.disable()
.oauth2Login()
.authorizationEndpoint()
.and()
.tokenEndpoint()
.and()
.defaultSuccessUrl("/token")
@Controller
@RequestMapping("/token")
class LaunchController(private val tokenService: TokenService) {
@GetMapping
fun token(): ResponseEntity<String> {
val token = tokenService.getToken()
return ResponseEntity.ok(token)
}
}
推荐阅读
- android - 如何在自定义复合约束布局中布局 2 个文本视图
- python - 循环遍历数据框列后如何附加列表?
- ubuntu - 通过远程服务器上的 SSH 启动和停止 Tomcat
- contiki - 如何在 Contiki 中感知通道?
- shortest-path - SSSP 算法:最小距离但在一定数量的“跳”下
- python-3.x - 如何将默认字典与列表中的值解析为独立字典
- stream - OCaml Marshal 超大数据结构
- python-3.x - 解析时未识别制表符
- javascript - HTML 和 CSS:单击按钮后使用垂直滚动条水平拆分页面
- c - 逆向工程 - sprintf 协助