# vap-security **Repository Path**: wh1107066/vap-security ## Basic Information - **Project Name**: vap-security - **Description**: 资源服务器和认证服务器分离,支持动态url校验和注解方式校验。测试成功。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-06-21 - **Last Updated**: 2021-06-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## springboot-security-oauth2-server 认证服务器,颁发token、第三方应用认证、token认证的配置信息。 认证服务器采用redis进行token的存储 既有认证服务器也有资源服务器,需要配置该参数security.oauth2.resource.filter-order: 3 ## springboot-security-oauth2-resource 资源服务器需要配置Resource, 注意这块的public void configure(ResourceServerSecurityConfigurer resources)方法中没有配置 token的相关信息, 多以需要在application.yml中需要配置security.oauth2.resource.user-info-uri参数 ~~~java @Configuration @EnableResourceServer public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter { private static final String RESOURCE_ID = "my_rest_api"; @Override public void configure(ResourceServerSecurityConfigurer resources) { resources.resourceId(RESOURCE_ID).stateless(false); } @Override public void configure(HttpSecurity http) throws Exception { http.httpBasic().and() .authorizeRequests() // .antMatchers("/oauth/token").permitAll() .anyRequest().authenticated() .and().exceptionHandling().accessDeniedHandler(new OAuth2AccessDeniedHandler()); } } ~~~ ~~~java 配置userinfo的url地址。 授权服务端中的一个接口 需要提供,返回用户信息 security.oauth2.resource.user-info-uri=http://127.0.01:8090/user/me proxy.auth.load-balanced=true ~~~ ## springboot-resource-method 资源服务器需要配置Resource, 基于方法的带注解的方式进行验证, 策略通过AOP的方式进行管控行为:只是针对拥有admin:user的权限, 或者admin: 开头的权限,或者更加细粒度的admin:user:add权限 admin:user:list admin:user:add admin:user:edit admin:user:delete admin:user:preview admin:user:import admin:user:export admin:user:upload admin:user:download ## springboot-resource-url 资源服务器需要配置Resource, 基于url的方式进行动态的鉴权方式。 注意这块的public void configure(ResourceServerSecurityConfigurer resources)方法中没有配置 token的相关信息, 多以需要在application.yml中需要配置security.oauth2.resource.user-info-uri参数 ## springboot-resource-url-other 资源服务器需要配置Resource, 注意这块resources.tokenStore(tokenStore); 可以不用采用application.yml中需要配置security.oauth2.resource.user-info-uri参数,性能要优与实时获取认证服务器的接口数据。 ~~~java @Configuration @EnableResourceServer @Order(3) public class MyResourceConfigurerAdapter extends ResourceServerConfigurerAdapter { private static final String[] AUTH_WHITELIST= {"/v2/api-docs", "/swagger/**", "/doc.html"}; @Autowired private OAuth2WebSecurityExpressionHandler expressionHandler; @Autowired private TokenStore tokenStore; @Override public void configure(ResourceServerSecurityConfigurer resources) throws Exception { super.configure(resources); resources.tokenStore(tokenStore); // 可以使用配置的方式, 在security.oauth2.resource.user-info-uri=http://127.0.0.1:8090/user/me resources.expressionHandler(expressionHandler); } ~~~ ## springboot-security-oauth2-jwt-server jwt的认证服务器配置公钥和私钥。 资源服务器配置公钥信息。 认证服务器项目中配置下面的参数并进行KeyPair解析,jks进行签名签名 ~~~java encrypt.key-store.location=classpath:icekeystore.jks encrypt.key-store.secret=123456 encrypt.key-store.alias=icesslkey ~~~ ## springboot-security-oauth2-jwt-resource2 jwt的鉴权的方法拦截, 采用本地使用公钥的自动解析及鉴权的方式, ## springboot-security-oauth2-jwt-resource 需要设置如下参数,且需要放置pubkey.txt 在项目启动的时候需要执行一次 security.oauth2.resource.jwt.key-uri=http://127.0.0.1:8091/oauth/token_key security.oauth2.resource.jwt.key-value=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkqLDL4hXrru/yn5a+hy56qTzgP7NyhMaQJF+3SDeB0/tvuoBTjhh4qNaYyE63POwwdKRmMlpQ7BzKjUDfGTjFNZ0DOBBS4tlcxlJJmNP2fW6IDphP2TVRrZ4uWi1QHf4N1sK8K2pretuLfWapnNgFRw65PrIiy20UERR7+WHF34bcDeeNpTRyye6wfXAPOlzvp2WI8Bh1OsQQgN5jdxAUYM3iyyVn6BbvA5+x+mTcJ7/0S36Vb7ZjhBu00YMsHt+oedNZE4Y91tsmJfkbJMFtp1Xhf3yUylK0+rI5vGLlSfC//tndM+xT+VOogzOPknPuxRGBb+z+3TMk4Jid+y1ZQIDAQAB ## springboot-security-oauth2-jwt-resource2 放置pubkey.txt , 通过TokenStore 和 JwtAccessTokenConverter 来自动解析公钥文件进行解析 ~~~java @Bean @ConditionalOnMissingBean(name="jwtTokenStore") @Order(2) public TokenStore jwtTokenStore() { return new JwtTokenStore(jwtAccessTokenConverter); } @Bean @Order(1) public JwtAccessTokenConverter jwtAccessTokenConverter() { JwtAccessTokenConverter converter = new JwtAccessTokenConverter(); converter.setVerifierKey(getPubKey()); return converter; } @Override public void configure(ResourceServerSecurityConfigurer resources) throws Exception { resources.tokenStore(jwtTokenStore) .stateless(true); } ~~~