SprigCloudマイクロサービス——security+oauth 2に基づくセキュリティ保護(3):リソースサービス


記事の目次
  • は、jarパケットに加入する
  • .
  • 配置類
  • 資源サービスの設定:OAuth 2 Resource Config
  • リソースサービスクライアントを構成する:OAuth 2 LintConfig
  • リソースサービス構成
  • 問題
  • 実施形態1では、リソースサービスのコード構造が説明されている.これから具体的に実現します.
    jarのカバンに入れます
    共通のpomファイルにjarパッケージを導入する:
    
    <dependency>
    	<groupId>org.springframework.cloudgroupId>
    	<artifactId>spring-cloud-starter-oauth2artifactId>
    dependency>
    
    
    一般的にはすべてのマイクロサービスが資源サービスですので、このjarカバンが必要です.しかし、zulゲートウェイサービスのように、私のところではこのような資源サービスが必要ではないです.(security oauth 2で保護する必要はありません.)だから、このようなサービスに対して(アプリケーション全体では、このようなサービスは少数です.)、このjarパッケージを排除することができます.
    <dependency>
    	<groupId>fyk-platgroupId>
    	<artifactId>fyk-coreartifactId>
    	<exclusions>
    		<exclusion>
    			<groupId>org.springframework.cloudgroupId>
    			<artifactId>spring-cloud-starter-oauth2artifactId>
    		exclusion>
    	exclusions>
    dependency>
    
    クラスの設定
    配置類は共通のコードに書いてあります.一般的に、私のすべてのマイクロサービスはこのリソースサービス配置が必要です.もちろん、この設定が必要ではない極めて個別のサービス(例えば、Zulゲートウェイサービス)も存在しています.この場合、起動クラスで@Filterを使って、この構成を除外することができます.
    @EnableEurekaClient
    @SpringBootApplication
    @ComponentScan(value = { "com.boco.fyk.auth.**", "com.boco.fyk.core.**" }, excludeFilters = {
    		@Filter(type = FilterType.ASSIGNABLE_TYPE, classes = { OAuth2ResourceConfig.class,
    				OAuth2ClientConfig.class }) })
    @MapperScan("com.boco.fyk.auth.business.dao")
    public class ZuulApplication {
    	......
    }
    
    二つの配置類について説明します.
    資源サービスの設定:OAuth 2 Resource Config
    @Configuration
    @EnableResourceServer
    @EnableGlobalMethodSecurity(prePostEnabled = true)
    public class OAuth2ResourceConfig extends ResourceServerConfigurerAdapter {
    	
    	@Autowired
    	private SecuritySettings settings;
    	
    	@Override
    	public void configure(HttpSecurity http) throws Exception {
    		// @formatter:off
    		if(settings.getPermitAll()) {
    			//        
    			http.authorizeRequests().anyRequest().permitAll();
    		}else {
    			http
    				.authorizeRequests()
    				//           
    				.antMatchers(settings.getWhiteResources().split(",")).permitAll()
    				//     URL    
    				.antMatchers(settings.getPermital().split(",")).permitAll()
    				//       ,                    
    				.and().csrf().disable()
    				.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER)
    				//            
    				.and().exceptionHandling().authenticationEntryPoint(
    						(request, response, authException) -> response.sendError(HttpServletResponse.SC_UNAUTHORIZED))
    				.and().authorizeRequests().anyRequest().authenticated();
    		}
    		// @formatter:on
    	}
    	
    }
    
    資源配置クラスは最終的にResource Server Configrerインターフェースを実現するために使用されます.ここではResource Server Configrer Adapterを継承しています.これはResource Server Configurerインターフェースの簡単な実現です.
  • @EnbaleResource Server:Resource Server機能をオープンしました.
  • @EnbaleGlobal MethodSecurity:メソッドレベルの保護を開始しました.
  • ここのSecuritySettings配置クラスにはいくつかのプロジェクトのセキュリティ情報が配置されています.例えば、どのような資源があるかは保護が必要ではないです.実際の状況によって追加できます.彼も公共配置モジュールにいます.
    リソースサービスクライアントの設定:OAuth 2 lient Config
    私のアプリケーションには、アプリケーションとアプリケーションの間の相互呼出し(Feignにより実現)が存在する.例えば、AリソースサービスはBリソースサービスを呼び出す方法であり、BもAを相殺することができる.したがって、ここでは、OAuth 2によって保護されたリソースにアクセスできるように、リソースサービスにおいてクライアント情報を構成する.
    @Configuration
    @EnableOAuth2Client
    @EnableConfigurationProperties
    public class OAuth2ClientConfig {
    	
    	/**
    	 *           (   application.properties)
    	 * @author FYK
    	 * @return
    	 */
    	@Bean
    	@ConfigurationProperties(prefix = "security.oauth2.client")
    	public ClientCredentialsResourceDetails clientCredentialsResourceDetails() {
    		return new ClientCredentialsResourceDetails();
    	}
    
    	/**
    	 *  feign     ,       
    	 * @author FYK
    	 * @return
    	 */
    	@Bean
    	public RequestInterceptor oauth2FeignRequestlnterceptor() {
    		return new OAuth2FeignRequestInterceptor(new DefaultOAuth2ClientContext(),
    				this.clientCredentialsResourceDetails());
    	}
    
    	/**
    	 *  Request  ,  AccessTokenRequest   Bean
    	 * @author FYK
    	 * @return
    	 */
    	@Bean
    	public OAuth2RestTemplate clientCredentialsRestTemplate() {
    		return new OAuth2RestTemplate(clientCredentialsResourceDetails());
    	}
    }
    
    @EnbaleOAuth 2 lient:OAuth 2 Clint機能をオープンしました.また、ClientCredentialsResource DetialsタイプのBeanを配置しており、Beanのソースコードからは、設定ファイルのプレフィックスを読み込み、security.oauth.2.clientの構成でbeanの構成属性を取得することができる.したがって、いくつかの構成を追加する必要があります.
    リソースサービスの設定
    プロジェクト全体に配置センターを導入していますので、データベースの中でsqlを実行するだけで済みます.これはappication.propertiesでの構成情報を提供します.
    spring.zuul.ip.address=192.168.13.193:8080
    security.oauth2.resource.token-info-uri=http://${spring.zuul.ip.address}/fyk-oauth/oauth/check_token
    security.oauth2.client.client-id=xxxxxx
    security.oauth2.client.client-secret=xxx
    security.oauth2.client.grant-type=refresh_token,password,client_credentials
    security.oauth2.client.scope=server
    security.oauth2.client.access-token-uri=http://${spring.zuul.ip.address}/fyk-oauth/oauth/token
    security.oauth2.client.user-authorization-uri=http://${spring.zuul.ip.address}/fyk-oauth/oauth/authorize
    
    ここまでは完成したとしても、プロジェクト全体を新たに包装し、サービスを提供すればいいです.
    問題
    ここに問題があります.解決できませんでした.
  • 資源サービスの配置を行う時、spring.zull.ip.address=192.168.13.193:8080が配置されています.この設定はゲートウェイのアドレス(フロントエンドアクセスサービスのアドレス)であり、その後の構成は、fyk-oauth認証サービスにアクセスする際には、このアドレスを追加します.これらのサービスは全部同じ登録センターのeurkaに登録されています.この住所を追加しなくてもいいです.そのため、ある配置にはマッチしていないかもしれません.いくつかの方法を試してみましたが、実現されていません.