我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶!

1 前言

之前的文章《Spring Cloud Data Flow整合Cloudfoundry UAA服务做权限控制》介绍了如何用UAA来保护Spring Cloud Data Flow,但使用是内存数据库,重启UAA后就丢失了配置信息。而且需要通过Ruby gem安装uaac命令行工具,有点麻烦,比较不是所有人都会使用Ruby的。

本文将解决这两个问题,问题一通过引入PostgreSQL来解决;问题二通过UAA REST API来解决。

Spring Cloud Data Flow相关文章:

Spring Cloud Data Flow初体验,以Local模式运行

把Spring Cloud Data Flow部署在Kubernetes上,再跑个任务试试

Spring Cloud Data Flow用Shell来操作,方便建立CICD

被Spring坑了一把,查看源码终于解决了DataFlow部署K8s应用的问题

2 连接PostgreSQL数据库

为方便,我们通过Docker来启动PostgreSQL,可以参考《Docker启动PostgreSQL并推荐几款连接工具》,命令如下:

  1. docker run -itd \
  2. --name pkslow-postgres \
  3. -e POSTGRES_DB=pkslow \
  4. -e POSTGRES_USER=pkslow \
  5. -e POSTGRES_PASSWORD=pkslow \
  6. -e PGDATA=/var/lib/postgresql/data/pgdata \
  7. -p 5432:5432 \
  8. postgres:10

配置uaa.yml连接数据库如下:

  1. spring_profiles: default,postgresql
  2. database:
  3. driverClassName: org.postgresql.Driver
  4. url: jdbc:postgresql://localhost:5432/pkslow
  5. username: pkslow
  6. password: pkslow
  7. maxactive: 15
  8. maxidle: 10
  9. minidle: 3
  10. removeabandoned: false
  11. logabandoned: true
  12. abandonedtimeout: 300
  13. evictionintervalms: 15000
  14. caseinsensitive: false

配置完成启动UAA,就可以看到PostgreSQL已经自动生成了许多相关的表了。

这些表还是非常有用的,你可以看到一些默认的配置及关联性。表结构和数据是了解逻辑的一个重要入口。

3 通过UAA API配置

之前我们是通过uaac命令来创建客户端、群组和用户等,这次我们不再依赖uaac,而是通过访问Api来操作。要使用之前,我们需要添加Json依赖,否则会报错。如下:

  1. <!--json-->
  2. <dependency>
  3. <groupId>com.fasterxml.jackson.core</groupId>
  4. <artifactId>jackson-core</artifactId>
  5. <version>2.9.9</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>com.fasterxml.jackson.core</groupId>
  9. <artifactId>jackson-annotations</artifactId>
  10. <version>2.9.9</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>com.fasterxml.jackson.core</groupId>
  14. <artifactId>jackson-databind</artifactId>
  15. <version>2.9.9</version>
  16. </dependency>

(1)获取admin的Token

我们要进行操作,首先要有admin管理员的账号,默认用户名和密码是admin:adminsecret,获取它的Token命令如下:

  1. curl -v -d "username=admin&password=adminsecret&client_id=admin&grant_type=client_credentials" -u "admin:adminsecret" http://localhost:8080/uaa/oauth/token

UAA服务器则会返回一个很长的Token,我们需要把它记录下来,后续都要使用到它。

(2)创建客户端

一个客户端对应一个应用的鉴权,这里创建一个名叫dataflow的客户端,命令如下:

  1. curl 'http://localhost:8080/uaa/oauth/clients' -i -X POST \
  2. -H 'Content-Type: application/json' \
  3. -H 'Authorization: Bearer eyJhbGciOiJSUzI1Nxxxxxx' \
  4. -H 'Accept: application/json' \
  5. -d '{
  6. "name" : "dataflow",
  7. "client_id" : "dataflow",
  8. "client_secret" : "dataflow",
  9. "scope" : ["cloud_controller.read", "cloud_controller.write", "openid", "password.write", "scim.userids", "sample.create", "sample.view", "dataflow.create", "dataflow.deploy", "dataflow.destroy", "dataflow.manage", "dataflow.modify", "dataflow.schedule", "dataflow.view"],
  10. "resource_ids" : [ ],
  11. "authorized_grant_types" : [ "password", "authorization_code", "client_credentials", "refresh_token" ],
  12. "redirect_uri" : [ "http://localhost:9393/login" ],
  13. "authorities" : ["uaa.resource", "dataflow.create", "dataflow.deploy", "dataflow.destroy", "dataflow.manage", "dataflow.modify", "dataflow.schedule", "dataflow.view", "sample.view", "sample.create"],
  14. "token_salt" : "m6c6fB",
  15. "autoapprove" : "openid",
  16. "allowedproviders" : [ "uaa", "ldap", "my-saml-provider" ]
  17. }'

