如何在 Spring 中使用 JDBC 为 ClientDetailsS​​erviceConfigurer 添加客户端?

2023-12-22

我的内存工作如下:

@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {

        clients.inMemory()
               .withClient("clientapp")
               .authorizedGrantTypes("password", "refresh_token")
               .authorities("USER")
               .scopes("read", "write")
               .resourceIds(RESOURCE_ID)
               .secret("123456");
}

我想使用 JDBC 实现。为此,我创建了下表(使用 MySQL):

-- Tables for OAuth token store

CREATE TABLE oauth_client_details (
  client_id               VARCHAR(255) PRIMARY KEY,
  resource_ids            VARCHAR(255),
  client_secret           VARCHAR(255),
  scope                   VARCHAR(255),
  authorized_grant_types  VARCHAR(255),
  web_server_redirect_uri VARCHAR(255),
  authorities             VARCHAR(255),
  access_token_validity   INTEGER,
  refresh_token_validity  INTEGER,
  additional_information  VARCHAR(4096),
  autoapprove             TINYINT
);

CREATE TABLE oauth_client_token (
  token_id          VARCHAR(255),
  token             BLOB,
  authentication_id VARCHAR(255),
  user_name         VARCHAR(255),
  client_id         VARCHAR(255)
);

CREATE TABLE oauth_access_token (
  token_id          VARCHAR(255),
  token             BLOB,
  authentication_id VARCHAR(255),
  user_name         VARCHAR(255),
  client_id         VARCHAR(255),
  authentication    BLOB,
  refresh_token     VARCHAR(255)
);

CREATE TABLE oauth_refresh_token (
  token_id       VARCHAR(255),
  token          BLOB,
  authentication BLOB
);

CREATE TABLE oauth_code (
  code           VARCHAR(255),
  authentication BLOB
);

我需要在 MySQL 表中手动添加客户端吗?

我试过这个:

clients.jdbc(dataSource).withClient("clientapp")
               .authorizedGrantTypes("password", "refresh_token")
               .authorities("USER")
               .scopes("read", "write")
               .resourceIds(RESOURCE_ID)
               .secret("123456");

希望Spring能够在好的表中插入正确的东西,但它似乎并没有这样做。为什么你可以在之后进一步链接jdbc() ?


