我最新最全的文章都在 南瓜慢说 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并推荐几款连接工具》,命令如下:

docker run -itd \--name pkslow-postgres \-e POSTGRES_DB=pkslow \-e POSTGRES_USER=pkslow \-e POSTGRES_PASSWORD=pkslow \-e PGDATA=/var/lib/postgresql/data/pgdata \-p 5432:5432 \postgres:10

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

spring_profiles: default,postgresqldatabase:driverClassName: org.postgresql.Driverurl: jdbc:postgresql://localhost:5432/pkslowusername: pkslowpassword: pkslowmaxactive: 15maxidle: 10minidle: 3removeabandoned: falselogabandoned: trueabandonedtimeout: 300evictionintervalms: 15000caseinsensitive: false

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

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

3 通过UAA API配置

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

<!--json-->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.9</version>
</dependency>
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.9</version>
</dependency>
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.9</version>
</dependency>

(1)获取admin的Token

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

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的客户端,命令如下:

curl 'http://localhost:8080/uaa/oauth/clients' -i -X POST \-H 'Content-Type: application/json' \-H 'Authorization: Bearer eyJhbGciOiJSUzI1Nxxxxxx' \-H 'Accept: application/json' \-d '{"name" : "dataflow","client_id" : "dataflow","client_secret" : "dataflow","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"],"resource_ids" : [ ],"authorized_grant_types" : [ "password", "authorization_code", "client_credentials", "refresh_token" ],"redirect_uri" : [ "http://localhost:9393/login" ],"authorities" : ["uaa.resource", "dataflow.create", "dataflow.deploy", "dataflow.destroy", "dataflow.manage", "dataflow.modify", "dataflow.schedule", "dataflow.view", "sample.view", "sample.create"],"token_salt" : "m6c6fB","autoapprove" : "openid","allowedproviders" : [ "uaa", "ldap", "my-saml-provider" ]
}'

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

(3)创建群组

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

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

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

(4)创建用户

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

curl 'http://localhost:8080/uaa/Users' -i -X POST \-H 'Accept: application/json' \-H 'Authorization: Bearer eyJhbGciOiJSxxx' \-H 'Content-Type: application/json' \-d '{"externalId" : "test-user","meta" : {"version" : 0,"created" : "2020-12-18T15:55:56.465Z"},"userName" : "larry","name" : {"formatted" : "Larry Deng","familyName" : "Deng","givenName" : "Larry"},"emails" : [ {"value" : "larry@pkslow.com","primary" : true} ],"phoneNumbers" : [ {"value" : "666666"} ],"active" : true,"verified" : true,"origin" : "","password" : "larry","schemas" : [ "urn:scim:schemas:core:1.0" ]
}'

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

(5)把用户加到群组里

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

curl 'http://localhost:8080/uaa/Groups/d633a216-029b-4f44-a7e0-15c5fd326ef2/members' -i -X POST \-H 'Content-Type: application/json' \-H 'Authorization: Bearer eyJhbGciOiJSUzIxxx' \-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这里不多介绍,有兴趣可以看下面的文章.本文主要介绍如何整合D ...

  3. Spring Cloud Data Flow

    Spring Cloud Data Flow 1 Spring Cloud Data Flow 介绍 2 Local Server for development 3 Data Flow Server ...

  4. Spring Cloud Data Flow 简介

    Spring Cloud Data Flow 介绍 1.Data flow 是一个用于开发和执行大范围数据处理其模式包括ETL,批量运算和持续运算的统一编程模型和托管服务. 2.对于在现代运行环境中可 ...

  5. Spring Cloud Data Flow系列教程架构-2

    架构 Spring Cloud Data Flow 简化了专注于数据处理用例的应用程序的开发和部署. 主要概念: 数据流的服务器组件. 服务器组件可以为流和批处理作业部署的应用程序类型. 已部署应用程 ...

  6. Spring Cloud Data Flow 中的 ETL

    来源:SpringForAll社区 1 概述 Spring Cloud Data Flow是一个用于构建实时数据管道和批处理过程的云原生工具包. Spring Cloud Data Flow已准备好用 ...

  7. Pivotal发布Spring Cloud Data Flow 1.5版本

    Pivotal发布了Spring Cloud Data Flow 1.5版本,这是一款用于构建实时数据服务的项目,该版本的新功能包括: \\ 对用户界面改进\\t 更新的Spring Cloud St ...

  8. Spring Cloud Data Flow手动安装

    前言 Spring Cloud Data Flow 2.4.2 win7 简介 Microservice based Streaming and Batch data processing for C ...

  9. Spring Cloud Data Flow流处理入门-5

    流处理入门 Spring Cloud Data Flow 提供了 70 多个预构建的流应用程序,您可以立即使用它们来实现常见的流用例.在本指南中,我们使用其中两个应用程序来构建一个简单的数据管道,该管 ...

最新文章

  1. 压缩感知及应用 源代码_【DMD应用】基于压缩感知超分辨鬼成像
  2. SQL Server中通过设置SET NOCOUNT来优化存储过程
  3. Eureka VS Zookeeper
  4. mac安装完python怎么打开-MAC中怎么安装python
  5. boost::mp11::mp_valid相关用法的测试程序
  6. phpmyadmin #1045 - Access denied for user 'root'@'localhost' (using password: NO)
  7. 第2年,倒数第3天,1.5万票,感动!
  8. JS-面向对象-改变This的指向---使用call方法改变this的指向 / 使用apply方法改变this的指向 / 使用bind方法改变this的指向
  9. java.util.vector中的vector的详细用法
  10. iPad mini 6外形巨变:升级全面屏 还要砍掉Home键
  11. 汽车上的一些名词缩写解释
  12. linux定时任务打印日志,Centos7(linux)使用crond服务定时执行js脚本并将脚本的输出内容记录日志文件的简单应用...
  13. 【2016北京集训测试赛(七)】自动机 (思考题)
  14. 计算机版本过低如何解决,win7系统ie浏览器提示版本过低的解决方法
  15. 阿里云架构实战之VPC(虚拟专有网络)介绍与搭建
  16. 量化投资必备手册:史上超全量化交易平台汇总
  17. 在线直播授课系统哪个好?哪个更适合做网校?
  18. vivox5l的Android是5.0,步步高Vivo X5 X5L刷机教程(官方固件rom升级教程)
  19. 多线程应用_左圆右方
  20. List转String的简单方法

热门文章

  1. Java基础(数组)数组扩容
  2. dbscan程序c语言,DBSCAN与PDBSCAN
  3. 《领域驱动设计-软件核心复杂性应对之道》阅读笔记(二)
  4. json、jquery、ajax
  5. visio中形状如何链接到形状
  6. js 截取字符串 subStr()、substring()、slice() 方法
  7. Java String equalsIgnoreCase()方法的功能说明
  8. Windows开启Ntp服务
  9. 世界地球日——“珍爱地球 人与自然和谐共生”主题知识竞赛
  10. 二维码生成工具:zxing