注意:Bearer后面是adminToken,太长这里不贴出来了。

(3)创建群组

群组对应的是权限,只有在群组里的用户,才有相关权限。创建群组的同时,还可以添加用户,指定members就行,这里不添加。命令如下:

  1. curl 'http://localhost:8080/uaa/Groups' -i -X POST \
  2. -H 'Content-Type: application/json' \
  3. -H 'Authorization: Bearer eyJhbGciOiJSUzxxx' \
  4. -d '{
  5. "displayName" : "dataflow.view",
  6. "description" : "dataflow.view"
  7. }'

创建成功后会返回群组UUID,需要记录下来。

(4)创建用户

这里说的用户就是登陆客户端应用的具体用户了,这里创建用户larry,密码为larry,命令如下:

  1. curl 'http://localhost:8080/uaa/Users' -i -X POST \
  2. -H 'Accept: application/json' \
  3. -H 'Authorization: Bearer eyJhbGciOiJSxxx' \
  4. -H 'Content-Type: application/json' \
  5. -d '{
  6. "externalId" : "test-user",
  7. "meta" : {
  8. "version" : 0,
  9. "created" : "2020-12-18T15:55:56.465Z"
  10. },
  11. "userName" : "larry",
  12. "name" : {
  13. "formatted" : "Larry Deng",
  14. "familyName" : "Deng",
  15. "givenName" : "Larry"
  16. },
  17. "emails" : [ {
  18. "value" : "larry@pkslow.com",
  19. "primary" : true
  20. } ],
  21. "phoneNumbers" : [ {
  22. "value" : "666666"
  23. } ],
  24. "active" : true,
  25. "verified" : true,
  26. "origin" : "",
  27. "password" : "larry",
  28. "schemas" : [ "urn:scim:schemas:core:1.0" ]
  29. }'

创建成功后会返回用户UUID,需要记录下来。

(5)把用户加到群组里

当群组和用户都创建成功后,就把用户添加到群组中去,这里是通过UUID来关联的,命令如下:

  1. curl 'http://localhost:8080/uaa/Groups/d633a216-029b-4f44-a7e0-15c5fd326ef2/members' -i -X POST \
  2. -H 'Content-Type: application/json' \
  3. -H 'Authorization: Bearer eyJhbGciOiJSUzIxxx' \
  4. -d '{"origin":"uaa","type":"USER","value":"a45a62a1-47ad-4345-bcef-ba12d7fd97e4"}'

URL的是群组UUID,消息体的是用户的UUID。

4 登陆认证

配置完成后,可以查看数据库来认证。当然最直观的还是直接登陆Data Flow来试试:

可以看到,用户larry成功登陆,并且只有只读权限,没有添加、修改等操作功能了。这是因为我们只添加了一个群组dataflow.view,认证通过!

5 总结

知道了基本操作后,其它操作也就容易了。更多API接口请查看官网地址:https://docs.cloudfoundry.org/api/uaa/version/74.30.0/index.html

代码请查看:https://github.com/LarryDpk/pkslow-samples


欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

多读书,多分享;多写作,多整理。