请按照以下步骤操作:

  1. 将此 schema.sql 放入资源文件夹中,以便在启动服务器后由 SpringBoot 检测到。如果您不使用 Spring Boot,不用担心,只需从任何 Mysql 应用程序客户端(phpmyadmin、HeidiSQL、Navicat ..)导入此脚本即可

    drop table if exists oauth_client_details; create table oauth_client_details ( client_id VARCHAR(255) PRIMARY KEY, resource_ids VARCHAR(255), client_secret VARCHAR(255), scope VARCHAR(255), authorized_grant_types VARCHAR(255), web_server_redirect_uri VARCHAR(255), authorities VARCHAR(255), access_token_validity INTEGER, refresh_token_validity INTEGER, additional_information VARCHAR(4096), autoapprove VARCHAR(255) ); drop table if exists oauth_client_token; create table oauth_client_token ( token_id VARCHAR(255), token LONG VARBINARY, authentication_id VARCHAR(255) PRIMARY KEY, user_name VARCHAR(255), client_id VARCHAR(255) ); drop table if exists oauth_access_token; create table oauth_access_token ( token_id VARCHAR(255), token LONG VARBINARY, authentication_id VARCHAR(255) PRIMARY KEY, user_name VARCHAR(255), client_id VARCHAR(255), authentication LONG VARBINARY, refresh_token VARCHAR(255) ); drop table if exists oauth_refresh_token; create table oauth_refresh_token ( token_id VARCHAR(255), token LONG VARBINARY, authentication LONG VARBINARY ); drop table if exists oauth_code; create table oauth_code ( code VARCHAR(255), authentication LONG VARBINARY ); drop table if exists oauth_approvals; create table oauth_approvals ( userId VARCHAR(255), clientId VARCHAR(255), scope VARCHAR(255), status VARCHAR(10), expiresAt TIMESTAMP, lastModifiedAt TIMESTAMP ); drop table if exists ClientDetails; create table ClientDetails ( appId VARCHAR(255) PRIMARY KEY, resourceIds VARCHAR(255), appSecret VARCHAR(255), scope VARCHAR(255), grantTypes VARCHAR(255), redirectUrl VARCHAR(255), authorities VARCHAR(255), access_token_validity INTEGER, refresh_token_validity INTEGER, additionalInformation VARCHAR(4096), autoApproveScopes VARCHAR(255) );
  2. 在 OthorizationServer 中注入您的 DataSource、authenticationManager、UserDetailsS​​ervice

    @Autowired private MyUserDetailsService userDetailsService; @Inject private AuthenticationManager authenticationManager; @Autowired private DataSource dataSource;
  3. 您需要创建这两个 bean

    @Bean public JdbcTokenStore tokenStore() { return new JdbcTokenStore(dataSource); } @Bean protected AuthorizationCodeServices authorizationCodeServices() { return new JdbcAuthorizationCodeServices(dataSource); }

    并且请不要忘记 AuthorizationServer 类之上的 @Configuration

  4. Configure your clients apps to be created in your mysql database: clients.jdbc(dataSource).withClient("clientapp") .authorizedGrantTypes("password", "refresh_token") .authorities("USER") .scopes("read", "write") .resourceIds(RESOURCE_ID) .secret("123456");

    你已经这样做了。

  5. 最重要的事情(我认为你忘记了......)是:使用 AuthorizationServerEndpointsConfigurer 配置你的端点:

    endpoints.userDetailsService(userDetailsService) .authorizationCodeServices(authorizationCodeServices()).authenticationManager(this.authenticationManager).tokenStore(tokenStore()).approvalStoreDisabled();

就是这样,现在它应该可以工作了;)

请随时询问更多...我很乐意提供帮助

我已经从推特上给你发了一条消息!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Spring 中使用 JDBC 为 ClientDetailsS​​erviceConfigurer 添加客户端? 的相关文章

