把Docker当沙盒用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sudo docker run -itd \
  --name srv1 \
  -v /mnt/hgfs/share:/home/work/share \
  -p 9083:9083 \
  fedora:latest \
  /bin/bash
 
sudo docker exec -it srv1 /bin/bash
 
sudo docker stop srv1
#sudo docker start srv1
sudo docker rm srv1
sudo docker rmi fedora:latest
sudo docker system df -v
sudo docker ps -a --filter volume=<volume_name>
sudo docker compose -f generate-indexer-certs.yml run --rm --entrypoint="/bin/sh" generator -i
sudo docker-compose down --rmi all --volumes --remove-orphans
sudo rsync -aAXv /home/work/dockernew /home/b/docker/root

在Keycloak里添加飞书IdP

先在Keycloak的管理员控制台的Identity Providers中添加OAuth v2 idp,Alias比如设为feishu。具体参数参考:
https://open.feishu.cn/document/sso/web-application-sso/login-overview

添加后,登陆中使用feishu第三方登陆,Keycloak后台报异常:No identifier provider for identity.
原因是标准的OAuth2流程在第三步取user_info,返回的json是在根结点有sub字段表示登陆者id,但飞书的user_info返回字段不标准,比如需要我们改代码取data子节点的email作为登陆者id。

具体在keycloak-26.3.0\services\src\main\java\org\keycloak\broker\oauth\OAuth2IdentityProvider.java
doGetFederatedIdentity函数返回identity之前,加入代码:

1
2
3
4
5
            if (userInfo.has("data")) {
                JsonNode dataNode = userInfo.get("data");
                id = dataNode.get("email") != null ? dataNode.get("email").asText() : null;
                identity.setId(id);
            }