/ / Spring Boot WebアプリケーションでREST APIを保護する方法は? -休憩、スプリングブーツ、スプリングセキュリティ

SpringブートWebアプリケーションでREST APIを保護する方法は? - 休息、春の靴、春の安全

2つのSpring Boot Webアプリケーションがあります。 両方のアプリケーションには、異なるデータベースと異なるユーザーのセットがあります。また、どちらのアプリケーションも、正常に機能する認証と承認にSpring Securityを使用します。

どの時点でも、最初のアプリケーションの1つのインスタンスが実行され、2番目のWebアプリケーションの複数のインスタンスが実行されます。

最初のWebアプリケーション(1つのインスタンスを実行)からREST APIを公開し、2番目のWebアプリケーション(複数のインスタンスを実行)からそのREST APIを使用できるようにします。

適切な認証を使用して、2番目のアプリケーションのインスタンスのみがREST APIに安全にアクセスできるようにする方法を教えてください。

回答:

回答№1の場合は3

セキュリティを変更できる場合は、OAUTH2を使用することをお勧めします。基本的に、API呼び出しを行うためにAPP2インスタンスで使用されるトークンを生成します。 詳細はこちらをご覧ください。

https://spring.io/guides/tutorials/spring-boot-oauth2/

http://websystique.com/spring-security/secure-spring-rest-api-using-oauth2/

ただし、「APPのセキュリティを変更できない」場合は、現在のスキーマを引き続き使用できます。 APP1では、API呼び出し用のユーザーを作成できます。このユーザーは、APIサービスにのみアクセスできます。 APP2には、APP1にアクセスするための資格情報を保存する必要があります。最後に、APP1にログインし、HTTPクライアントを使用してAPIを呼び出します。SpringRestTemplateまたはApache HttpComponents Clientを使用できます。


回答№2の場合は0

セキュリティの側面を真剣に考えているのであれば、SSLベースの認証がオプションになる可能性があります。

App 1で公開されているREST APIがHTTP経由であると仮定すると、クライアントがこのREST API(App 1で公開)にアクセスしようとするときにSSL / TLS証明書を提供するようクライアントに要求するようにApp 1を構成できます。

これは、クライアントが実際にアプリ2からのクライアントであることを識別するのに役立ちます。

さらに2セント:
App 1 REST API呼び出しにロードが必要な場合バランスを取るには、NGINXを選択する必要があります。 SSLクライアント証明書ベースの認証はNGINXにオフロードでき、SpringブートアプリはSSL関連の構成を心配する必要がなくなります。


回答№3の場合は0

私たちが行ったソリューションは、OAuth2 client_credentialsワークフローを使用して両方を保護することでした。これは、呼び出し側ユーザーではなく、クライアントが自分自身に代わってトークンを要求するOAuth2フローです。

チェックアウト Spring Cloudのセキュリティ

1)を使用してサービスを保護する @EnableResourceServer

@SpringBootApplication
@EnableResourceServer
public class Application ...

2)を使用して、あるサービスから別のサービスに電話をかける OAuth2RestTemplate

チェックアウト リソースサーバートークンリレーhttp://cloud.spring.io/spring-cloud-security/spring-cloud-security.html 構成方法を指定します Oauth2RestTemplate セキュリティコンテキストの詳細(トークン)をあるサービスから別のサービスに転送するため。

3)サービスAとサービスBは次のことができるはずです。同じOauth2クライアントとシークレットを使用して構成されている場合、これらの手法を使用して通信します。これはアプリケーションのapplication.propertiesファイルで設定され、環境によって挿入されることが望ましいです。Oauth2スコープはロール識別子として使用できます。したがって、 クライアント 〜と スコープ (api-read、api-write)へのアクセスが必要です エンドポイントAサービスA。これは、Spring Securityの認証設定と同様に設定可能です @EnableGlobalMethodSecurity