《Spring Boot官方指南》28.3 -28.4

简介:

28.3 User Info RestTemplate的自定义

如果您有一个’user-info-uri’,资源服务器在内部使用’OAuth2RestTemplate’功能来获取用户的身份验证信息。这将提供一个带有’userInfoRestTemplate’主键的’@Bean’,你使用它的时候不需要知道这些。大多数提供程序使用默认就够了,但偶尔你可能需要添加额外的拦截器,或者更改请求验证器(来获取附加在传出请求种令牌)。要添加自定义只需创建一个类型为’UserInfoRestTemplateCustomizer’的bean,它有一个方法,将在bean创建后初始化之前调用。此处定制的rest template用于内部身份验证。

 

Tip
要在YAML中设置RSA键值,使用’pipe’连续标记将其分隔为多行(’|’),并记住缩进键值(它是一个标准的YAML语言特性)。 例如:

security:
    oauth2:
        resource:
            jwt:
                keyValue: |
                    -----BEGIN PUBLIC KEY-----
                    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC...
                    -----END PUBLIC KEY-----

28.3.1 Client

要将您的web应用变成OAuth2客户端,您只需添加“@ EnableOAuth2Client”注解,Spring Boot将自动创建“OAuth2RestOperations”所需的“OAuth2ClientContext”和“OAuth2ProtectedResourceDetails”。 Spring Boot不会自动创建这样的bean,但你可以轻松地创建自有的:

@Bean
public OAuth2RestTemplate oauth2RestTemplate(OAuth2ClientContext oauth2ClientContext,
        OAuth2ProtectedResourceDetails details) {
    return new OAuth2RestTemplate(details, oauth2ClientContext);
}
Note
您可能需要添加限定符并检查您的配置,因为你的应用程序中可能定义了多个“RestTemplate”。

此配置使用’security.oauth2.client.*’ 作为凭据(与您可能在授权服务器中使用的相同),但此外还需要知道授权服务器中的授权和令牌URI。 例如:

application.yml. 

security:
    oauth2:
        client:
            clientId: bd1c0a783ccdd1c9b9e4
            clientSecret: 1a9030fbca47a5b2c28e92f19050bb77824b5ad1
            accessTokenUri: https://github.com/login/oauth/access_token
            userAuthorizationUri: https://github.com/login/oauth/authorize
            clientAuthenticationScheme: form

当您尝试使用“OAuth2RestTemplate”时,具有此配置的应用程序将重定向到Github进行验证。如果你已经登录到Github,你甚至不会注意到它已经通过验证。 这些特定的证书只有在您的应用程序运行在8080端口时(在Github或其他提供商注册您自己的客户端应用程序来获得更多的灵活性)才会生效。

要限制客户端获取访问令牌时请求的范围,您可以设置“security.oauth2.client.scope”(用逗号分隔或YAML中的数组)。默认情况下范围为空,由授权服务器来决定其默认值,通常取决于该服务器所保留的在客户端注册中的设置。

Note
同样“security.oauth2.client.client-authentication-scheme”有一个设置默认值为’header’(但你可能需要将其设置为’form’,举个例子,假如Github作为你的OAuth2提供者,它不会喜欢头部认证)。实际上,’security.oauth2.clien.*’属性绑定在’AuthorizationCodeResourceDetails’的实例上,因此可以指定它的所有属性。
Tip
在非Web应用程序中,也可以创建一个“OAuth2RestOperations”,它依旧关联着’security.oauth2.client.*’配置。如果你使用它, 你会要求它是一个’客户端证书令牌授予’(并且不需要使用’@ EnableOAuth2Client’或’@ EnableOAuth2Sso’注解)。要防止基础结构被定义,只需从配置中删除“security.oauth2.client.client-id”(或将其设置为空字符串)。

28.3.2 单点登录

OAuth2客户端可用于从提供者获取用户详细信息(如果此类功能可用),然后将其转换为Spring Security的“身份验证”令牌。上述的资源服务器通过’user-info-uri’属性来支持这样的基于OAuth2的单点登录(SSO)协议的基础,Spring Boot使其通过提供“@ EnableOAuth2Sso”注解来更容易的实现。 上面的Github客户端可以通过添加注释并声明在端点的位置(除了上述已经列出的“security.oauth2.client.*”配置之外)来保护所有资源并使用Github’/ user /’端点进行身份验证 ):

application.yml. 

security:
    oauth2:
...
    resource:
        userInfoUri: https://api.github.com/user
        preferTokenInfo: false

