我最新最全的文章都在 南瓜慢说 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.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" : "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...
欢送关注微信公众号<南瓜慢说>,将继续为你更新...
多读书,多分享;多写作,多整顿。