Spring Cloud Data Flow整合UAA使用外置数据库和API接口的更多相关文章

  1. Spring Cloud Data Flow整合UAA之使用LDAP进行账号管理

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 Spring Cloud Data Flow整合UAA的文章已经写了两篇,之前的方案是把用户信息保存在数据库中: ...

  2. Spring Cloud Data Flow整合Cloudfoundry UAA服务做权限控制

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 关于Spring Cloud Data Flow这里不多介绍,有兴趣可以看下面的文章.本文主要介绍如何整合Dat ...

  3. Spring Cloud Data Flow用Shell来操作,方便建立CICD

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! 之前我们用两篇文章讲解了Spring Cloud Data Flow,例子都是用UI操作的,但我们在Linux系统上经常是无 ...

  4. Spring Cloud Data Flow 中的 ETL

    Spring Cloud Data Flow 中的 ETL 影宸风洛 程序猿DD 今天 来源:SpringForAll社区 1 概述 Spring Cloud Data Flow是一个用于构建实时数据 ...

  5. 【SFA官方译文】:Spring Cloud Data Flow中的ETL

    原创: 影宸风洛 SpringForAll社区 昨天 原文链接:https://www.baeldung.com/spring-cloud-data-flow-etl 作者:Norberto Ritz ...

  6. Spring Cloud Data Flow初体验,以Local模式运行

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Spring Cloud Data Flow是什么,虽然已经出现一段时间了,但想必很多人不知道,因为在项目中很少有人用.不仅 ...

  7. 把Spring Cloud Data Flow部署在Kubernetes上,再跑个任务试试

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Spring Cloud Data Flow在本地跑得好好的,为什么要部署在Kubernetes上呢?主要是因为Kubern ...

  8. Spring Boot + Spring Cloud 构建微服务系统(七):API服务网关(Zuul)

    技术背景 前面我们通过Ribbon或Feign实现了微服务之间的调用和负载均衡,那我们的各种微服务又要如何提供给外部应用调用呢. 当然,因为是REST API接口,外部客户端直接调用各个微服务是没有问 ...

  9. Spring Cloud Alibaba Sentinel 整合 Feign 的设计实现

    作者 | Spring Cloud Alibaba 高级开发工程师洛夜 来自公众号阿里巴巴中间件投稿 前段时间 Hystrix 宣布不再维护之后(Hystrix 停止开发...Spring Cloud ...

随机推荐

  1. 前端基础问题:CSS vertical-align 属性

    CSS vertical-align 属性与基线的那些事~ 定义和用法: vertical-align 属性设置元素的垂直对齐方式. vertical-align只对内联元素(inline.inlin ...

  2. JavaScript中DOM与BOM的区别

    1.BOM BOM全称为Brower Object Model,中文翻译为浏览器对象模型,提供了独立于内容而与浏览器窗口进行交互的对象.描述了与浏览器进行交互的方法和接口.通过BOM可以用来获取或设置 ...

  3. 【Azure 环境】基于Azure搭建企业级内部站点, 配置私有域名访问的详细教程 (含演示动画)

    前言 在Azure中,可以通过App Service快速部署,构建自定义站点(PaaS服务).默认情况下,这些站点被访问URL都是面向公网,通过公网进行解析.为了最好的安全保障,是否可以有一种功能实现 ...

  4. raft协议

    一.Raft一致性算法 Eureka:Peer To Peer,每个节点的地位都是均等的,每个节点都可以接收写入请求,每个节点接收请求之后,进行请求打包处理,异步化延迟一点时间,将数据同步给 Eure ...

  5. MySQL角色(role)功能介绍

    前言: 上篇文章,我们介绍了 MySQL 权限管理相关知识.当数据库实例中存在大量的库或用户时,权限管理将会变得越来越繁琐,可能要频繁进行权限变更.MySQL 8.0 新增了 role 功能,使得权限 ...

  6. Truncate用法详解

    前言: 当我们想要清空某张表时,往往会使用truncate语句.大多时候我们只关心能否满足需求,而不去想这类语句的使用场景及注意事项.本篇文章主要介绍truncate语句的使用方法及注意事项. 1.t ...

  7. Python正则表达式的七个使用范例

    本文由 伯乐在线 - 左手的灵魂 翻译.未经许可,禁止转载!英文出处:thegeekstuff.欢迎加入翻译组.http://blog.jobbole.com/74844/ 作为一个概念而言,正则表达 ...

  8. ecl函数的用法

    相关函数 fork, execle, execlp, execv, execve, execvp Windows下头文件 #include <process.h> Linux下头文件 #i ...

  9. Scrum Meeting 3

    Basic Info where:三号教学楼 when:2020/4/27 target: 简要汇报一下已完成任务,下一步计划与遇到的问题 Progress Team Member Position ...

  10. 【Web前端HTML5&CSS3】06-盒模型

    笔记来源:尚硅谷Web前端HTML5&CSS3初学者零基础入门全套完整版 目录 盒模型 1. 文档流(normalflow) 2. 块元素 3. 行内元素 4. 盒子模型 盒模型.盒子模型.框 ...