Oracle Cloud Hangout Café Sesson7#4 セキュアなWeb APIの作り方のLT資料
HelidonとMicroProfile JWT Auth株式会社 豆蔵ビジネスソリューション事業部主幹ソフトウェアエンジニア 荻原 利雄Oracle Cloud Hangout Café Sesson7 #4本LTのHelidonに関することは荻原個人の経験や調査に基づくものでその内容はOracle社とは何ら関係はありません
View Slide
会社説明資料豆蔵 会社紹介
3私たちは© 2023 Mamezou Inc. All rights reserved.豆蔵は、オブジェクト指向技術含めたソフトウェア工学を産業、企業に浸透させるべく1999年に創業しました。創業以来、ソフトウェア工学を基軸にロボティクス、AI/IoTによる工場のデジタル化、車載向けECU統合化、ERP/OpenSourceによる基幹系システム刷新等に取り組んでいます
44豆蔵の事業領域© 2023 Mamezou Inc. All rights reserved.オブジェクト指向やモデルベースによる抽象化技術を含めたシステムズエンジニアリングや、ソフトウェアエンジニアリングといったものづくりにおける原理原則を踏まえて、教育やコンサルティングを実施エンベデッドロボットメーカー向けの新規ロボットの開発支援や、ロボット導入を検討しているユーザー向けのロボットシステムインテグレート(ロボットSI)およびコンサルティングを実施ロボット大手企業を中心としたクライアント企業に対し、コンサルティング・基幹システム刷新・教育を柱にしたソリューションを提供ビジネスプラットフォーム科学的なアプローチと合理的な業務改革と実装を行うエンジニアリングを両輪として、お客様のビジネス価値の最大化に向けたデータ活用コンサルティングサービスとデジタルソリューション活用を提供DX・AIソリューション
5テックブログ© 2023 Mamezou Inc. All rights reserved.いろいろなテーマでテックブログを公開中1粒の知性がソフトウェアエンジニアリングを変える。豆蔵デベロッパーサイト
61. Helidon• Helidonとは• MicroProfileとは• ここがステキ!Helidon• ここが残念、、Helidon2. MicroProfile JWT Auth• MicroProfile JWT Authの目的と守備範囲• MicroProfile JWT Authがやってくれること
Helidonとは• Oracle社が開発するマイクロサービス向けのJavaライブラリセット• QuarkusやMicronautと用途は守備範囲に近い• 2つのエディションに分かれている7Non BlockingなHTTPサーバのNettyを中核にリアクティブスタイルで開発を行う軽量マイクロフレームワークSEエディションにMicroProfile実装と独自拡張を追加した機能豊富なフレームワーク引用:https://www.slideshare.net/oracle4engineer/helidon元の図にQuarkusがなかったので入れるとするとこの辺り
MicroProfileとは8MicroProfile®プロジェクトは、マイクロサービスアーキテクチャ向けにエンタープライズJavaを最適化することを目的とし、JakartaEEかを問わずJavaのエコシステムを活用しながらマイクロサービス向けの新しい共通APIと機能をオープンな環境で短いサイクルで提供してくことを目標にする<MicroProfileプロジェクトの公式説明>JakartaEEや既存のエコシステムを活用したマイクロサービスアーキテクチャ(MSA)向けのAPIや機能をオープンなプロセスで策定し、短期間でリリースしてく<超訳>JakartaEEをベースとしたMSA向けAPIセットつまるところ・・・出典:https://projects.eclipse.org/projects/technology.microprofile※:MicroProfileの最新は6.0
ここがステキ!Helidon• 起動方法がシンプル(結構重要)• Javaの標準の仕組みのみでアプリケーションを起動可能• classpathに必要な依存ライブラリをおいて、javaコマンドに-jarオプションを指定して起動するだけ• アプリケーションサーバーのように専用の起動スクリプトも不要で、Quarkusのようにビルド時にコッソリといろいろなものを仕込んだブートモジュールも不要• なので、IDEのデバック機能が普通に使えてデバッグがしやすく問題の切り分けもしやすい• マニュアルが分かりやすい• SEとMPで分かれて構成され、かつ機能ごとに整理されていて分かりやすい• MP編ではMicroProfileの標準機能とHelidonの独自機能をきちんと分けて書いてくれている• なので、どこまでがMicroProfileの機能で、どこからがHelidonの独自機能なのかをきちんと理解できる• (Quarkusはこの対極で余り整理されておらずMicroProfileと独自実装の区別がつきにくい)• もうすぐリリースされるHelidon Nima(Helidon 4.0)は夢がある!?• HTTPサーバーにJava21から正式導入されるバーチャルスレッドを使ったHelidonの新しいバージョン• リアクティブなコード(要は非同期コード)はスループットを高くすることができるがコードが複雑になる課題をバーチャルスレッドを使って従来のブロッキングコードモデルを使いつつ高スループットを実現してくれる(夢がある!)9
ここが残念、、Helidon• Helidon単独の商用サポートはなく、WebLogicのサポート契約に含まれる• なので、WebLogicは使ってなくても商用サポートを受けるにはWebLogic※のサポート契約をしないといけない• ただし、ライブラリ自体はWebLogicとは関係なく独立しているため、WebLogicは不要でHelidon単独で利用可• ライセンスはフリー(Apache License, Version 2.0)のなので、商用サポートが不要な場合は、サポート契約はなくても利用は可 ※:CoherenceとVerrazzanoのサポート契約にも含まれる• 公式サンプルが少ない• Webの公式ドキュメントに登場するサンプルは(恐らく)Get StartedにあるQuickstart Exampleのみ• 実はGitHubのリポジトリをみるとトップディレクトリにexampleフォルダがあり色々なサンプルが含まれている• が、そもそもなんのサンプルか?SE向けかMP向けか?などの区別や説明がないため目的のものを探すのは大変• なので、「公式サンプルが少ない」ではなく「公式サンプルが整理されていない」がほんとは正しい• という感じだが、公式マニュアルにはたくさん情報が載っているため、それほど困るという訳ではない• (Quarkusはサンプルがちゃんと整理されて揃ってるので青芝に見えるのは事実)• モノは良いのに無名なのが残念、、• Javaの同じマイクロサービス向けフレームワークでQuarkusとMicronuatはよく話に出てくるがHelidonは滅多に話題に上らない• どちらに対してもモノとしては遜色ないのに同じ土俵に上れないのが残念• なので「Helidonで使ってます!Helidonでやってます!」といっても大抵の人はなにそれ?状態なので説明がメンドクサイ10
111. Helidon• Helidonとは• MicroProfileとは• ここがステキ!Helidon• ここが残念、、Helidon2. MicroProfile JWT Auth• MicroProfile JWT Authの目的と守備範囲• MicroProfile JWT Authがやってくれること
MicroProfile JWT Authの目的と守備範囲<目的>• RESTfulベースのマイクロサービス間における相互運用性の確保を目的にしている<守備範囲>• MicroProfile JWT Authが仕様定義していのるはJWTを消費するサービスプロバイダー側のみ• JWTを発行するIDプロバイダー側に関することは定義されていない• MicroProfile JWT Authはその仕様を満たしたJWTではれば、どこでどう発行されたJWTかは関知しない12
MicroProfile JWT Authがやってくれること-1/21. JWT認証に関すること(JWT Auth)• リクエストでBearerトークンとして渡されたJWTの検証• 公開鍵を使った署名の検証• iss(発行者)クレームが指定されたものと同じか• aud(受信者)クレームが指定されたものと同じか• exp(有効期限)クレームのチェック• インジェクションによるクレーム(Claim)値取得2. JWTの伝播に関すること(JWT Propagation)• MP JWTにおける必須クレーム、推奨クレームの定義とその扱いに関する規定13import org.eclipse.microprofile.jwt.JsonWebToken;…@ApplicationScoped@Path("products")public class ProductResource {// 検証済みのJWTインスタンスがインジェクションされる@Injectprivate JsonWebToken jwt;区分 claim名 内容(定義元)必須iss JWT発行者(RFC7519)iat JWT発行日時(RFC7519)exp JWT有効期限(RFC7519)upn ユーザープリンシパル名(MP JWT固有)任意sub ユーザの識別子などJWTの主体(RFC7519)jti JWTの一意な識別子(RFC7519)groups グループ名で複数可(MP JWT固有)
MicroProfile JWT Authがやってくれること-2/23. セキュリティに関すること(JWT RBAC)• JAX-RS(Jakarta RESTful Web Services)のSecurityContextへのマッピング• groupsクレームをもとにしたJAX-RSのエンドポイントに対するロールベースアクセス制御(RBAC)14import jakarta.annotation.security.RolesAllowed;import jakarta.ws.rs.core.SecurityContext;…@ApplicationScoped@Path("products")public class ProductResource {@GET@Path("/{id}")@RolesAllowed("member")public Product get(@PathParam("id") long id) {// something code.}@GET@Produces(MediaType.APPLICATION_JSON)public List getAll(@Context SecurityContext context) {if (!context.isUserInRole("admin")) {throw new WebApplicationException(Status.FORBIDDEN); // 403 Forbidden}// something code.}
参考:Helidonを使ったMSAアプリサンプル• MicroProfileのサンプルリニューアル – 今度はほんとにMSA | 豆蔵デベロッパーサイト✓ https://developer.mamezou-tech.com/msa/mp/cntrn19-mp-sample-renewal/• サンプルアプリのGitHubリポジトリ✓ https://github.com/extact-io/msa-rms-parent15
参考:MicroProfile JWT Authをもっと知りたい場合は• Eclipse MicroProfile Interoperable JWT RBAC✓ https://download.eclipse.org/microprofile/microprofile-jwt-auth-2.0/microprofile-jwt-auth-spec-2.0.html• MicroProfile JWT Authがやってくれること・できること | 豆蔵デベロッパーサイト✓ https://developer.mamezou-tech.com/msa/mp/cntrn17-mp-jwt/16
17ご清聴ありがとうございました