securityを連携させて保護する方法について解説します。誰でもAPIが実行できてしまうのは大問題です。スマホのアプリやWebサイトにログイン機能があるように、APIにも認証済みクライアントから呼び出された時だけ処理できるよう保護する必要があります。securityでどのようにすればよいかをまとめました。keycloakとは??keycloakでできることは??色々記事が既に出てるのでこの辺りを参考にして頂くのが早いと思います。一応簡単にkeycloakどんな感じで僕が業務で使ってるかを紹介すると、ログイン機能、ユーザ管理の部分は完全にkeycloakに任せていています。ログイン失敗連続したら30分ロックをかけるとか、8桁以上の英数字混合のパスワードでないとパスワードポリシーとしてダメなどのよくあるセキュリティ要件もkeycloakでポチポチやるだけで実現できるのでかなり工数削減できたりします。tokenを発行するための仕様を満たす認証認可基盤としても利用できます。tokenを発行するためのOAuth2.0という仕様の全体概要については、こちらの記事にまとめたので興味のある方はご覧ください。認可コードフローを図解|OAuth2.0(OIDC)の仕組みをSPAのSSO機能を例に解説あと、オープンソースソフトウェアなので無料で使えます。securityでAPIを保護するざっくり全体の流れを図にするとこんな感じです。tokenというものを発行してもらいます。token発行までの流れについては本題ではないのでここでは触れません。token発行までの流れが気になる方はこちらの記事を参照ください。tokenは、このクライアントはAPIを利用してもOKという証明になります。2でAPIを呼び出すクライアントはこの証明を付けて呼び出します(リソースエンドポイントをコールします)。securityでこの証明って正しい??有効??というのをkeycloakに対して確認(トークン検証)します。この確認のことをトークンイントロスペクションと言います。keycloakがこの確認で問題なしと答えた場合に初めて4のリソースの返却をします。認証情報不足エラー)これによって、正しいアクセストークンが発行されたクライアントだけAPIが利用できることになります。APIが保護できることになります。secutiryで保護する具体的な手順解説githubにソースコードを公開しておいたので、ローカル環境で動作確認したい場合はそちら参照ください。token発行とトークンイントロスペクションの設定keycloakの設定としては大きく3つ行います。securityが使います。今回はtokenintrospectionという名前のclientを作成しました。securityがやりとりできるようにしておきます。そのため、secret情報はこのあとspring側の設定ファイルに記載します。今回は別のクライアントを利用します。名前はfrontendとしました。今度はクライアントの種類としてpublicとしてsecret情報を利用せずにkeycloakとやりとりするようにしておきます。次に、APIを利用できるようにするユーザを作成します。今回はID/PASSどちらもsample001というユーザを作成しました。公開しているgithubの通りにkeycloakを立ち上げるとこの辺り設定済みの状態からスタートできるようにしてます。security側の設定です。こちらも設定のポイントは3点です。serverライブラリを入れる(mavenなんですが、、、)コードで言うとこの辺りです。>>github該当箇所tokenintrospectionへのアクセス情報をプロパティに追加するコードで言うとこの辺りです。>>github該当箇所tokenintrospectionできるようにSecurityConfigクラスを作成するコードで言うとこの辺りです。>>github該当箇所ここではhealthと言うエンドポイントはアクセストークンなしでも呼び出せる設定にして、そのほかのエンドポイントはアクセストークンが正しくなければ呼び出せないようにしています。今回はhealthとhelloの2本のAPIを作成していて、helloはアクセストークン付きリクエストされないと401エラーを返すようにしています。死活監視(APIサーバがちゃんと動いてるかチェックするイメージ)が。ならないようにAPIを保護から除外する設定も覚えておきましょう。APIは今回healthとhelloの2本を作成しています。APIが保護される動作確認ここからは動作確認を4パターンしていきます。tokenなしで動作する確認これはブラウザでAPIのエンドポイントをコールすれば確認できます。tokenなしで401エラーとなることの確認これもブラウザでAPIのエンドポイントをコールすれば確認できます。tokenが正しいとき正常に動作することの確認ここからはブラウザだとダメで。curlコマンドかクライアントツールを使う必要があります。Testerを使います。TesterでAPIテストまず、keycloakからfrontendクライアントを利用してsample001ユーザに対してアクセストークンを発行してもらいます。(上の図でいう1のところ)返却されたレスポンスのaccess_tokenをコピーします。APIをコールすると正しくレスポンスが返却されます。」の後ろに貼り付けたアクセストークンをちょっと変更してAPIを呼び出します。active)となることが確認できます。securityの保護で弾けるということです。API(java)を保護する方法について解説しました。securityの設定ポイントとしてはトークンイントロスペクション用のclient情報の設定、ライブラリ利用設定、SecurityConfigクラス作成もしAPIの製造を担当することがあれば、どんな感じで保護しているか??少し気にしてみてみてください。こんなことやってると思います。SPAにKeycloakのSSO機能でログイン機能を追加、OIDCやOAuth2.0の違い解説などなどをまとめたまとめ記事を作りました。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。