赞
踩
本文,我们来入门 Spring Security OAuth2.0 的使用。通过本文,希望你对 OAuth2.0 有一次身临其境的感受。
另外,这是一篇入门的文章,所以实际场景下,需要做一些微调。当然,需要微调的地方,笔者会在示例中说明,以免误导。
如果你是 OAuth2.0 的萌新,建议先通读阮一峰大神的 《理解OAuth 2.0》。因为,本文不会去阐述 OAuth2.0 概念部分的内容。或者,也可以看看 《OAuth 2.0最简向导》 ,比较生动形象。
阅读完本文后,你想要更加深入的理解 OAuth2.0 ,可以阅读如下两本书籍:
阅读完本文后,你想要了解源码,可以阅读老徐的两篇文章:
OK,一波安利之后,我们来一起进入正文。对于 Spring Security OAuth2 的配置,大体来说,就是两步:
在 pom.xml 文件中,引入如下:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.16.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <dependencies> <!-- for Spring MVC --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- for Spring Security --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <!-- for OAuth 2.0 --> <dependency> <groupId>org.springframework.security.oauth</groupId> <artifactId>spring-security-oauth2</artifactId> </dependency> </dependencies>
因为,我们使用的是 SpringBoot 的版本为 1.5.16.RELEASE ,所以使用的 Spring Security 的版本为 4.2.8.RELEASE ,Spring Security OAuth2 的版本为 2.2.0.15.RELEASE 。
一般情况下,资源服务器指的是,我们提供 API 的应用或服务。例如,订单服务、商品服务。考虑到让整个示例更加简单,本文先将它和授权服务器放在一个 Maven 项目中。
① 创建一个 Controller 类
/** * 示例模块 Controller */ @RestController @RequestMapping("/api/example") public class ExampleController { @RequestMapping("/hello") public String hello() { return "world"; } }
② 配置资源服务器
// 资源服务配置 @Configuration @EnableResourceServer public class OAuth2ResourceServer extends ResourceServerConfigurerAdapter { @Override public void configure(HttpSecurity http) throws Exception { http.authorizeRequests() // 对 "/api/**" 开启认证 .anyRequest() .authenticated() .and() .requestMatchers() .antMatchers("/api/**"); } }
在 OAuth2.0 中,定义了四种授权模式:
所以,笔者在 SpringBoot-Labs/lab-02 目录下,每一种方式,都提供了一个 Maven 项目示例。
4.1 授权码模式
Maven 项目结构如下:
Maven 项目结构
对应 GitHub 地址:
https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-02/authorization-code-server
① 配置授权服务器
// 授权服务器配置 @Configuration @EnableAuthorizationServer public class OAuth2AuthorizationServer extends AuthorizationServerConfigurerAdapter { @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.inMemory() // <1> // <2> begin ... .withClient("clientapp").secret("112233") // Client 账号、密码。 .redirectUris("http://localhost:9001/callback") // 配置回调地址,选填。 .authorizedGrantTypes("authorization_code") // 授权码模式 .scopes("read_userinfo", "read_contacts") // 可授权的 Scope // <2> end ... // .and().withClient() // 可以继续配置新的 Client // <3> ; } }
② 配置登陆账号
创建 application.properties 文件,并配置如下:
# Spring Security Setting security.user.name=yunai security.user.password=1024
③ 启动项目
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
启动项目
④ 获取授权码
4.1 浏览器打开
http://localhost:8080/oauth/authorize?client_id=clientapp&redirect_uri=http://localhost:9001/callback&response_type=code&scope=read_userinfo
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。