Spring Cloud Oauth2 初探

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud Oauth2 初探相关的知识,希望对你有一定的参考价值。

参考技术A

OAuth2 spring cloud spring security

一个原则: 使用前一定先看官方文档,看不懂再来搜寻第三方资料。

一个Spring框架的应用,需要一种能够保护 API 接口的实现,尝试过 OAuth1.0 ,发现更多的是有关 OAuth2.0 的讨论,且Spring Security 也有队 OAuth2 的支持,于是转而使用 OAuth2 。

其中核心依赖仅有

其中 Spring Security 已经包含在 Starter 中,无需再次声明,以保持 pom 简洁。

要使用OAuth2 服务器,仅需要使用 @EnableAuthorizationServer 注解。

此外OAuth2 Server还依赖于Spring Security,还需要加上 @EnableWebSecurity 注解。
当然,这还不够,根据Spring Security官方文档,你还需要继承 WebSecurityConfigurerAdapter 类以使Security配置生效。
你可以继承但不做任何改动,以使用默认配置。

OAuthServerConfig.class

启动程序,可以看到 OAuth2 的相关接口已经实现了,Spring 的自动配置已经为我们做了许多工作了,以致于我们可以开箱即用。

值得注意的是,自动配置类为我们生成了一个用户名为: user 的 "user" 和一个 "client" :

尝试携带上面的信息进行 GET 请求:
http://127.0.0.1:8080/oauth/authorize?client_id=64b5dabe-a97c-4f60-8492-acd24fc7599d&response_type=code&scope=user&redirect_uri=http://www.baidu.com

会跳转到 /login 页面进行登录验证,填入 user 和 log 中的密码 d457f3b2-a3d7-4ace-bfaf-44ab7bfd8ccc 即可验证通过。

重新跳转回授权页面,选择 Approve 同意并进行授权后,页面跳转至 redirect_url 并携带 code 信息。

取得 code 之后,就可以向服务器继续请求 access-token 了,使用 POST 方法继续请求。

http://127.0.0.1:8080/oauth/token?grant_type=authorization_code&code=bPVWmn&redirect_uri=http://www.baidu.com&scope=user

不出意外,你将会看到以下信息:

至此,我们已经完成了一整个 authorization_code 类型的OAuth2授权了。

同样的,你只需要一个依赖:

//todo: 未完成...

干货分享微服务spring-cloud(1.初探)

前言

读者:对spring、spring boot有一定了解

难度:初中级,旨在快速应用于项目

参考文献:网络、书籍、官方文档,有任何错误欢迎大家留言拍砖指正

实战模拟源码:https://github.com/yhqnh/demo-springcloud,使用spring-cloud dalston版本

1.     Spring boot

1.1.   依赖关系

spring cloud 强依赖spring boot

spring boot强依赖spring

弱弱说一句强依赖就是没有它不行,所以有必要对spring或spring boot一些特性作简单介绍

1.2.   元注解和组合注解

元注解:可以注解到别的注解上的注解,被注解的注解称之为组合注解。

例如@SpringBootApplication就是组合注解,它组和了@SpringBootConfiguration

@EnableAutoConfiguration等。

技术分享图片

1.3.   自动配置

spring boot会根据在类路径中的jar包和类,为jar包里的类自动配置bean,这样会极大地减少我们要使用的配置。spring boot通过spring4.X提供的条件注解condition来实现。spring4.x提倡使用java配置和注解配置组合,不需要任何xml配置即可实现spring所有配置。也可使用@ImportResource({“application1.xml”,“application2.xml”})对 xml配置的支持。

关闭特定的自动配置使用@SpringBootConfiguration的exclude属性,例如exclude = {DataSourceAutoConfiguration.class}来关闭数据源自动配置

技术分享图片

@condition根据满足某一特定条件创建一个特定的bean,比方说当类路径存在某一jar包时候,自动配置一个或多个bean。

@ConditionalOnBean:当容器里有指定的bean的条件下

@ConditionalOnClass:当类路径下有指定的类的条件下

@ConditionalOnMissingBean:当容器里没有指定bean的情况下

@ConditionalOnResource:类路径是否有指定的值

例如RabbitAutoConfiguration当发现类路径下没有ConnectionFactory类型的bean时创建一个

技术分享图片

我们来看看EnableAutoConfiguration注解的源码

技术分享图片

这里最关键的@import功能导入配置,EnableAutoConfigurationImportSelector使用SpringFactoriesLoader.loadFactories方法来扫描具有META-INF/spring.factories文件的jar包,而spring-boot-autoconfiguration的jar包里有spring.fatories文件,此文件包含了所有自动配置。

技术分享图片

技术分享图片

1.4.   多环境配置

在spring boot中,多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识。{profile}通过spring.profiles.active=test属性来设置则会加载application-test.properties配置文件。

1.5.  加载顺序

Spring boot加载属性顺序,数值越小优先级越高

1)        在命令行中的参数

2)        SPRING_APPLICATION_JSON中的属性。SPRING_APPLICATION_JSON是以json格式配置在系统环境变量中

3)        java:comp/env中的JNDI属性

4)        Java的系统属性,可以通过System.getProperties()获得的内容

5)        操作系统的环境变量

6)        通过random.*配置的随机属性

7)        位于当前应用jar包之外,针对不同{profile}环境的配置文件内容,例如application-{profile}.properties或是YAML定义的配置文件

8)        位于当前应用jar包之内,针对不同{profile}环境的配置文件内容,例如application-{profile}.properties或是YAML定义的配置文件

9)        位于当前应用jar包之外的application.propertiesYAML配置内容

10)    位于当前应用jar包之内的application.propertiesYAML配置内容

11)    @Configuration注解修改的类中,通过@PropertySource注解定义的属性

12)    应用默认属性,使用SpringApplication.setDefaultProperties定义的内容

例如Spring Cloud Configgit等外部获取配置来取代jar包内本地配置文件,这样即使同样名称的本地调试配置文件对其他demostagingprod也没有任何影响,因为7优先级高于8或者说9优先级高于10

1.6.   actuator与原生端点

spring-boot-starter-actuator模块的实现对于实施微服务可以有效省去或减少监控系统在采集应用指标时的开发量。它提供了一些原始端点。

技术分享图片

 

以上是关于Spring Cloud Oauth2 初探的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Data Flow初探

Spring Cloud Gateway初探

Spring Cloud Config初探

Spring Cloud OAuth2 搭建授权服务

保障微服务 Spring Cloud 安全 Oauth2

干货分享微服务spring-cloud(1.初探)