随机推荐

  • Javafx 2 树视图过滤

    如何在 JavaFX 2 中过滤节点TreeView 我有一个TextField我想根据内容过滤所有节点 例如节点标签 TextField Thanks 这是我编写的可重复使用的可过滤树项目类 过滤器应该绑定在谓词属性 你呢must use
  • 根据Text动态获取UILabel的高度对于iOS 7.0和iOS 6.1返回不同的值

    我正在使用此方法动态获取 UILabel 的高度 CGSize GetSizeOfLabelForGivenText UILabel label Font UIFont fontForLabel Size CGSize LabelSize
  • 将文本读取为 UTF-8 编码

    假设我编写一个函数来解析包含德语的输入流 下面是一个玩具示例 以下内容在我的机器上有效 因为 UTF8 是标准 readLines textConnection Z rich readLines textConnection Z u00FC
  • drawRect 和 CGGraphicsContext 如何工作?

    我正在处理 Core Graphic 中的一些内容 并且正在寻找有关几个主题的一些额外说明 绘制矩形 我对此有所了解 并且知道这是 UIView 的所有绘图方面的所在 但我只是不清楚幕后发生的事情 当我创建一个 UIView 并填写 dra
  • 现在有什么好的 Eclipse 持续测试插件吗?

    我用过麻省理工学院持续测试 http groups csail mit edu pag continuoustesting 插件在过去 但它早已过时 并且不再与任何接近现代版本的 Eclipse 兼容 有人有好的替代品吗 免费自然是首选 我
  • 通过 gradle FileTree.include 删除目录

    我想说 clean delete fileTree a include subdir include aFile 删除目录 subdir 和文件 aFile 但 subdir 并没有被删除 我可以明确地列出它 clean delete a
  • ASP.NET Web Api 依赖注入 - 单例与否

    我正在使用 asp net 构建一个 Web api 并使用 UnityContainer 来处理依赖项 例如 我的身份验证控制器可以依赖于身份验证服务 class AuthController ApiController private
  • MVCDonutCaching - 当父项未缓存甜甜圈时,子项操作出现问题

    我正在使用很棒的MVCDonut缓存 http mvcdonutcaching codeplex com 从 Nuget 打包 以便缓存整个页面 同时保留某些部分不缓存 该过程很简单 一切都按预期进行 我缓存如下 DonutOutputCa
  • JDK8 与 -source 1.7 [默认方法]

    我有以下课程 public class ZonedDateTimeToInstant public static void main final String args throws NoSuchMethodException assert
  • 不使用分号的计算表达式

    给定像 68 32 这样的输入表达式 我们必须在程序中不使用分号进行计算 如果它是 if 或 for 循环内的东西 参考 https www spoj pl problems EXPR2 https www spoj pl problems
  • 如何在postgresql的pg_hba.conf文件中指定主机名?

    我们想要创建一条像这样的线 托管所有所有 vs1 nsdp ir md5 在 pg hba conf 文件中 但它不理解这个主机名 它的IP是192 168 1 60 当我们使用IP地址时就可以了 但它不适用于主机名 我们在我们的 dns
  • Django-rest-auth (dj-rest-auth) 自定义用户注册

    我正在使用 dj rest auth https dj rest auth readthedocs io en latest https dj rest auth readthedocs io en latest 并尝试实现自定义注册表单
  • docker反向代理DNS/网络问题

    我会尝试解释并把它画出来 我想要实现的目标 对不起 糟糕的油漆图 现在 如果我从 10 10 10 0 网络访问它 它就可以完美运行 问题是 DNS 将 jenkins network com 解析为 10 10 10 0 网络 我想通过代
  • 为什么我在没有释放按键的情况下收到 Pygame KEYUP 事件?

    首先 我是一个完全的初学者 所以我没有任何经验 但是我在过去两天搜索了所有可能的地方来解决问题 但找不到它 我在带有 Raspbian 的 Raspberry PI 3 上使用它 我正在尝试在 Python 3 6 中构建一个简单的代码 它
  • Firebase 消息,onMessage 未被调用

    这就是我调用发送消息的方式 sendMessage var key VERY LONG KEY dffdADFDFD vdfDafd var to VERY LONG KEY ADEWerew vdfDafd var notificatio
  • axios - 如何不在多个参数中添加[]?

    Axios 添加方括号如果有多个具有相同名称的参数 则传递给该参数 问题是我不需要包含那些括号 因为我使用Django Rest Framework and Django Filters 如果我使用这个符号 我该如何做到这一点 axios
  • java中如何捕获嵌套异常

    我正在使用 Apache Xalan v 2 7 1 在 Apache Tomcat v6 0 32 中将 XML 转换为 XHTML 有时加载会被客户端取消并引发以下异常 javax xml transform TransformerEx
  • WPF 中的高效实时日志查看器

    我希望 WPF 中有一个高效的日志查看器控件 它可以在添加消息时简单地显示实时日志 连接来自日志系统的通知是没有问题的 但我担心一旦日志行数量变大 日志窗口将随着每个附加日志行而变得缓慢 日志通知事件将仅提供一个日志字符串 以及一些元数据
  • (为什么)我应该“始终”在任何 vue.js 应用程序中使用组件,无论多么简单?

    我刚刚开始使用 vue js 并且已经从文档的第一个入门章节创建了我需要的大部分非常小的功能 现在我想添加一些测试 以确保我的功能在更改后始终有效 通常我会进行 TDD 但这次我必须先学习 vue 然后决定是否继续使用它 所以在寻找文档时我
  • 如何在 Spring 中使用 JDBC 为 ClientDetailsS​​erviceConfigurer 添加客户端?

    我的内存工作如下 Override public void configure ClientDetailsServiceConfigurer clients throws Exception clients inMemory withCli