oauth2-resource-token-starter

infrastructure for oauth2 library

License

License

Categories

Categories

H2 Data Databases OAuth2 Security
GroupId

GroupId

com.labijie.infra
ArtifactId

ArtifactId

oauth2-resource-token-starter
Last Version

Last Version

1.0.2
Release Date

Release Date

Type

Type

pom.sha512
Description

Description

oauth2-resource-token-starter
infrastructure for oauth2 library
Project URL

Project URL

https://github.com/hongque-pro/infra-oauth2
Source Code Management

Source Code Management

https://github.com/hongque-pro/infra-oauth2

Download oauth2-resource-token-starter

Dependencies

compile (1)

Group / Artifact Type Version
com.labijie.infra : oauth2-starter jar 1.0.2

runtime (2)

Group / Artifact Type Version
org.jetbrains.kotlin : kotlin-stdlib jar 1.4.10
org.jetbrains.kotlin : kotlin-reflect jar 1.4.10

Project Modules

There are no modules declared in this project.

基础组件包

maven central version workflow status license

引入依赖(Gradle)

    compile "com.labijie.infra:oauth2-starter:$infra_oauth2_version"

扩展 Spring Cloud OAuth2 能力,极大的简化 Spring Security 使用。

如何实现一个 OAuth2 授权服务器?

屏蔽所有复杂的细节,当你需要一个OAuth2 服务器时,你只需要三个步骤:

  1. 实现 IIdentityService 接口作为一个 Bean 注册给 Spring
  2. 实现 IClientDetailsServiceFactory 接口作为一个 Bean 注册给 Spring
  3. 在你的启动程序注解 @EnableOAuth2Server, 如下:
@EnableOAuth2Server(OAuth2ServerType.Authorization)
@SpringBootApplication
class DummyAuthServer

如何实现一个使用上面的 OAuth2 授权服务器授权的资源服务器?

在你的启动程序注解 @EnableOAuth2Server, 如下:

@EnableOAuth2Server(OAuth2ServerType.Resource)
@SpringBootApplication
class DummyResourceServer

如何是一个OAuth2 服务器同时本身又包含需要授权的资源?

参见 OAuth2 授权服务器实现步骤 1、 2 , 在第 3 步时稍微改一下注解:

@EnableOAuth2Server(OAuth2ServerType.Authorization, OAuth2ServerType.Resource)
@SpringBootApplication
class DummyAuthServer

灵活切换 JWT, Memory, Redis 的 OAuth2 Token 存储实现:

  • Jwt:
@EnableOAuth2Server(OAuth2ServerType.Authorization, tokeStore = TokenStoreType.Jwt)
class DummyAuthServer

Jwt 是默认实现,可以省略 tokeStore 参数

  • InMemory:
@EnableOAuth2Server(OAuth2ServerType.Authorization, tokeStore = TokenStoreType.InMemory)
class DummyAuthServer
  • Redis:
@EnableOAuth2Server(OAuth2ServerType.Authorization, tokeStore = TokenStoreType.Redis)
class DummyAuthServer

如何实现真正的两段身份验证?

2FAC 逻辑:可以强制用户必须两端认证登录,先输入用户名、密码,获得一般权限 token (1段 Token); 验证通过可以有限的访问资源,一些敏感资源,如取现接口、删除数据接口要求用户使用1段 token 以短信、邮件等方式来交换2段 token 以获得无限制的访问权限。

扩展 Spring 加入 twoFactorRequired 方法:

class ResourceServerConfigurer : ResourceServerConfigurerAdapter() {
    override fun configure(resources: ResourceServerSecurityConfigurer) {
        resources.resourceId("test")
    }

    @Throws(Exception::class)
    override fun configure(http: HttpSecurity) {
        http.requestMatchers().anyRequest()
                .and()
                .anonymous()
                .and()
                .authorizeRequests()
                .antMatchers("/2f").twoFactorRequired()
                .antMatchers("/**").authenticated()
    }
}

更多能力

  • 同一个接口即可实现 Token 中插入自定义字段,直接通过 token 访问该字段以减少数据库查询
  • Resource Token 缓存,减少和 OAuth 服务器的交互(oauth2-resource-token-starter)

开发环境兼容性:

组件 版本 说明
kotlin 1.4.10
jdk 1.8
spring boot 2.3.4.RELEASE
spring cloud Hoxton.SR8 通过 BOM 控制版本,因为 cloud 组件版本混乱,无法统一指定
spring framework 5.2.9.RELEASE
spring dpendency management 1.0.10.RELEASE

发布到自己的 Nexus

在项目根目录下新建 gradle.properties 文件,添加如下内容

PUB_USER=[nexus user name]
PUB_PWD=[nexus password]
PUB_URL=http://XXXXXXX/repository/maven-releases/

运行 gradle publish

com.labijie.infra

Red Sparrow

红雀小队

Versions

Version
1.0.2
1.0.1
1.0.0