如何将 Spring Security OAuth 2.0 客户端存储配置到数据库

Posted

技术标签:

【中文标题】如何将 Spring Security OAuth 2.0 客户端存储配置到数据库【英文标题】:How to configure Spring Security OAuth 2.0 client store to database 【发布时间】:2015-06-21 06:00:13 【问题描述】:

我在https://github.com/royclarkson/spring-rest-service-oauth找到了一篇关于Spring REST Service OAuth的教程

但我想知道如何配置存储到数据库的客户端,以便我可以轻松管理。 在教程客户端配置存储在内存中的类 OAuth2ServerConfiguration.java

    @Override
    public void configure(ClientDetailsServiceConfigurer clients)
            throws Exception 
        // @formatter:off
        clients.inMemory().withClient("clientapp")
                .authorizedGrantTypes("password", "refresh_token")
                .authorities("USER").scopes("read", "write")
                .resourceIds(RESOURCE_ID).secret("123456");
        // @formatter:on
    

【问题讨论】:

【参考方案1】:

@OhadR 谢谢你的回答,真的很感激!

我确实通过这个帖子找到了答案:error in Spring AuthorizationServerConfigurerAdapter when assigning Jdbc datastore to ClientDetailsService

为此,我只需要两步:

    创建代表客户详细信息的表
   CREATE TABLE oauth_client_details (
      client_id VARCHAR(256) PRIMARY KEY,
      resource_ids VARCHAR(256),
      client_secret VARCHAR(256),
      scope VARCHAR(256),
      authorized_grant_types VARCHAR(256),
      web_server_redirect_uri VARCHAR(256),
      authorities VARCHAR(256),
      access_token_validity INTEGER,
      refresh_token_validity INTEGER,
      additional_information VARCHAR(4096),
      autoapprove VARCHAR(256)
    );
    定义的 JDBC 配置
DataSource dataSource = DataSourceBuilder.create()
    .driverClassName("com.mysql.jdbc.Driver")
    .url("jdbc:mysql://localhost:3306/gsrestdb").username("***").password("***").build();

    clients.jdbc(dataSource);

【讨论】:

我认为您需要创建此处列出的所有表 github.com/spring-projects/spring-security-oauth/blob/master/… ,除了 ClientDetails 表 @soulmachine :是的,你说得对,我需要创建表模式,感谢链接。 @prptn DataSourceBuilder.create() 代码在哪里?在哪个类和方法中?以及如何告诉 OAuth 使用数据库? @prptn 如果您希望将令牌存储在数据库中,您只需要额外的表,否则您不需要创建其他表。【参考方案2】:

我相信这就是您正在寻找的答案:

https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/provider/client/JdbcClientDetailsService.java

这是 JDBC 的 Spring-oAuth Impl 类。

HTH

【讨论】:

我不确定链接到源代码是回答有关如何实现某些东西的问题的最有用的方法。

以上是关于如何将 Spring Security OAuth 2.0 客户端存储配置到数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Spring Security OAuth 2.0 客户端存储配置到数据库

Spring Security OAuth2 - 将参数添加到授权 URL

您如何在代理后面使用 spring-security OAuth2,但仅将 ForwardedHeaderTransformer 用于 OAuth 组件

Grails spring-security-oauth-google:如何设置

Spring Security/OAuth 如何找出 AuthenticationPrincipal

Spring Security实现OAuth2.0授权服务 - 进阶版