企业微信和SSO

1 企业微信

  • 开通企业
    • 企业 ID xxxxxx
  • 创建应用
    • 应用名称 Keycloak
    • AgentId 1000008
    • Secret zzzzzz

以下操作基于应用 Keycloak

  • 企业微信授权登录
    • Web 网页
      • 授权回调域 127.0.0.1:8080
  • 企业可信 IP
    • 可信域名 kc.nuozhilin.site
    • 企业可信 IP 114.222.248.185

2 Keycloak

2.1 服务搭建

  • 安装包方式
1
2
3
4
5
6
7
8
9
10
11
12
# 下载https://www.keycloak.org/archive/downloads-22.0.5.html
tar xf keycloak-22.0.5.tar.gz

cd keycloak-22.0.5

# 查看日志
echo "log=console,file" >> /opt/services/keycloak-22.0.5/conf/keycloak.conf
echo "log-level=INFO" >> /opt/services/keycloak-22.0.5/conf/keycloak.conf

export KEYCLOAK_ADMIN=admin
export KEYCLOAK_ADMIN_PASSWORD=password
./bin/kc.sh start-dev
  • 容器方式
1
2
3
4
5
6
7
8
9
docker run --name keycloak-server -p 8080:8080 \
-e KEYCLOAK_ADMIN=admin \
-e KEYCLOAK_ADMIN_PASSWORD=password \
-d quay.io/keycloak/keycloak:22.0.5 start-dev

echo "log=console,file" >> /opt/keycloak/conf/keycloak.conf
echo "log-level=INFO" >> /opt/keycloak/conf/keycloak.conf

docker restart keycloak-server

2.2 安装插件

1
2
3
4
5
6
7
8
9
10
11
git clone https://github.com/Jeff-Tian/keycloak-services-social-wechatwork.git

cd keycloak-services-social-wechatwork
# 修改Endpoint.java代码 class => public class

# >=JDK 17
mvn clean package

docker cp target/keycloak-services-social-wechat-work-22.0.2.jar keycloak-server:/opt/keycloak/providers

docker restart keycloak-server

企业微信开发文档-读取成员

2.3 管理后台

以下操作基于领域 yuanlin

  • 添加身份供应商
    • 身份供应商 企业微信 WeCom
    • 客户端 ID xxxxxx
    • 客户端密码 zzzzzz
    • 企业微信 AgentID 1000008
    • 首次登录流程 direct grant
  • 添加用户
    • 用户名 yuanlin
    • 身份供应商链接 Wechat-work 关联账号
      • 用户 ID yuanlin
      • 用户名 yuanlin

2.4 用户使用

keycloak-wechat-work-01.png

2.5 应用开发

以下操作基于领域 yuanlin

1
2
3
4
5
6
7
8
{
"realm": "yuanlin",
"auth-server-url": "http://127.0.0.1:8080/",
"ssl-required": "external",
"resource": "yuanlin-web",
"public-client": true,
"confidential-port": 0
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/keycloak-js@22.0.5/dist/keycloak.min.js"></script>
<script>
var keycloak = new Keycloak("./keycloak.json");

keycloak
.init({ onLoad: "login-required" })
.then(function (authenticated) {
alert("Authenticated: " + authenticated);
document.getElementById("userInfo").innerHTML =
"Username: " + keycloak.tokenParsed.preferred_username;
})
.catch(function () {
alert("Failed to initialize");
});

function logout() {
keycloak.logout();
}
</script>
</head>
<body>
<div id="userInfo"></div>
<button onclick="logout()">Logout</button>
</body>
</html>
1
2
3
4
npm i -g http-server

http-server .
# 访问应用http://127.0.0.1:8081/

3 Casdoor

3.1 服务搭建

1
docker run --platform linux/amd64 --name casdoor -p 8000:8000 -d casbin/casdoor-all-in-one

3.2 管理后台

内容待完成

参考