springcloud Oauth2授权,四种授权类型
创建认证服务器:
pom依赖:
- <?xml version=”1.0” encoding=”UTF-8”?>
- <project xmlns=”http://maven.apache.org/POM/4.0.0“
- xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“
- xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
springcloud1 org.example 1.0-SNAPSHOT 4.0.0 springcloud-oauth-uaa-8003 org.springframework.cloud spring-cloud-dependencies Finchley.RELEASE pom import org.springframework.boot spring-boot-starter-web 2.1.4.RELEASE org.springframework.boot spring-boot-test org.springframework.cloud spring-cloud-netflix-eureka-client org.springframework.boot spring-boot-starter-security org.springframework.cloud spring-cloud-starter-oauth2 org.springframework.security spring-security-jwt
创建认证服务器配置类AuthorizationServerConfigurerAdapter:
- package com.shen.config;
- import jdk.nashorn.internal.parser.Token;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.http.HttpMethod;
- import org.springframework.security.authentication.AuthenticationManager;
- import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
- import org.springframework.security.crypto.factory.PasswordEncoderFactories;
- import org.springframework.security.crypto.password.PasswordEncoder;
- import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
- import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
- import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
- import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
- import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer;
- import org.springframework.security.oauth2.provider.ClientDetailsService;
- import org.springframework.security.oauth2.provider.code.AuthorizationCodeServices;
- import org.springframework.security.oauth2.provider.code.InMemoryAuthorizationCodeServices;
- import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices;
- import org.springframework.security.oauth2.provider.token.DefaultTokenServices;
- import org.springframework.security.oauth2.provider.token.TokenStore;
- import org.springframework.security.oauth2.provider.token.store.InMemoryTokenStore;
- @Configuration
- @EnableAuthorizationServer
- public class AuthorizationServer extends AuthorizationServerConfigurerAdapter {
- @Bean
- public PasswordEncoder passwordEncoder() {
- return new BCryptPasswordEncoder();
- }
- @Bean
- public AuthorizationCodeServices authorizationCodeServices(){
- // 配置授权码服务
- return new InMemoryAuthorizationCodeServices();
- }
- @Bean
- public TokenStore tokenStore(){
- return new InMemoryTokenStore();
- }
- @Autowired
- private TokenStore tokenStore;
- @Autowired
- private AuthorizationCodeServices authorizationCodeServices;
- @Autowired
- private AuthenticationManager authenticationManager;
- @Override
- public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
- clients.inMemory()
- .withClient(“client1”)
- .secret(new BCryptPasswordEncoder().encode(“secret”))
- .authorizedGrantTypes(“client_credentials”, “password”, “refresh_token”, “authorization_code”)
- .scopes(“all”)
- .resourceIds(“all”)
- .autoApprove(false)
- .redirectUris(“http://www.baidu.com“)
- .accessTokenValiditySeconds(1200)
- .refreshTokenValiditySeconds(50000);
- }
- @Autowired
- private ClientDetailsService clientDetailsService;
- @Bean
- public AuthorizationServerTokenServices tokenServices(){
- DefaultTokenServices services = new DefaultTokenServices();
- services.setClientDetailsService(clientDetailsService);
- services.setSupportRefreshToken(true);
- services.setTokenStore(tokenStore);
- services.setAccessTokenValiditySeconds(7200);
- services.setRefreshTokenValiditySeconds(36000);
- return services;
- }
- @Override
- public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
- oauthServer
- .tokenKeyAccess(“permitAll()”)
- //allow check token
- .checkTokenAccess(“permitAll()”)
- .allowFormAuthenticationForClients();
- }
- @Override
- public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
- endpoints.
- authenticationManager(authenticationManager)
- .authorizationCodeServices(authorizationCodeServices)
- .tokenServices(tokenServices())
- .allowedTokenEndpointRequestMethods(HttpMethod.POST);
- }
- }
创建security配置实现类WebSecurityConfigurerAdapter:
- package com.shen.config;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.security.authentication.AuthenticationManager;
- import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
- import org.springframework.security.config.annotation.web.builders.HttpSecurity;
- import org.springframework.security.config.annotation.web.builders.WebSecurity;
- import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
- import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
- import org.springframework.security.crypto.password.PasswordEncoder;
- @Configuration
- public class MySecurityConfig extends WebSecurityConfigurerAdapter {
- private PasswordEncoder passwordEncoder() {
- return new BCryptPasswordEncoder();
- }
- @Override
- @Bean
- public AuthenticationManager authenticationManagerBean() throws Exception {
- return super.authenticationManagerBean();
- }
- @Override
- protected void configure(AuthenticationManagerBuilder auth) throws Exception {
- // Spring Security提供了一套基于内存的验证
- auth.inMemoryAuthentication()
- .passwordEncoder(new BCryptPasswordEncoder())
- .withUser(“admin”).password(new BCryptPasswordEncoder()
- .encode(“123456”)).roles(“r1”);
- }
- @Override
- protected void configure(HttpSecurity http) throws Exception {
- // 决定那些请求被拦截
- http
- .authorizeRequests()
- .antMatchers(“/css/**“, “/js/**“, “/fonts/**“, “/index”).permitAll() //都可以访问
- // .antMatchers(“”).permitAll()// 主路径放行
- .anyRequest().permitAll()// 其他请求需经过验证
- .and()
- .formLogin()
- .loginProcessingUrl(“/login”)
- .permitAll()// 表单登录允许任意权限访问
- .and()
- .logout().permitAll();// 注销操作允许任意权限访问
- http.csrf().disable();// 关闭默认的csrf认证
- }
- // @Override
- // public void configure(WebSecurity web) throws Exception {
- // web.ignoring().antMatchers(“/js’/**“, “/css/**“, “/images/**“);// 对js、css、images不做拦截
- // }
- }
获取授权码方式:
授权码模式:
访问此链接获取授权码:http://localhost:8003/oauth/authorize?response\_type=code&client\_id=client1&redirect\_uri=http://www.baidu.com
这个就是授权码:
然后通过授权码获取token:
密码模式(直接通过账号密码获取token):
还没有评论,来说两句吧...