《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

时间: 2024-11-02 14:22:39

《Spring Boot官方指南》28.3 -28.4的相关文章

《Spring Boot官方指南》翻译邀请

学技术并发网始终建议同学们阅读原版官方文档,所以并发网每月都会组织大家翻译各种官方技术文档.9月份并发网组织大家翻译<Spring Boot官方指南>,欢迎有兴趣的同学参与. 如何领取  通过评论领取想要翻译的文章,每次领取一章,如Spring Boot Documentation,翻译完后再领取其他章节.领取完成之后,建议在一个星期内翻译完成,如果不能完成翻译,也欢迎你邀请其他同学和你一起完成翻译. 如何提交? 翻译完成之后请登录到并发网提交成待审核状态,会有专门的编辑校对后进行发布.校对完

《Spring Boot官方指南》28.1 – 28.2

28.1 OAuth2 如果您的类路径上有'spring-security-oauth2',您可以利用一些自动配置来使设置授权或资源服务器变得容易. 详细信息请见 Spring Security OAuth 2 Developers Guide. 28.1.1 授权服务器 使用'@EnableAuthorizationServer'注解 并设置'security.oauth2.client.client-id'和'security.oauth2.client.client-secret'属性来创

《Spring Boot官方指南》28.安全

28. 安全 如果Spring Security位于类路径上,那么Web应用程序将默认使用所有HTTP端点上的'basic'身份验证.要向Web应用程序添加方法级安全性,还可以为你想要的设置添加"@EnableGlobalMethodSecurity".通过点击Spring Security Reference能够找到更多的信息. 'AuthenticationManager' 有一个默认用户(用户名为'user' ,密码随机,在应用程序启动时在INFO级别输出) Using defa

《Spring Boot官方指南》(二)入门(二)

3.2.5 命令行补全工具 Spring Boot CLI附带了一些脚本,这些脚本为BASH 和zsh提供了命令行补全功能.在任何shell里面都可以source到这些脚本(也叫spring),也可以初始化到个人或者系统级别的命令行工具里面.在Debian系统里面,系统级别的脚本在这个路径:/shell-completion/bash,shell程序启动以后,这里面的所有脚本都可以执行.例如,您已经使用SDKMAN!安装了这些脚本,为了手动执行他们,可以这样操作: $ . ~/.sdkman/c

《Spring Boot官方指南》(一)Spring Boot 文档

Spring Boot文档 本章将对Spring Boot的文档接口做一个简短的描述,它可以成为你阅读本书的一个向导,如果确实不感兴趣,您也可以跳过. 1.关于本文档 Spring Boot文档有html,pdf和epub格式,您可以在这里下载到最新本地的文档.您可以免费下载并分享本文档,不需要任何声明和授权. 2.获取帮助 如果您在使用Spring Boot的过程中遇到任何问题,我们非常乐意为为您提供帮助! 试试这个链接,这里总结大部分人使用Spring Boot的过程中遇到的问题,没准有你需

《Spring Boot官方指南》-30.1 redis

Redis是一个缓存,消息中间件及具有丰富特性的键值存储系统.Spring Boot为Jedis客户端库和由Spring Data Redis提供的基于Jedis客户端的抽象提供自动配置.spring-boot-starter-redis'Starter POM'为收集依赖提供一种便利的方式. 连接Redis 你可以注入一个自动配置的RedisConnectionFactory,StringRedisTemplate或普通的跟其他Spring Bean相同的RedisTemplate实例.默认情

《Spring Boot官方指南》27.1.11. CORS support

跨域资源共享 (CORS)是一个被绝大部分浏览器实现的W3C标准,CORS允许你灵活的指定跨域请求是否授权.而不是使用一些不安全脆弱的方法,例如IFRAME或者JSONP. 在4.2版本中,SpringMVC默认不开启CORS功能 .在Spring Boot应用中不需要特定的配置,只需要通过@CrossOrigin注解完成 . 全局的CORS配置 需要注册一个自定义addCorsMappings(CorsRegistry)方法的WebMvcConfigurer实例: 查看源代码 打印帮助 01

《Spring Boot官方指南》47.3 跨域资源共享支持

47.3 跨域资源共享支持 跨域资源共享 (CORS)是一个被绝大部分浏览器实现的W3C标准,CORS允许你灵活的指定跨域请求是否授权.执行器的MVC服务接口可以通过配置支持这种功能. 跨域资源共享默认是关闭的,只有当endpoints.cors.allowed-origins 属性被设置时才会被开启.下面的配置允许来自example.com域发送GET和POST请求 endpoints.cors.allowed-origins=http://example.com endpoints.cors

Spring Boot 项目构建 之 使用 Spring Boot 构建应用(Building an Application with Spring Boot)

Table of contents What you'll build What you'll need How to complete this guide Build with Gradle Build with Maven Build with Spring Tool Suite Learn what you can do with Spring Boot Create a simple web application Create an Application class Run the