工作流程
基本使用
dependency>
groupId>org.springframework.bootgroupId>
artifactId>spring-boot-starter-securityartifactId>
version>2.3.12.RELEASEversion>
dependency>
dependency>
groupId>org.springframework.security.oauthgroupId>
artifactId>spring-security-oauth2artifactId>
version>2.3.4.RELEASEversion>
dependency>
dependency>
groupId>org.springframework.bootgroupId>
artifactId>spring-boot-starter-webartifactId>
version>2.3.12.RELEASEversion>
dependency>
@Configuration
public class MyOAuth2Config {
/**
* 加密方式
*/
@Bean
public Password服务器托管网Encoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
}
- 创建安全配置类:指定认证用户的用户名和密码,用户和密码是资源的所有者,
- 创建认证服务器:这个客户端id和密码跟上面的用户名和密码是不一样的,客户端id和密码是应用系统的标识,每个应用系统对应一个客户端id和密码
/**
* 安全配置类
*/
@EnableWebSecurity
public class OAuth2SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private PasswordEncoder passwordEncoder;
/**
* 用户类信息
*/
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("admin")
.password(passwordEncoder.encode("123456"))
.authorities("admin_roles");
}
}
/**
* 认证服务器
*/
@Configuration
@EnableAuthorizationServer //开启认证服务器
public class OAuth2AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
@Autowired
private PasswordEncoder passwordEncoder;
/**
* 配置被允许访问此认证服务器的客户端详细信息
* 1.内存管理
* 2.数据库管理方式
*/
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory()
//客户端名称
.withClient("test-pc")
//客户端密码
.secret(passwordEncoder.encode("123456"))
//资源id,商品资源
.resourceIds("oauth2-server")
/**
* 授权类型,可同时支持多种授权类型
* authorizat服务器托管网ion_code:授权码模式
* password:密码模式
* implicit:简化模式
* client_credentials:客户端模式
* refresh_token:更新令牌
*/
.authorizedGrantTypes("client_credentials","refresh_token")
//授权范围标识,哪部分资源可访问(all是标识,不是代表所有)
//比如指定微服务名称,则只可以访问指定的微服务
.scopes("all")
//false跳转到授权页面手动点击授权,true不用手动授权,直接响应授权码
.autoApprove(false)
//客户端回调地址,一定要和申请授权码时用的redirect_uri一致
//当获取授权码后,认证服务器会重定向到指定的这个URL,并且带着一个授权码code响应
.redirectUris("http://www.baidu.com/");
}
}
获取Access Token
接口获取
Access Token Request(客户端授权模式获取Token)
- grant_type:必须的。值必须是”client_credentials”。
- scope:可选的。
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
例如:http://localhost:8080/oauth/token?client_id=test-pc&client_secret=123456&grant_type=client_credentials
Access Token Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":"example",
"expires_in":3600,
"example_parameter":"example_value"
}
Postman获取
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
视觉slam十四讲 —CH4 李群与李代数求导 李群与李代数相较于CH3是比较的抽象的数学知识,这个工具的提出目的是解决一些旋转位姿描述的优化问题。本讲最终的目的是解决如何描述对旋转求导的问题。 1. 什么是群 群是一种集合加上一种运算的代数结构 记集合为…