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

-
交互参与方:
- Client:需要访问
Resource Sever受保护资源的应用; - Resource Owner :终端用户,Client通过终端用户进行不同类型的授权(
Grant Type); - Authorization Server:提供访问授权的应用,
Client使用某种Grant Type向Authorization Server获取Access Token; - Resource Sever:包含受保护资源的应用,
Client使用Access Token访问Resource Server的受保护资源;
- Client:需要访问
-
授权类型 - 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.2 OAuth 2.0 Resource Server
新建应用,信息如下:
Group:top.wisely
Artifact:resource-server
Dependencies:Spring Security、OAuth2 Resource Server、Spring Web Starter、Lombok
build.gradle文件中的依赖如下:
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
//...
}
3.2.1 Spring Boot的自动配置
Spring Boot使用OAuth2ResourceServerJwtConfigurationResource Server做了自动配置,它使用OAuth2ResourceServerProperties通过spring.security.oauth2.resourceserver.*进行配置。OAuth2ResourceServerJwtConfiguration导入了两个配置:
-
OAuth2ResourceServerJwtConfiguration:配置JWT Token解码的JwtDecoder。- 使用Authorization Server的 JWK Set URI端点进行解码,使用
spring.security.oauth2.resourceserver.jwt.jwk-set-uri配置; - 使用Authorization Server的keyStore的公钥进行解码,使用
spring.security.oauth2.resourceserver.jwt.public-key-location配置;
- 使用Authorization Server的 JWK Set URI端点进行解码,使用
-
OAuth2ResourceServerWebSecurityConfiguration:常规的Spring Security配置,使用HttpSecurity配置Resource Server和JWT:@Configuration(proxyBeanMethods = false) @ConditionalOnBean(JwtDecoder.class) static class OAuth2WebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().anyRequest().authenticated().and() .oauth2ResourceServer().jwt(); } }
3.2.1 方式1:JWK Set路径配置
我们可以通过在Resource Server中设置JWK Set路径解码JWT Token。
3.2.1.1 Authorization Server的修改
我们对JWT的操作依赖于nimbus包,需添加依赖:
implementation 'com.nimbusds:nimbus-jose-jwt:7.0.1'
Resource Server端已通过spring-boot-starter-oauth2-resource-server自动依赖。
使用JWK Set URI需Authorization Server提供支持,我们需要在Authorization Server上添加端点:
@FrameworkEndpoint //1
public class

&spm=1001.2101.3001.5002&articleId=107017518&d=1&t=3&u=205da3f4af9241b0b923006926184c8a)
2979

被折叠的 条评论
为什么被折叠?



