修复部分BUG
AbstractJapStrategy
的子类增加构造函数,支持自定义 JapUserStore
。(Gitee Issue #I4BHBJ:JapUserStore是不是可以支持自定义扩展其功能)hutool
的版本为 5.7.14JustAuth
的版本为 1.16.5AbstractJapStrategy
, support custom JapUserStore
. (Gitee Issue #I4BHBJ:JapUserStore是不是可以支持自定义扩展其功能)hutool
to 5.7.14
JustAuth
to 1.16.5
jap-http-api
module. (Gitee Issue #I43ZS7:增加 jap-http-api 模块)jap-ids-web
module. Package the filter of ids as a separate component.kisso
to 3.7.7, Solve the vulnerability of jackson.googleauth
to 1.5.0, Solve the vulnerability of apache httpclient.simple-http
to 1.0.5.JustAuth
to 1.16.4.Note [1]:
In versions prior to version 1.0.5 of jap, rely on the HttpServletRequest
, Cookie
, HttpServletResponse
,
and HttpSession
under the javax.servlet.http
package in jakarta-servlet
, such as:
// Interface provided by jap
public interface JapStrategy {
default JapResponse authenticate(AuthenticateConfig config, HttpServletRequest request, HttpServletResponse response) {
return null;
}
}
// Use jap in spring framework
XxJapStrategy.authenticate(config,request,response);
In order to improve the adaptability of the framework, since version 1.0.5, JAP removed the dependency
of jakarta-servlet
and adopted a new set of interfaces (reference: jap-http ).
The developer needs to adapt the original request when calling the JAP interface.
For example, if the developer uses jakarta-servlet
, then the HttpServletRequest
needs to be adapted:
// Use 1.0.5 or higher version of jap in spring framework
XxJapStrategy.authenticate(config,new JakartaRequestAdapter(request),new JakartaResponseAdapter(response));
jap-http-api
模块。 (Gitee Issue #I43ZS7:增加 jap-http-api 模块)jap-ids-web
模块。 将 jap-ids
的过滤器打包为一个单独的组件。scope
在各个流程中都更改为可选,遵循 RFC6749 规范。kisso
的版本为 3.7.7, 解决 jackson 的漏洞。googleauth
的版本为 1.5.0, 解决 apache httpclient 的漏洞。simple-http
的版本为 1.0.5.JustAuth
的版本为 1.16.4.注[1]:
在 1.0.5 以前版本,jap 中依赖 jakarta-servlet
中 javax.servlet.http
包下的 HttpServletRequest
、Cookie
、HttpServletResponse
、HttpSession
,比如:
// jap 提供的接口
public interface JapStrategy {
default JapResponse authenticate(AuthenticateConfig config, HttpServletRequest request, HttpServletResponse response) {
return null;
}
}
// 在spring框架中使用 jap
XxJapStrategy.authenticate(config,request,response);
为了提高框架适配性,自 1.0.5 版本开始,JAP 去掉了 jakarta-servlet
依赖,采用了一套全新的接口(参考:jap-http),开发者在调用
JAP 接口时需要对原 request 进行适配。
比如,开发者使用了 jakarta-servlet
,那么需要对 HttpServletRequest
进行适配处理:
// 在spring框架中使用 1.0.5 或更高级版本的 jap
XxJapStrategy.authenticate(config,new JakartaRequestAdapter(request),new JakartaResponseAdapter(response));
jap-http-api
更多使用帮助,请参考:https://justauth.plus/quickstart/jap-http-api/
IdsConfig#enableDynamicIssuer
is true
, custom context-path
is supported.Oauth2Strategy
supports the following methods: refreshToken
, revokeToken
, getUserInfo
JapCache
and AuthStateCache
of SocialStrategy
at the same time. (Github#6:报错 'token' of undefined)client_secret
,适配多种场景,如:BCrypt 等。 (Gitee#I44032:【jap-ids】 支持自定义校验 client_secret 的方法)IdsConfig#enableDynamicIssuer
时,支持自定义 context-path
Oauth2Strategy
支持使用以下方法: refreshToken
、revokeToken
、getUserInfo
SocialStrategy
的 JapCache
and AuthStateCache
.(Github#6:报错 'token' of undefined)userId
为空时 NPE 异常. (Github#5:把assess-token换成自己服务的)IdsConfig
中添加 enableDynamicIssuer
属性,boolean
类型。当 enableDynamicIssuer=true
时,开发者不再需要单独设置 issuer
,jap-ids
将从当前请求的域名中自动提取 issuer
。此功能针对客户端支持
自定义域名
的业务场景。可以通过域名的标识(比如二级域名jap.justauth.plus
中的标识就是jap
)确定用户所属的客户端(也可以对应到租户)。
IdsConfig
中添加 loginPageUrl
属性,loginPageUrl
与 loginUrl
的区别:
loginPageUrl
:登录表单页面 URL,关键字:页面。loginUrl
:登录的api URL,关键字:API。
IdsConfig
中添加 externalLoginPageUrl
属性,boolean
类型。如果授权服务未提供登录页面(登录页面由其他服务托管,比如登录页面在单独的静态服务中部署),则需要启用此配置。
IdsConfig
中添加 externalConfirmPageUrl
属性,boolean
类型。如果授权服务未提供授权确认页面(授权确认页面由其他服务托管,比如授权确认页面在单独的静态服务中部署),则需要启用此配置。
IdsConfig
中添加 authorizeAutoApproveUrl
属性。当授权 URL 中包含
autoapprove=true
时,授权服务器在用户登录完成后,不会跳转到confirmPageUrl
,而是直接跳转到authorizeAutoApproveUrl
。
IdsUserStoreService
接口类,以支持登录后对用户数据的自定义操作,默认为 Session
存储用户信息。感谢微信用户(antscqy)的建议。IdsPipeline
接口,开发人员可以自定义流程,目前仅支持自定义 IdsxxFilter
(过滤器)和 LoginEndpoint
的流程。spi
插件机制,jap-ids
对外提供的接口,都可以以 spi
的形式实现。profile
, address
, read
and write
。OauthUtil#createAuthorizeUrl(String, IdsRequestParam)
中添加 uid
参数(可选的参数)。SocialStrategy
对外提供 refreshToken
、revokeToken
和 getUserInfo
方法。感谢群友的反馈。javax.servlet-api
依赖替换为 jakarta.servlet-api
。涉及到字段、方法的修改,请升级的时候注意。
IdsConfig.confirmUrl
参数名称修改为 confirmPageUrl
。ApprovalEndpoint#getAuthClientInfo(HttpServletRequest)
的返回类型修改为IdsResponse<String, Map<String, Object>>
。Ap provalEndpoint#authorize(HttpServletRequest)
的返回类型修改为 IdsResponse<String, String>
。AuthorizationEndpoint#agree(HttpServletRequest)
的返回类型修改为 IdsResponse<String, String>
。LoginEndpoint#signin(HttpServletRequest)
的返回类型修改为 IdsResponse<String, String>
。LogoutEndpoint#logout(HttpServletRequest)
的返回类型修改为 IdsResponse<String, String>
。ClientDetail
类的注释。IdsResponse#getData()
方法的返回类型修改为泛型。IdsScopeProvider#initScopes(List<IdsScope>)
方法,不再允许重置系统内置的 scope,新版 jap-ids
支持添加新的 scope
以及 修改内置的 scope
描述。response_type=id_token
时,id_token
中将返回用户的基本信息(依据 scope
授权范围)。UserInfoEndpoint#getCurrentUserInfo(HttpServletRequest)
方法的业务流程,对于用户的特定属性,比如手机号、邮箱等,按照提供的 scope
决定是否返回。IdsUserService
接口的loginByUsernameAndPassword
和 getByName
方法,分别新增了 clientId
入参。针对多租户场景下,同一个用户可能存在多个租户主体下,单纯依靠用户账密已经无法唯一确定一个用户,这种情况下业务系统可以根据
clientId
获取具体的租户下的用户信息。
com.fujieid.jap.core.util.RequestUtil
jap-ids
模块jap-ids
是基于 RFC6749、RFC7636、RFC7033等标准协议和 OpenID Connect Core 1.0 认证协议,实现的一款轻量级、业务解耦、开箱即用的新一代国产授权认证框架。
jap-ids 目前已支持以下功能:
code
、token
、id_token
、id_token token
、code id_token
、code token
、code id_token token
)OidcStrategy#authenticate
方法,缓存 OidcDiscoveryDto
,减少不必要的 http 请求OidcUtil
工具类的代码,解决一些已知问题com.fujieid.jap.core.cache.JapLocalCache
,实现定时器,定期清理本地缓存JapErrorCode
枚举类,限定异常码和提示JapResponse
类,规范接口返回内容JapTokenHelper
类,统一管理用户的TokenJapContext
类,维护 JAP 上下文信息JapAuthentication
类,统一管理登录状态信息以及 JAP 上下文信息AuthenticateConfig
,JapConfig
移到 com.fujieid.jap.core.config
包中JapUtil
移到 com.fujieid.jap.core.util
包中JapCacheContextHolder
AbstractJapStrategy
,引入上下文 JapContext
和 JapAuthentication
类JapConfig
类,仅保留 sso
和 ssoConfig
属性,同时增加 tokenExpireTime
和 cacheExpireTime
参数JapCacheConfig
中的缓存默认有效期为7天JapUserService
接口类中的默认内容JapCache
中添加 void removeKey(String key)
方法JapException
中增加 errorCode
和 errorMessage
属性,方便将异常信息处理为统一格式的返回数据JapStrategy
接口中 authenticate
方法的返回类型修改为 JapResponse
,所有模块的策略方法都返回统一格式的数据JapUser
中增加 token
属性,登录完成后将自动返回 JAP TokenJapUtil
类中为 redirect
方法打上 @Deprecated
标记,未来可能删除。同时增加 createToken
方法Oauth2Strategy
的 authenticate
方法,统一返回 JapResponse
OidcStrategy
的 authenticate
方法,统一返回 JapResponse
SimpleStrategy
的 authenticate
方法,统一返回 JapResponse
SocialStrategy
的 authenticate
方法,统一返回 JapResponse
JapSsoHelper#login
方法的返回值为当前用户的 JAP TokenJapSsoUtil
类,处理 TokenJapSsoConfig
类中,删除 loginUrl
和 logoutUrl
属性jap-mfa
模块,实现 TOTP 验证JapUserStoreContextHolder
中增加 logout
方法,一键退出登录,支持清除 Cookie、Session等jap.sh
脚本,支持多种常用命令JapConfig
中的 options
属性,同时在 SocialConfig
中增加 justAuthConfig
属性RememberMeDetailsUtils
的名称修改为 RememberMeUtils
Oauth2Strategy#checkOauthConfig()
和 Oauth2Strategy#isCallback()
方法移到了 Oauth2Util
类中SimpleConfig
类,将非必要配置项和业务逻辑,移到工具类 RememberMeUtils
中com.fujieid.jap.core.cache.JapCache
jap-oauth2
模块中增加 state
校验的逻辑package-info.java
PkceUtil
中 CodeVerifier
只能本地缓存的问题,借助 com.fujieid.jap.core.cache.JapCache
可以自定义实现分布式缓存simple-json
升级到 0.0.2
JAP 是一款开源的登录中间件,基于模块化设计,并且与业务高度解耦,使用起来非常灵活,开发者可以毫不费力地将 JAP 集成到任何 web 应用程序中,就像集成 JA 一样,简单方便。Just auth into any app!