Spring Cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)

简介: Spring Cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)

rvices是其默认实现,他使用了默认的InMemoryTokenStore,不会持久化token;

token存储方式共有三种分别是:
(1)InMemoryTokenStore:存放内存中,不会持久化

(2)JdbcTokenStore:存放数据库中

(3)Jwt: json web token

授权类型:
可以通过AuthorizationServerEndpointsConfigurer来进行配置,默认情况下,支持除了密码外的所有授权类型。相关授权类型的一些类:

(1)authenticationManager:直接注入一个AuthenticationManager,自动开启密码授权类型

(2)userDetailsService:如果注入UserDetailsService,那么将会启动刷新token授权类型,会判断用户是否还是存活的

(3)authorizationCodeServices:AuthorizationCodeServices的实例,auth code 授权类型的服务

(4)implicitGrantService:imlpicit grant

(5)tokenGranter:

endpoint的URL的配置:
(1)AuthorizationServerEndpointsConfigurer的pathMapping()方法,有两个参数,第一个是默认的URL路径,第二个是自定义的路径

(2)WebSecurityConfigurer的实例,可以配置哪些路径不需要保护,哪些需要保护。默认全都保护。

自定义UI:
(1)有时候,我们可能需要自定义的登录页面和认证页面。登陆页面的话,只需要创建一个login为前缀名的网页即可,在代码里,设置为允许访问,这样,系统会自动执行你的登陆页。此登陆页的action要注意一下,必须是跳转到认证的地址。

(2)另外一个是授权页,让你勾选选项的页面。此页面可以参考源码里的实现,自己生成一个controller的类,再创建一个对应的web页面即可实现自定义的功能。

下面梳理一下授权获取token流程:
(1)端口号换成你自己的认证服务器的端口号,client_id也换成你自己的,response_type类型为code。

localhost:8080/uaa/oauth/authorize?client_id=client&response_type=code&redirect_uri=http://www.baidu.com
(2)这时候你将获得一个code值:http://www.baidu.com/?code=G0C20Z

(3)使用此code值来获取最终的token:

curl -X POST -H "Cant-Type: application/x-www-form-urlencoded" -d 'grant_type=authorization_code&code=G0C20Z&redirect_uri=http://www.baidu.com' "http://client:secret@localhost:8080/uaa/oauth/token"

返回值:

{"access_token":"b251b453-cc08-4520-9dd0-9aedf58e6ca3","token_type":"bearer","expires_in":2591324,"scope":"app"}

(4)用此token值来调用资源服务器内容(如果资源服务器和认证服务器在同一个应用中,那么资源服务器会自己解析token值,如果不在,那么你要自己去做处理)

curl -H "Authorization: Bearer b251b453-cc08-4520-9dd0-9aedf58e6ca3" "localhost:8081/service2(此处换上你自己的url)"

四、Resource Server:保护资源,需要令牌才能访问
在配置类上加上注解@EnableResourceServer即启动。使用ResourceServerConfigurer进行配置:

(1)tokenServices:ResourceServerTokenServices的实例,声明了token的服务

(2)resourceId:资源Id,由auth Server验证。

(3)其它一些扩展点,比如可以从请求中提取token的tokenExtractor

(4)一些自定义的资源保护配置,通过HttpSecurity来设置

使用token的方式也有两种:

(1)Bearer Token(https传输方式保证传输过程的安全):主流

(2)Mac(http+sign)

如何访问资源服务器中的API?

如果资源服务器和授权服务器在同一个应用程序中,并且您使用DefaultTokenServices,那么您不必太考虑这一点,因为它实现所有必要的接口,因此它是自动一致的。如果您的资源服务器是一个单独的应用程序,那么您必须确保您匹配授权服务器的功能,并提供知道如何正确解码令牌的ResourceServerTokenServices。与授权服务器一样,您可以经常使用DefaultTokenServices,并且选项大多通过TokenStore(后端存储或本地编码)表示。

(1)在校验request中的token时,使用RemoteTokenServices去调用AuthServer中的/auth/check_token。

(2)共享数据库,使用Jdbc存储和校验token,避免再去访问AuthServer。

(3)使用JWT签名的方式,资源服务器自己直接进行校验,不借助任何中间媒介。

五、oauth client
在客户端获取到token之后,想去调用下游服务API时,为了能将token进行传递,可以使用RestTemplate.然后使用restTemplate进行调用Api。

注:

scopes和authorities的区别:

scopes是client权限,至少授予一个scope的权限,否则报错。

authorities是用户权限。

