Skip to content

Jeff-Tian/keycloak-services-social-weixin

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code
This branch is 89 commits ahead of jyqq163:master.

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
src
 
 
 
 
 
 
 
 
 
 

keycloak-services-social-weixin

🇺🇸 English | 🇨🇳 简体中文

Keycloak 的微信登录插件,尝试在 Keycloak 里打通整个微信生态。相关文章:《对接微信登录的三种方式 - Jeff Tian的文章 - 知乎

Java CI with Maven Maven Package

在线体验

如何使用

本项目是一个 Keycloak 的插件,所以你需要先有一个 Keycloak 实例,然后把本项目打包成 jar 包,放到 Keycloak 的 providers 目录下,然后重启 Keycloak 即可。即:

  • Add the jar to the Keycloak server:

    • cp target/keycloak-services-social-weixin-*.jar _KEYCLOAK_HOME_/providers/
  • 在生产环境下的keycloak,需要执行kc.sh build 注册provider

👨‍💻 本地开发

需要 JDK 17 或者以上。

mvn install

::: tip

如果在本地碰到比如编译出错等问题,最简单的办法就是使用 GitHub CodeSpace,绕过环境问题。

以上就是我在 CodeSpace 里开发本项目的截图,其开发容器配置在这里

:::

跑测试

mvn clean test

Maven 包

获取 jar 包

直接下载

你可以从 https://github.com/Jeff-Tian/keycloak-services-social-weixin/packages 获取已经打好的 jar 包,可以省去打包的步骤。

手动打包

如果需要自己手动打包,可以在本地命令行执行:

mvn package
ls target

自动打包

本项目使用 GitHub Actions 自动打包,只需要在 master 分支上提交代码,即可自动打包。但是注意,需要修改 pom.xml 中的版本号,否则打包出来的 jar 包版本号和已经打好的 jar 包版本号冲突,从而不能上传到 GitHub Packages。

发版

本项目使用 GitHub Actions 自动发版,只需要在 master 分支上打一个 tag,然后在 GitHub 上发布一个 release 即可。

配置截图

Keycloak 16

image

Keycloak 22

Client ID 和 公众号 App Id;Client Secret 和 公众号 App Secret 都可以是一样的,即通过手机或者 PC 的微信登录时,都使用同一个公众号。但是以上截图用了两个不同的,其中公众号 App Id 使用了我的个人测试公众号,在关注人数在 100 以内时可以使用。而手机端,则必须使用经过认证的企业公众号(特别感谢知友 hhhnnn 帮我提供,没有该服务号我没法调通手机端)。

Docker 镜像

我也打包了一个包含微信 idp 的 keycloak server docker 镜像

docker pull jefftian/keycloak-heroku:latest

一键部署

部署到 Heroku

点击这个按钮,可以部署一个包含微信登录的 Keycloak 到你自己的 Heroku:

Deploy to Heroku

::: warning 注意 Heroku 不再提供免费的 Dyno,部署到 Heroku 可能会产生费用。

:::

部署到 Okteto

【免费架构】Heroku 不免费了,何去何从之 Keycloak 的容器化部署之路 - Jeff Tian的文章 - 知乎

谁在使用

URL 说明 源码
https://keycloak.jiwai.win 我部署在 heroku 上的 Keycloak 实例 https://github.com/jeff-tian/keycloak-heroku
https://www.da-yi-jia.com 感谢答疑家对本项目的大力支持!

💵 欢迎问我!

有任何相关问题,欢迎来知乎咨询:

向我咨询

Release Notes

Star History

感谢大家的支持!

Star History Chart

致谢

  • 感谢 jyqq163/keycloak-services-social-weixin 提供的基础代码,本仓库从该仓库 fork 而来。
  • 感谢 hhhnnn 提供的企业公众号,没有该服务号我没法调通手机端。
  • 感谢各位发的 pull request 和 issue,让本项目越来越好!

原理

其实任何一个 OAuth2/OIDC 的登录插件都是一样的,都是通过一个授权链接,然后通过 code 换取 access_token,再通过 access_token 换取用户信息。详见《三步开发社交账号登录(以钉钉登录举例) - Jeff Tian的文章 - 知乎

以开放平台微信登录举例

先构建授权链接

链接如下:

https://open.weixin.qq.com/connect/qrconnect?scope=snsapi_login&state=d3Yvfou3pdgp-UNVZ-i7DTDEbv4rZTWx6Wh7lmxzyvk.98VO-haMdj4.c0L0bnybTEatKpqInU02nQ&response_type=code&appid=wxc09e145146844e43&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Frealms%2Fmaster%2Fbroker%2Fweixin%2Fendpoint

用户使用微信扫描以上链接中展示的二维码后,会跳转到微信的授权页面,用户点击同意后,会跳转到我们的回调地址,并且带上 code 和 state 参数,如下:

https://keycloak.jiwai.win/realms/master/broker/weixin/endpoint?code=011er8000zwPzQ1Fvw200DTBCP1er80K&state=d3Yvfou3pdgp-UNVZ-i7DTDEbv4rZTWx6Wh7lmxzyvk.98VO-haMdj4.c0L0bnybTEatKpqInU02nQ

通过 code 换取 access_token

通过 access_token 换取用户信息

🧧 其他 Keycloak 社交登录插件

About

Keycloak 微信登录插件,支持 PC 端扫码登录、关注公众号即登录、手机微信等登录方式。

Topics

Resources

Stars

Watchers

Forks

Languages

  • Java 99.9%
  • Dockerfile 0.1%