Spring Cloud Data Flow整合UAA使用外置数据库和API接口
source link: https://www.pkslow.com/archives/spring-cloud-dataflow-uaa-api
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
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,postgresql database: driverClassName: org.postgresql.Driver url: jdbc:postgresql://localhost:5432/pkslow username: pkslow password: pkslow maxactive: 15 maxidle: 10 minidle: 3 removeabandoned: false logabandoned: true abandonedtimeout: 300 evictionintervalms: 15000 caseinsensitive: 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后面是 admin
的 Token
,太长这里不贴出来了。
(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" : "[email protected]", "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
欢迎关注微信公众号< 南瓜慢说 >,将持续为你更新...
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK