栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java > SpringBoot

Api架构奥义:ApiBoot实现零代码整合Spring Security & OAuth2

SpringBoot 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Api架构奥义:ApiBoot实现零代码整合Spring Security & OAuth2

接口服务的安全性一直是程序员比较注重的一个问题,成熟的安全框架也比较多,其中一个组合就是Spring Security与OAuth2的整合,在ApiBoot内通过代码的封装、自动化配置实现了自动化整合这两大安全框架。

博客原文:http://blog.yuqiyu.com/apiboot-security-oauth-zero-code-integration.html

ApiBoot Security OAuth简介

ApiBoot Security OAuth是ApiBoot开源项目内的一个组件,内部通过SpringBoot AutoConfiguration整合了Spring Security、OAuth2,而且支持多种存储方式,如:内存(memory)、数据库(jdbc)、Redis等,使用配置文件的方式来代替代码侵入式集成方式,提高开发效率、减少非业务的繁琐代码,而且还有这比较高的可扩展性。

  • ApiBoot 源码(源码详见:api-boot-plugins、api-boot-autoconfigure目录):https://gitee.com/minbox-projects/api-boot

  • ApiBoot Security使用文档:http://apiboot.minbox.io/zh-cn/docs/api-boot-security.html

  • ApiBoot OAuth使用文档:http://apiboot.minbox.io/zh-cn/docs/api-boot-oauth.html

创建项目

通过Idea开发工具创建一个名为apiboot-security-oauth-zero-code-integration的SpringBoot项目。

添加ApiBoot统一版本依赖

在添加依赖之前我们需要将ApiBoot的统一版本依赖加入到我们项目的pom.xml文件内,如下所示:



    
 
     org.minbox.framework
     api-boot-dependencies
     2.1.5.RELEASE
     import
     pom
 
    

添加ApiBoot Security OAuth依赖

添加完成版本依赖后,我们继续在pom.xml文件内添加ApiBoot Security OAuth依赖,如下所示:


  
  
    org.springframework.boot
    spring-boot-starter-web
  

  
  
    org.minbox.framework
    api-boot-starter-security-oauth-jwt
  

配置ApiBoot Security用户列表

ApiBoot Security默认支持内存方式(memory)配置用户列表,用于整合OAuth2的密码授权方式(grant_type=password),我们需要在application.yml配置文件内添加相关配置,如下所示:

spring:
  application:
    name: apiboot-security-oauth-first-application
server:
  port: 9090
# ApiBoot 相关配置
api:
  boot:
    # ApiBoot Security配置
    security:
      # 配置内存用户列表
      users:
 - username: hengboy
   password: 123456
 - username: yuqiyu
   password: 123123

通过api.boot.security.users参数可以配置多个用户信息,每个用户可配置username、password、roles,可以通过查看org.minbox.framework.api.boot.autoconfigure.security.ApiBootSecurityProperties源码类了解详情。

  • username:配置Spring Security用户的用户名。
  • password:配置Spring Security用户的密码。
  • roles:配置Spring Security用户对应授权的角色列表,多个可以使用英文半角,隔开,或者使用-方式配置。
运行测试

我们通过XxxApplication方式启动本章项目。

测试点:获取AccessToken

项目运行成功后我们先来测试下是否可以获取到AccessToken。

Curl方式获取:

➜ ~ curl -X POST ApiBoot:ApiBootSecret@localhost:9090/oauth/token -d "grant_type=password&username=hengboy&password=123456"
{"access_token":"f16202f7-ab8c-41ae-86be-e314aebe82ff","token_type":"bearer","refresh_token":"93c74812-ec5b-4676-8378-b68e4c1751ae","expires_in":3297,"scope":"api"}

PostMan方式获取:

如果对Spring Security与OAuth2整合有一定经验的同学应该明白grant_type是OAuth2内提供的其中一种授权方式,而参数username、password则是整合后对应的Spring Security的用户名以及密码,也就是我们在application.yml配置文件api.boot.security.users配置用户列表的其中一个用户信息

在上面分别通过Curl、PostMan两种方式进行测试获取AccessToken,都是可以直接获取到的。

测试点:获取当前用户信息

ApiBoot Security OAuth获取当前用户信息的方式与Spring Security一样,通过注入java.security.Principal接口来完成,下面我们创建一个名为UserController的控制器来测试下效果:

package org.minbox.chapter.apiboot.security.oauth.first.application;

import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.security.Principal;


@RestController
@RequestMapping(value = "/api/user")
public class UserController {

    
    @GetMapping
    @PreAuthorize("hasRole('api')")
    public String info(Principal principal) {
 return principal.getName();
    }
}

注意:ApiBoot Security OAuth默认权限拦截的路径时/api/**,所以我们在测试控制器上配置了/api/user作为路径前缀,如果想对ApiBoot Security OAuth详细了解,请访问ApiBoot官网文档ApiBoot Security使用文档

我们通过Curl方式访问http://localhost:9090/api/user接口效果如下:

➜ ~ curl http://localhost:9090/api/user -H 'Authorization: Bearer d73e86a8-892f-42c1-bc95-04aedfe97828'
hengboy

访问/api/user路径的AccessToken是通过用户hengboy用户生成的,所以该接口返回了hengboy用户名。

敲黑板,划重点

ApiBoot Security OAuth极其简单的完成了Spring Security与OAuth2的整合,使用内存方式时不需要配置一行代码就可以完成自动化的整合。

代码示例

本篇文章示例源码可以通过以下途径获取,目录为SpringBoot2.x/apiboot-security-oauth-first-application:

  • Gitee:https://gitee.com/hengboy/spring-boot-chapter

作者个人 博客
使用开源框架 ApiBoot 助你成为Api接口服务架构师

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号