SprigCloudマイクロサービス——security+oauth 2に基づくセキュリティ保護(3):リソースサービス
18654 ワード
記事の目次は、jarパケットに加入する .配置類 資源サービスの設定:OAuth 2 Resource Config リソースサービスクライアントを構成する:OAuth 2 LintConfig リソースサービス構成 問題 実施形態1では、リソースサービスのコード構造が説明されている.これから具体的に実現します.
jarのカバンに入れます
共通のpomファイルにjarパッケージを導入する:
配置類は共通のコードに書いてあります.一般的に、私のすべてのマイクロサービスはこのリソースサービス配置が必要です.もちろん、この設定が必要ではない極めて個別のサービス(例えば、Zulゲートウェイサービス)も存在しています.この場合、起動クラスで@Filterを使って、この構成を除外することができます.
資源サービスの設定:OAuth 2 Resource Config@EnbaleResource Server:Resource Server機能をオープンしました. @EnbaleGlobal MethodSecurity:メソッドレベルの保護を開始しました. ここのSecuritySettings配置クラスにはいくつかのプロジェクトのセキュリティ情報が配置されています.例えば、どのような資源があるかは保護が必要ではないです.実際の状況によって追加できます.彼も公共配置モジュールにいます.
リソースサービスクライアントの設定:OAuth 2 lient Config
私のアプリケーションには、アプリケーションとアプリケーションの間の相互呼出し(Feignにより実現)が存在する.例えば、AリソースサービスはBリソースサービスを呼び出す方法であり、BもAを相殺することができる.したがって、ここでは、OAuth 2によって保護されたリソースにアクセスできるように、リソースサービスにおいてクライアント情報を構成する.
リソースサービスの設定
プロジェクト全体に配置センターを導入していますので、データベースの中でsqlを実行するだけで済みます.これはappication.propertiesでの構成情報を提供します.
問題
ここに問題があります.解決できませんでした.資源サービスの配置を行う時、spring.zull.ip.address=192.168.13.193:8080が配置されています.この設定はゲートウェイのアドレス(フロントエンドアクセスサービスのアドレス)であり、その後の構成は、fyk-oauth認証サービスにアクセスする際には、このアドレスを追加します.これらのサービスは全部同じ登録センターのeurkaに登録されています.この住所を追加しなくてもいいです.そのため、ある配置にはマッチしていないかもしれません.いくつかの方法を試してみましたが、実現されていません.
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インターフェースの簡単な実現です.リソースサービスクライアントの設定: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
ここまでは完成したとしても、プロジェクト全体を新たに包装し、サービスを提供すればいいです.問題
ここに問題があります.解決できませんでした.