pac4j/javalin-pac4j
GitHub: pac4j/javalin-pac4j
javalin-pac4j 是一个基于 pac4j 的 Java 安全库,为 Javalin 应用提供全面的身份验证和授权解决方案。
Stars: 48 | Forks: 10
`javalin-pac4j` 项目是一个用于 [Javalin](https://javalin.io) Web 应用程序的简单而强大的安全库,它支持
身份验证和授权,同时也支持注销以及诸如会话固定和 CSRF 防护等高级功能。
它基于 Java 17 和 **[pac4j 安全引擎](https://github.com/pac4j/pac4j) v6**。该库以 Apache 2 许可证提供。
[**主要概念和组件:**](http://www.pac4j.org/docs/main-concepts-and-components.html)
1. 一个 [**客户端**](http://www.pac4j.org/docs/clients.html) 代表一种身份验证机制。它执行登录过程并返回用户配置文件。间接客户端用于 UI 身份验证,而直接客户端用于 Web 服务身份验证:
▸ OpenID Connect - SAML - CAS - OAuth - HTTP - LDAP - SQL - JWT - MongoDB - IP 地址
2. 一个 [**授权器**](http://www.pac4j.org/docs/authorizers.html) 旨在检查已认证用户配置文件或当前 Web 上下文的授权情况:
▸ 角色/权限 - 匿名/记住我/(完全)认证 - 配置文件类型、属性 - CORS - CSRF - 安全头 - IP 地址、HTTP 方法
3. 一个 [**匹配器**](http://www.pac4j.org/docs/matchers.html) 定义 `SecurityHandler` 是否必须被应用,可用于额外的 Web 处理。
4. `SecurityHandler` 通过检查用户是否已认证以及授权是否有效(根据客户端和授权器配置)来保护 URL。如果用户未认证,它会为直接客户端执行身份验证或为间接客户端启动登录过程。
5. `CallbackHandler` 完成间接客户端的登录过程。
6. `LogoutHandler` 处理注销过程。
只需按照以下简单步骤来保护您的 Javalin 应用程序:
### 1) 添加所需的依赖项 (`javalin-pac4j` 和 `pac4j-*` 库)
| javalin-pac4j | JDK | pac4j | Javalin |
|---------------|-----|-------|---------|
| v8 | 17 | v6 | v7 |
| v7 | 17 | v6 | v5.6 |
| v6 | 11 | v5 | v5.2 |
| v5 | 11 | v5 | v3.13 |
| v3 | 8 | v4 | v3.13 |
要获取最新版本,您需要为以下内容添加依赖项:
- `javalin-pac4j` 库(
groupId: **org.pac4j**, *version*: **8.0.0**)
- 适当的 `pac4j` [子模块](http://www.pac4j.org/docs/clients.html)(
groupId: **org.pac4j**, *version*: **6.3.3**):用于 OAuth 支持(Facebook、Twitter 等)的 `pac4j-oauth`,用于 CAS 支持的 `pac4j-cas`,用于 LDAP 身份验证的 `pac4j-ldap`,等等。
所有已发布的构件都可在 [Maven 中央仓库](http://search.maven.org/#search%7Cga%7C1%7Cpac4j) 中找到。
### 2) 定义配置
配置(`org.pac4j.core.config.Config`)包含应用程序处理安全所需的所有客户端和授权器。
* [配置工厂示例](https://github.com/pac4j/javalin-pac4j/blob/master/src/test/java/org/pac4j/javalin/example/ExampleConfigFactory.java)
* [授权器示例](https://github.com/pac4j/javalin-pac4j/blob/master/src/test/java/org/pac4j/javalin/example/CustomAuthorizer.java)
* [身份验证器示例](https://github.com/pac4j/javalin-pac4j/blob/master/src/test/java/org/pac4j/javalin/example/TrivialUserPassAuthenticator.java)
### 3) 保护 URL
创建 `SecurityHandler` 的一个实现,并将其附加到一个覆盖您想要保护的 URL 的 `before` 处理器。
[示例应用](https://github.com/pac4j/javalin-pac4j/blob/master/src/test/java/org/pac4j/javalin/example/JavalinPac4jExample.java) 展示了每个客户端的实现。
### 4) 仅为间接客户端定义回调端点 (`CallbackHandler`)
对于间接客户端(如 Facebook),用户会被重定向到外部身份提供商进行登录,然后返回到应用程序。
[示例应用](https://github.com/pac4j/javalin-pac4j/blob/master/src/test/java/org/pac4j/javalin/example/JavalinPac4jExample.java) 展示了其实现。
### 5) 获取用户配置文件(通过 `HttpServletRequest` 或 `ProfileManager`)
[示例应用](https://github.com/pac4j/javalin-pac4j/blob/master/src/test/java/org/pac4j/javalin/example/JavalinPac4jExample.java) 展示了其实现。
### 6) 注销 (`LogoutHandler`)
您可以进行本地注销或全局注销。
[示例应用](https://github.com/pac4j/javalin-pac4j/blob/master/src/test/java/org/pac4j/javalin/example/JavalinPac4jExample.java) 展示了两种实现方式。
## 需要帮助?
您可以使用 [邮件列表](http://www.pac4j.org/mailing-lists.html) 或 [商业支持](http://www.pac4j.org/commercial-support.html)。
## 开发
Maven 构件通过 Github Actions 构建,并在 Central Portal 快照仓库中提供。此仓库必须在例如 Maven `pom.xml` 文件中添加:
```
Central Portal Snapshots
central-portal-snapshots
https://central.sonatype.com/repository/maven-snapshots/
false
true
```
标签:Apache许可证, CAS认证, CSRF防护, GHAS, Javalin框架, Java安全, JS文件枚举, JWT令牌, LDAP认证, OAuth集成, OpenID Connect, pac4j引擎, SAML认证, Web安全, 会话固定防护, 会话安全, 单点登录, 域名枚举, 多协议认证, 安全处理, 授权库, 授权管理, 注销管理, 登录管理, 网络安全, 蓝队分析, 认证库, 隐私保护