如何搭建一个认证的oauth2服务器?
1. 添加注解
@Configuration
@EnableAuthorizationServer
public class ImoocAuthorizationServerConfig {
2. 添加用户名密码的user
@Component
public class DemoUserDetailsService implements UserDetailsService {
private Logger logger = LoggerFactory.getLogger(getClass());
/*
* (non-Javadoc)
*
* @see org.springframework.security.core.userdetails.UserDetailsService#
* loadUserByUsername(java.lang.String)
*/
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// logger.info("表单登录用户名:" + username);
// Admin admin = adminRepository.findByUsername(username);
// admin.getUrls();
// return admin;
String password = "123456";
logger.info("数据库密码是:"+password);
return new User(username, password,
true, true, true, true,
// AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));
//如果不加ROLE_USER则会报403
AuthorityUtils.commaSeparatedStringToAuthorityList("admin,ROLE_USER"));
}
}
3. 配置clientid
server.port=9090
security.oauth2.client.clientId=test
security.oauth2.client.client-secret=test123
logging.level.root=debug
maven添加depency
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
源码分析
1. 启动程序,输入url
2. 如何获得授权码
- get 请求,转到授权页面
AuthorizationEndpoint.authorize->getUserApprovalPageResponse - 在这个页面,会forward到confirm的页面 forward:/oauth/confirm_access
- 这个请求会被WhitelabelApprovalEndpoint拦截,拦截后会生成一个视图,即让我们是否同意授权的视图
- approveOrDeny 同意后,getAuthorizationCodeResponse生成授权码
http://localhost:9090/?code=d8qlYv
3. 如何获得token
TokenEndpoint#getAccessToken
注意:这里要添加头信息,头信息是clientid,clientsecret,不是用户名与密码