赞
踩
OAuth 2.0是安全授权的工业标准协议,我们了解它需要理解下面的专用术语:
交互参与方:
Resource Sever
受保护资源的应用;Grant Type
);Client
使用某种Grant Type
向Authorization Server
获取Access Token
;Client
使用Access Token
访问Resource Server
的受保护资源;授权类型 - Grant Type
Token
前面我们使用Resource Server和Authorization Server演示Grant Type为password
的场景;这节我们结合Client演示Grant Type为Authorization Code
。
新建应用,信息如下:
Group:top.wisely
Artifact:client
Dependencies:Spring Security
、OAuth2 Client
、Spring Web Starter
、Lombok
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'
//...
}
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是对应关系,providerId
和registrationId
相同。
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()
.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。