Upgrade to Pro — share decks privately, control downloads, hide ads and more …

jakarta-security-jjug-ccc-2025-fall

Avatar for tnagao7 tnagao7
November 15, 2025

 jakarta-security-jjug-ccc-2025-fall

Avatar for tnagao7

tnagao7

November 15, 2025
Tweet

More Decks by tnagao7

Other Decks in Programming

Transcript

  1. 自己紹介 © 2025 Fujitsu Limited ⚫ 富士通株式会社 ソフトウェアエンジニア ⚫ アプリケーションサーバー製品の開発・保守

    ⚫ Jakarta EE/MicroProfile関連のOSS開発 ⚫ MicroProfileステコミ委員 ⚫ X (Twitter): @tnagao7 ⚫ JJUG CCC 2024 Fallなどで登壇 長尾 貴浩 2
  2. 目次 ⚫ エンタープライズシステムとJakarta EEセキュリティの動向 ⚫ Jakarta EEのセキュリティAPI: Jakarta Security ⚫

    Jakarta Securityとは ⚫ Jakarta Securityの基本的な使い方/OpenID Connect連携 ⚫ クラウドネイティブアプリケーションへのJakarta Securityの適用 ⚫ MicroProfile JWTとの組合せ ⚫ Jakarta Security & MicroProfile JWTの適用例 © 2025 Fujitsu Limited 3
  3. エンタープライズシステムのセキュリティ動向 (3/3) © 2025 Fujitsu Limited ⚫すべてのデータソースとコンピューティングサービスをリソースとみなす ⚫ネットワークの場所に関係なくすべての通信を保護する ⚫企業リソースへのアクセスはセッション単位で付与する ⚫リソースへのアクセスは(中略)動的ポリシーにより決定する

    ⚫すべての資産の整合性とセキュリティ動作を監視し測定する ⚫アクセスを許可する前にすべてのリソースの認証と認可を 動的かつ厳格に実施する ⚫資産、ネットワークインフラ、通信の現状について 可能な限り情報を収集しセキュリティ態勢の改善に利用する ゼロトラストアーキテクチャの基本思想(NIST SP 800-207から) 今回のトピック 6
  4. Jakarta EEにおける認証・認可の実現 (2/2) © 2025 Fujitsu Limited アプリケーション (サービス1) IDプロバイダ

    (IDaaS等) アプリケーション (サービス2) エンドユーザー 外部サービス Jakarta Security IDプロバイダを利用して リクエストを認証・認可 MicroProfile JWT HTTPリクエスト内の トークンにより認証・認可 外部サービス固有 の認証・認可 OpenID Connect (OIDC) エンドユーザーを認証 動的な認証・認可に対応したIDプロバイダ (IDaaS等) を Jakarta EEアプリケーションサーバーのセキュリティ機能と連携 8
  5. Jakarta EEのセキュリティ機能の動向 (1/2) ⚫ Jakarta Security登場以前の状況 ⚫認証・認可に関する既存の低レベルAPIは強力な一方で利用方法が複雑 ⚫Java Authorization Contract

    for Containers (JACC) ⚫Java Authentication SPI for Containers (JASPIC) ⚫セキュリティデータへのアクセス方法がコンポーネント仕様(*)ごとに異なる ⚫セキュリティ関連の設定方法がアプリケーションサーバーごとに異なる © 2025 Fujitsu Limited 2003 2009 2017 JACC 1.0 (J2EE 1.4) JASPIC 1.0 (Java EE 6) Java EE Security API 1.0 (Java EE 8) MicroProfile JWT 1.0 (MicroProfile 1.2) (*) コンポーネント仕様: Servlet, Facesなどの仕様 9
  6. Jakarta EEのセキュリティ機能の動向 (2/2) ⚫ Jakarta Security (旧称 Java EE Security

    API) の登場 ⚫認証・認可のためのシンプルに扱える統合的なAPIを提供 ⚫OpenID Connectによる認証に対応 (Jakarta EE 10以降) ⚫ MicroProfile JWTの登場 ⚫JSON Web Tokenによる分散システム向けのアクセス制御の仕組みを提供 © 2025 Fujitsu Limited 2003 2009 2017 JACC 1.0 (J2EE 1.4) JASPIC 1.0 (Java EE 6) Java EE Security API 1.0 (Java EE 8) MicroProfile JWT 1.0 (MicroProfile 1.2) 10
  7. 目次 ⚫ エンタープライズシステムとJakarta EEセキュリティの動向 ⚫ Jakarta EEのセキュリティAPI: Jakarta Security ⚫

    Jakarta Securityとは ⚫ Jakarta Securityの基本的な使い方/OpenID Connect連携 ⚫ クラウドネイティブアプリケーションへのJakarta Securityの適用 ⚫ MicroProfile JWTとの組合せ ⚫ Jakarta Security & MicroProfile JWTの適用例 © 2025 Fujitsu Limited 11
  8. Jakarta Securityが提供する機能 (1/2) ⚫認証メカニズム (Authentication Mechanism) ⚫アプリケーションへのリクエストを認証するコンポーネント ⚫標準で利用可能な認証メカニズム: BASIC, FORM,

    Custom FORM, OpenID Connect ⚫アイデンティティストア (Identity Store) ⚫セキュリティデータのリポジトリにアクセスするコンポーネント ⚫標準で利用可能なアイデンティティストア: LDAP, Database, In-memory ⚫セキュリティコンテキスト (Security Context) ⚫現在のリクエストの認証・認可データをアプリケーションに提供するインターフェース © 2025 Fujitsu Limited 13
  9. Jakarta Securityが提供する機能 (2/2) © 2025 Fujitsu Limited リクエスト クライアント リクエストを認証

    リクエストを認証 リクエストを認可 認証・認可に関する データにアクセス Jakarta EEコンテナ 認証 メカニズム アプリケーション リクエスト処理 モジュール 認可 モジュール セキュリティ コンテキスト Jakarta Security ディレクトリ サービス等 アイデンティティ ストア 14
  10. Jakarta Securityの基本的な使い方 (1/2) © 2025 Fujitsu Limited @BasicAuthenticationMechanismDefinition // BASIC認証を利用

    @InMemoryIdentityStoreDefinition({ // インメモリアイデンティティストアを利用 @Credentials(callerName = "foo", password = "pw1", groups = { "user", "admin" }) }) @ApplicationScoped public class SampleAppliactionConfig { } 1. Webアプリケーションで使用する認証メカニズムを指定する 15
  11. Jakarta Securityの基本的な使い方 (2/2) © 2025 Fujitsu Limited @WebServlet("/sample") @DeclareRoles({ "user",

    "admin" }) // ロールを宣言 @ServletSecurity(@HttpConstraint( rolesAllowed = "admin" // adminロールにアクセスを許可 )) public class SampleServlet extends HttpServlet { ... } 2. Webアプリケーションのリソースを保護する (許可するロールの指定など) Jakarta EEアプリケーションのコード例 https://github.com/eclipse-ee4j/jakartaee-examples 参考 16
  12. © 2025 Fujitsu Limited ⚫認証メカニズムとしてOpenID Connectが標準で利用可能 (Jakarta EE 10以降で利用可能) @OpenIdAuthenticationMechanismDefinition(

    providerURI = "https://sample-openid-povider/", clientId = "sample-client-id", clientSecret = "AAAAAAAA" ) Jakarta SecurityでのOpenID Connectの利用 (1/2) 17
  13. Jakarta SecurityでのOpenID Connectの利用 (2/2) © 2025 Fujitsu Limited エンドユーザー Jakarta

    EEコンテナ IDプロバイダ (IDaaS等) 資格情報を要求 認証 ⚫OpenID Connectに対応したIDプロバイダ (IDaaS等) を用意する ⚫IDプロバイダを活用することで動的かつ厳格な認証と認可を実現できる Webアプリケーションに アクセス Jakarta Securityによる保護 18
  14. 目次 ⚫ エンタープライズシステムとJakarta EEセキュリティの動向 ⚫ Jakarta EEのセキュリティAPI: Jakarta Security ⚫

    Jakarta Securityとは ⚫ Jakarta Securityの基本的な使い方/OpenID Connect連携 ⚫ クラウドネイティブアプリケーションへのJakarta Securityの適用 ⚫ MicroProfile JWTとの組合せ ⚫ Jakarta Security & MicroProfile JWTの適用例 © 2025 Fujitsu Limited 19
  15. 分散システムで各システムを保護するには? © 2025 Fujitsu Limited マイクロサービスアーキテクチャのような分散システムでは どのようにすれば各システム (サービス) を保護できるか? アプリケーション

    (サービス1) IDプロバイダ ? ? ? ? ? アプリケーション (サービス2) エンドユーザー OpenID Connect, Jakarta Security, MicroProfile JWTの組合せで分散システムの保護を実現できる 20
  16. MicroProfile JWT (MP-JWT) について ⚫OpenID Connectで一般的に使用されるJSON形式のトークン JSON Web Token (JWT)

    でRESTリソースへのアクセスを制御する仕様 © 2025 Fujitsu Limited MicroProfile JWT仕様 https://microprofile.io/specifications/jwt/ アプリケーション MicroProfile JWT クライアント JWT 21
  17. JSON Web Token (JWT) とは ⚫OpenID Connectで一般的に使用されるJSON形式のトークン ⚫JWTの受信者はJWTのデジタル署名を検証してJWTの正当性を確認する ⚫IDプロバイダに問い合わせなくてもJWTの内容を見て認可が可能 ⚫マイクロサービスアーキテクチャなどの分散システムでの利用に適している

    © 2025 Fujitsu Limited eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJI UzI1NiJ9.eyJpc3MiOiJqb2UiLA0KICJ leHAiOjEzMDA4MTkzODAsDQogImh0dHA 6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp 0cnVlfQ.dBjftJeZ4CVP-mB92K27uhbU JU1p1r_wW1gFWFOEjXk JWTの例(RFC 7519から) {"typ":"JWT", "alg":"HS256"} {"iss":"joe", "exp":1300819380, ...} 署名 ペイロード ヘッダ Base64URL符号化前 22
  18. Jakarta SecurityとMicroProfile JWTの違い © 2025 Fujitsu Limited アプリケーション Jakarta Security

    Jakarta SecurityのOIDC認証 MicroProfile JWT エンド ユーザー IDプロバイダ JWT 認証 アプリケーション MicroProfile JWT フロント側 アプリ JWT 提供機能 認証されていないクライアントを IDプロバイダにリダイレクトして認証 HTTPリクエストに含まれるJWT (Bearerトークン) を検証 典型的な 利用シーン Webアプリケーションへの エンドユーザーからのアクセスを保護 マイクロサービスアーキテクチャで サービス間通信のアクセスを保護 23
  19. © 2025 Fujitsu Limited Jakarta SecurityとMP-JWTの適用例 ⚫フロントエンド側の通信はJakarta Securityで認証・認可し バックエンド側の通信はトークンを伝播させてMP-JWTで認証・認可する エンド

    ユーザー IDプロバイダ JWT 認証 セッションID アプリケーション Jakarta Security アプリケーション MP-JWT JWT JWT 通信不要 アプリケーション MP-JWT リクエスト 24
  20. © 2025 Fujitsu Limited public class SampleService { @Inject private

    OpenIdContext context; // コンテキストを取得 public void callAnotherService() { String token = context.getAccessToken().getToken(); // トークンを取得 WebTarget target = ClientBuilder.newClient().target(TARGET_URI); Response response = target.request() .header("Authorization", "Bearer " + token) // トークンを設定 .get(); // ... } } JWT アプリケーション Jakarta Security アプリケーション MicroProfile JWT ⚫OpenIdContextからトークンを取得して後段の通信に利用できる Jakarta Securityのトークンを後段の通信に利用するには 25
  21. © 2025 Fujitsu Limited ⚫JWTは有効期限が切れるまでアクセス許可を取り消すことができない ⚫JWTの受信者はIDプロバイダを介さずにJWTを検証できてしまう ⚫OAuth/OIDCでは短命のアクセストークンをリフレッシュトークンで更新して対応 ⚫Jakarta Securityでもアクセストークンを定期的に更新する設定が利用可能 ⚫OpenIdAuthenticationMechanismDefinition

    #tokenAutoRefresh: trueの場合、期限が切れたトークンを自動的に更新する ⚫IDプロバイダの通信負荷とトレードオフの関係にあるので 有効化は要件に合わせて検討する IDプロバイダが発行するトークンの有効期限に関する注意 クライアント IDプロバイダ アプリケーション Jakarta Security アクセス トークン リフレッシュ トークン リクエスト 26
  22. まとめ © 2025 Fujitsu Limited Jakarta Securityが提供する統合的なAPIによって シンプルな方法でセキュアなアプリケーションを作成できる Jakarta SecurityをIDプロバイダと連携することで

    ゼロトラストの動的かつ厳格な認証と認可を実現できる Jakarta SecurityとMicroProfile JWTを組み合わせて マイクロサービスアーキテクチャなど分散システムを保護できる 28