以上是我从网上找到的一篇写的不错的博客,希望可以帮助大家快速了解OAuth2.0,下一篇文章我们正式介绍OAuth2.0在当前框架中的使用。

从现在开始,我这边会将近期研发的spring cloud微服务云架构的搭建过程和精髓记录下来,帮助更多有兴趣研发spring cloud框架的朋友,大家来一起探讨spring cloud架构的搭建过程及如何运用于企业项目。完整项目的源码来源 技术支持1791743380

目录
相关文章
|
3月前
|
SQL Java 测试技术
在Spring boot中 使用JWT和过滤器实现登录认证
在Spring boot中 使用JWT和过滤器实现登录认证
225 0
|
2月前
|
Java 对象存储 开发者
解析Spring Cloud与Netflix OSS:微服务架构中的左右手如何协同作战
Spring Cloud与Netflix OSS不仅是现代微服务架构中不可或缺的一部分,它们还通过不断的技术创新和社区贡献推动了整个行业的发展。无论是对于初创企业还是大型组织来说,掌握并合理运用这两套工具,都能极大地提升软件系统的灵活性、可扩展性以及整体性能。随着云计算和容器化技术的进一步普及,Spring Cloud与Netflix OSS将继续引领微服务技术的发展潮流。
56 0
|
1月前
|
Java Spring
Spring底层架构源码解析(三)
Spring底层架构源码解析(三)
111 5
|
1月前
|
XML Java 数据格式
Spring底层架构源码解析(二)
Spring底层架构源码解析(二)
|
1月前
|
JSON 前端开发 Java
Spring Boot框架中的响应与分层解耦架构
在Spring Boot框架中,响应与分层解耦架构是两个核心概念,它们共同促进了应用程序的高效性、可维护性和可扩展性。
52 3
|
2月前
|
存储 Java 数据库
Spring Boot 优雅实现多租户架构
本文详细介绍如何使用Spring Boot和Spring Cloud实现多租户架构。多租户架构允许多个租户共用一个应用,各自拥有独立资源和数据。其优势包括满足个性化需求、降低成本、复用代码以及增强可扩展性。文中探讨了架构选型、数据库设计、应用部署及租户管理等内容,并提供了具体实现步骤和技术细节。适用于SaaS应用和多租户云服务等场景。
|
3月前
|
负载均衡 Java 应用服务中间件
Spring Boot 多活架构背后究竟隐藏着怎样的神秘力量?快来一探究竟!
【8月更文挑战第29天】在数字化时代,企业应用需具备高可用性和可靠性,Spring Boot 作为一种流行 Java 框架,为实现多活架构(Active-Active Architecture)提供了强大支持。多活架构通过在多个数据中心或节点上同时运行应用,确保高可用性、负载均衡及故障恢复。Spring Boot 可与 Nginx、HAProxy 等负载均衡器集成,并利用 Spring Cloud 实现服务发现与注册,确保系统性能及灾难恢复能力。结合数据库复制和分布式缓存技术,多活架构还能保障数据一致性与同步,满足不同业务需求。
39 1
|
3月前
|
Cloud Native
云原生架构之X无限延伸:跨AZ、跨Region、跨Cloud,一文让你彻底解锁!
【8月更文挑战第25天】在云原生架构中,可扩展性至关重要,它确保了应用能按需高效调整资源。本文聚焦于三种扩展策略:跨AZ、跨Region及跨云扩展。跨AZ扩展通过在同一云内部不同可用区间部署应用副本增强容错性;跨Region扩展则通过不同地理区域的应用副本部署提升全球访问性能与可靠性;而跨云扩展则利用多云环境进一步加强应用的弹性和覆盖范围。文中提供了基于AWS CloudFormation的具体实践示例,帮助读者深入理解这些扩展机制的实际应用。
121 2
|
3月前
|
JSON 安全 Java
|
3月前
|
消息中间件 Kafka Java
Spring 框架与 Kafka 联姻,竟引发软件世界的革命风暴!事件驱动架构震撼登场!
【8月更文挑战第31天】《Spring 框架与 Kafka 集成:实现事件驱动架构》介绍如何利用 Spring 框架的强大功能与 Kafka 分布式流平台结合,构建灵活且可扩展的事件驱动系统。通过添加 Spring Kafka 依赖并配置 Kafka 连接信息,可以轻松实现消息的生产和消费。文中详细展示了如何设置 `KafkaTemplate`、`ProducerFactory` 和 `ConsumerFactory`,并通过示例代码说明了生产者发送消息及消费者接收消息的具体实现。这一组合为构建高效可靠的分布式应用程序提供了有力支持。
109 0