关于java:Spring-Cloud-Data-Flow整合UAA使用外置数据库和API接口

53次阅读

共计 4345 个字符,预计需要花费 11 分钟才能阅读完成。

我最新最全的文章都在 南瓜慢说 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,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 前面是 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…。

代码请查看:https://github.com/LarryDpk/p…


欢送关注微信公众号 <南瓜慢说>,将继续为你更新 …

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

正文完
 0