当前位置:   article > 正文

Spring Boot 2.x实战85 - Spring Security 9 - OAuth 2.0之Client_spring.security.oauth2.client.provider

spring.security.oauth2.client.provider

OAuth 2.0是安全授权的工业标准协议,我们了解它需要理解下面的专用术语:

  • 交互参与方:

    • Client:需要访问Resource Sever受保护资源的应用;
    • Resource Owner :终端用户,Client通过终端用户进行不同类型的授权(Grant Type);
    • Authorization Server:提供访问授权的应用,Client使用某种Grant TypeAuthorization Server获取Access Token
    • Resource Sever:包含受保护资源的应用,Client使用Access Token访问Resource Server的受保护资源;
  • 授权类型 - Grant Type

    • Authorization Code:让用户访问Client页面时,页面打向Authorization Server的登录页面,登录后显示授权访问页面,授权成功后Client即可获得Access Token访问Resource Server
    • Password:通过提供提供用户名和密码获得Access Token,一般是给应用服务的客户端使用(IOS、Android、Web App)。
    • Client Credentials:Client通过Client Id和Client Secret直接向Authorization Server请求Access Token;它主要用于非用户参与的应用,如后台服务。
  • Token

    • Access Token:用来访问受保护资源的唯一令牌;
    • Refresh Token:当Access Token失效时,我们可以使用Refresh Token来获取一个新的Access Token,它的时效性要远远大于Access Token
    • JWT:JSON Web Token,它代表双方之间安全传输的信息;它使用数字签名,传输的信息可以被验证和信任。
3.3 OAuth 2.0 Client

前面我们使用Resource Server和Authorization Server演示Grant Type为password的场景;这节我们结合Client演示Grant Type为Authorization Code

新建应用,信息如下:

Group:top.wisely

Artifact:client

Dependencies:Spring SecurityOAuth2 ClientSpring Web StarterLombok

build.gradle文件中的依赖如下:

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
	implementation 'org.springframework.boot:spring-boot-starter-security'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
  //...
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
3.3.1 Spring Boot的自动配置

Spring Boot通过OAuth2ClientAutoConfiguration,通过OAuth2ClientProperties使用spring.security.oauth2.client.*来配置Client;它导入了两个配置:

  • OAuth2ClientRegistrationRepositoryConfiguration:读取外部配置ClientRegistration(Client 注册)集合,并添加到InMemoryClientRegistrationRepository(在内存中存储ClientClientRegistration的库),且将InMemoryClientRegistrationRepository注册成了Bean。注册Client,需要指定Client的Registration以及它对应Client的Provider(Authorization Server)信息

    • Registration:通过配置spring.security.oauth2.client.registration.[registrationId].*来实现;

    • Provider:通过配置spring.security.oauth2.client.provider.[providerId].*来实现;Provider和Client是对应关系,providerIdregistrationId相同。

  • OAuth2WebSecurityConfiguration:为我们注册了两个Bean并做了相关的Spring Security配置。

    • OAuth2AuthorizedClientService:使用其实现类InMemoryOAuth2AuthorizedClientService注册Bean,用来管理被授权的Client(OAuth2AuthorizedClient,可获得用户的Access Token);

    • OAuth2AuthorizedClientRepository:使用其实现类AuthenticatedPrincipalOAuth2AuthorizedClientRepository注册Bean,用来在请求间持久化被授权的Client。

    • 使用HttpSecurity配置弃用OAuth 2.0的登录(oauth2Login())和Client(oauth2Client())设置:

      @Configuration(proxyBeanMethods = false)
      @ConditionalOnMissingBean(WebSecurityConfigurerAdapter.class)
      static class OAuth2WebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
             
      
         @Override
         protected void configure(HttpSecurity http) throws Exception {
             
            http.authorizeRequests().anyRequest().authenticated().and().oauth2Login()
                  .
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号