You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring OAuth2技术咨询:如何获取所有clientId?

Spring OAuth2 获取所有 ClientId 的方案

一、获取系统中所有已注册的 ClientId

在Spring OAuth2里,客户端信息的管理核心是ClientDetailsService接口——不管你用内存、数据库还是自定义存储,都可以通过这个接口来获取所有clientId:

  • 内存存储场景
    如果你用的是默认的InMemoryClientDetailsService,直接注入这个bean并调用getClientDetailsIds()就行:

    @Autowired
    private InMemoryClientDetailsService clientDetailsService;
    
    public Set<String> getAllClientIds() {
        return clientDetailsService.getClientDetailsIds();
    }
    
  • JDBC存储场景
    用数据库存客户端信息的话,JdbcClientDetailsService同样提供了getClientDetailsIds()方法:

    @Autowired
    private JdbcClientDetailsService clientDetailsService;
    
    public Set<String> getAllClientIds() {
        return clientDetailsService.getClientDetailsIds();
    }
    

    当然你也可以直接查默认的oauth_client_details表,执行SELECT client_id FROM oauth_client_details;,但更推荐用Service方法,避免和底层存储耦合。

  • 自定义存储场景
    要是你自己实现了ClientDetailsService,那就得在你的实现类里加个获取所有clientId的方法,比如从MongoDB、Redis这类数据源里查询所有客户端的clientId字段。

二、从OAuth2Authentication里拿所有ClientId?做不到!

你现在用的auth.getOAuth2Request().getClientId()只能拿到当前这次认证请求对应的那个clientId。原因很简单:OAuth2Authentication是和单次认证会话绑定的,它记录的是某个客户端(或者用户通过某个客户端)发起的一次认证信息,所以它的OAuth2Request里只会包含当前请求的客户端数据,根本不会存储所有客户端的列表。

想要获取所有clientId,还是得靠前面说的ClientDetailsService,别在OAuth2Authentication上浪费时间啦。


内容的提问来源于stack exchange,提问作者Cataclysm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:16:50