由于默认情况下所有路径都是安全的,因此没有’home’页面可以提供给未认证的用户来邀请他们登录(通过访问’/ login’路径或’security.oauth2.sso.login指定的路径)。

要自定义要保护的访问规则或路径,您可以添加一个“home”页面,以及添加“@ EnableOAuth2Sso”注解到“WebSecurityConfigurerAdapter”,这将使它通过一些必要的部件来得到增强以使 ‘/ login’ 路径生效。例如,未经身份验证只允许通过“/”访问主页,其他保持默认设置:

@Configuration
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    public void init(WebSecurity web) {
        web.ignore("/");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.antMatcher("/**").authorizeRequests().anyRequest().authenticated();
    }

}

28.4 执行器安全

如果使用了执行器,你会发现

  • 即使应用程序端点不安全,管理端点也是安全的。
  • Security事件将转变成“AuditEvents”并发布到“AuditService”。
  • 默认用户将具有“ADMIN”角色以及“USER”角色。

可以使用外部属性(’management.security。*’)来修改执行器安全功能。要覆盖应用程序访问规则,请添加类型为“WebSecurityConfigurerAdapter”的’@Bean’,如果您不想覆盖执行程序访问规则,请使用’@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)’注解,或者如果你想要覆盖执行器访问规则请使用’@Order(ManagementServerProperties. ACCESS_OVERRIDE_ORDER)’注解。

转载自 并发编程网 - ifeve.com

相关文章
|
20天前
|
Java 应用服务中间件 Maven
SpringBoot 项目瘦身指南
SpringBoot 项目瘦身指南
38 0
|
23天前
|
Java API Spring
Spring的设计哲学--来自官方
Spring框架设计哲学强调在每个层级提供选择,允许延迟设计决策,如通过配置切换持久性提供商。它拥抱灵活性,适应不同观点,同时保持强向后兼容性,确保版本间少有破坏性更改。Spring注重API设计,追求高质量代码,拥有清晰无循环依赖的结构。这些原则使Spring成为Java开发中最受欢迎的框架之一。
|
1天前
|
XML Java C++
【Spring系列】Sping VS Sping Boot区别与联系
【4月更文挑战第2天】Spring系列第一课:Spring Boot 能力介绍及简单实践
21 0
【Spring系列】Sping VS Sping Boot区别与联系
|
2月前
|
XML 监控 druid
【Java专题_02】springboot+mybatis+pagehelper分页插件+druid数据源详细教程
【Java专题_02】springboot+mybatis+pagehelper分页插件+druid数据源详细教程
|
3月前
|
Java
springboot项目打包瘦身
springboot项目打包瘦身
|
5月前
|
Java 测试技术
Springboot集成JUnit5优雅进行单元测试
Springboot集成JUnit5优雅进行单元测试
|
7月前
|
XML Java 调度
Spring定时任务-任务执行和调度—官方原版
Spring定时任务-任务执行和调度—官方原版
67 0
|
7月前
|
SpringCloudAlibaba Java Nacos
「Spring Cloud Alibaba官方手册」首发爆火,Github上标星243k
几年前 Dubbo被 SpringCloud所取代,相同的剧本,可惜阿里巴巴和 Spring社区都是巨头,巨头之间战斗要考虑很多,于是它们想到了合作, SpringCloud与alibaba相结合,技术上有人负责更新新的组件,也还可以继续使用 Spring社区的技术。于是 SpringCloudAlibaba诞生了。
|
7月前
|
安全 Java Spring
用的挺顺手的 Spring Security 配置类,居然就要被官方弃用了?
用过 WebSecurityConfigurerAdapter的都知道对Spring Security十分重要,总管Spring Security的配置体系。但是马上这个类要废了,你没有看错,这个类将在5.7版本被@Deprecated所标记了,未来这个类将被移除。
|
7月前
|
前端开发 NoSQL Java
GitHub官方出手,一针见血!Spring Boot趣味实战手册来袭(彩版)
本书内容极其丰富,不仅涵盖了Spring MVC、MyBatis Plus、SpringData JPA、Spring Security、Quartz等主流框架,整合了MySQL、Druid、Redis、RabbitMQ、Elasticsearch等互联网常用技术与中间件,还涉及单元测试、异常处理、日志、Swagger等技术细节,以及AOP、IOC、自动配置、数据库事务、分布式锁等硬核知识。本书从初始化到部署、监控,实现了软件全生命周期一站式打包解决。

热门文章

最新文章