Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
HelidonとMicroProfile JWT Auth
Search
荻原利雄
September 07, 2023
Programming
1
490
HelidonとMicroProfile JWT Auth
Oracle Cloud Hangout Café Sesson7#4 セキュアなWeb APIの作り方のLT資料
荻原利雄
September 07, 2023
Tweet
Share
More Decks by 荻原利雄
See All by 荻原利雄
Spring Frameworkの新標準!? ~ RestClientとHTTPインターフェース入門 ~
ogiwarat
4
1.3k
Spring Boot vs MicroProfile ~クラウドネイティブにおけるフレームワークの比較と選択~
ogiwarat
2
2.1k
第1回 AWSとGitHub勉強会 - キックオフ -
ogiwarat
0
850
第2回 AWSとGitHub勉強会 - CodespacesとHelidonの利用 -
ogiwarat
0
910
第3回 AWSとGitHub勉強会 - GitHub Actionsを使ったCI環境の構築 -
ogiwarat
0
860
第4回 AWSとGitHub勉強会 - GitHub Actionsを使ったCD環境の構築 -
ogiwarat
0
880
第5回 AWSとGitHub勉強会 - AWS EC2環境の構築 -
ogiwarat
0
800
第6回 AWSとGitHub勉強会 - AWS ECS Fargate環境の構築 -
ogiwarat
0
980
MicroProfileのススメ~ なぜぼくはコレを使うのか~
ogiwarat
3
1.2k
Other Decks in Programming
See All in Programming
Blueskyのプラグインを作ってみた
hakkadaikon
1
280
バリデーションライブラリ徹底比較
nayuta999999
1
430
Javaのルールをねじ曲げろ!禁断の操作とその代償から学ぶメタプログラミング入門 / A Guide to Metaprogramming: Lessons from Forbidden Techniques and Their Price
nrslib
1
110
Babylon.js 8.0のアプデ情報を 軽率にキャッチアップ / catch-up-babylonjs-8
drumath2237
0
110
primeNumberでのRBS導入の現在 && RBS::Traceでinline RBSを拡充してみた
mnmandahalf
0
250
Zennの運営完全に理解した #完全に理解したTalk
wadayusuke
1
140
Building an Application with TDD, DDD and Hexagonal Architecture - Isn't it a bit too much?
mufrid
0
370
❄️ tmux-nixの実装を通して学ぶNixOSモジュール
momeemt
1
120
JSAI2025 RecSysChallenge2024 優勝報告
unonao
1
380
メモリリークが発生した時にpprofを使用して原因特定した話
zono33lhd
0
100
rbs-traceを使ってWEARで型生成を試してみた After RubyKaigi 2025〜ZOZO、ファインディ、ピクシブ〜 / tried rbs-trace on WEAR
oyamakei
0
1k
推論された型の移植性エラーTS2742に挑む
teamlab
PRO
0
150
Featured
See All Featured
Balancing Empowerment & Direction
lara
1
84
Visualization
eitanlees
146
16k
Building Adaptive Systems
keathley
41
2.6k
GraphQLとの向き合い方2022年版
quramy
46
14k
Making the Leap to Tech Lead
cromwellryan
133
9.3k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
GitHub's CSS Performance
jonrohan
1031
460k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Faster Mobile Websites
deanohume
307
31k
Code Review Best Practice
trishagee
68
18k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
Transcript
HelidonとMicroProfile JWT Auth 株式会社 豆蔵 ビジネスソリューション事業部 主幹ソフトウェアエンジニア 荻原 利雄 Oracle
Cloud Hangout Café Sesson7 #4 本LTのHelidonに関することは荻原個人の 経験や調査に基づくものでその内容は Oracle社とは何ら関係はありません
会社説明資料 豆蔵 会社紹介
3 私たちは © 2023 Mamezou Inc. All rights reserved. 豆蔵は、オブジェクト指向技術含めたソフ
トウェア工学を産業、企業に浸透させるべ く1999年に創業しました。 創業以来、ソフトウェア工学を基軸にロボ ティクス、AI/IoTによる工場のデジタル 化、車載向けECU統合化、ERP/Open Sourceによる基幹系システム刷新等に取 り組んでいます
4 4 豆蔵の事業領域 © 2023 Mamezou Inc. All rights reserved.
オブジェクト指向やモデルベースに よる抽象化技術を含めたシステムズ エンジニアリングや、ソフトウェア エンジニアリングといったものづく りにおける原理原則を踏まえて、教 育やコンサルティングを実施 エンベデッド ロボットメーカー向けの新規ロボッ トの開発支援や、ロボット導入を検 討しているユーザー向けのロボット システムインテグレート(ロボット SI)およびコンサルティングを実施 ロボット 大手企業を中心としたクライアント 企業に対し、コンサルティング・基 幹システム刷新・教育を柱にしたソ リューションを提供 ビジネスプラット フォーム 科学的なアプローチと合理的な業務 改革と実装を行うエンジニアリング を両輪として、お客様のビジネス価 値の最大化に向けたデータ活用コン サルティングサービスとデジタルソ リューション活用を提供 DX・AIソリューション
5 テックブログ © 2023 Mamezou Inc. All rights reserved. いろいろなテーマでテックブログを公開中
1粒の知性が ソフトウェアエンジニアリング を変える。 豆蔵デベロッパーサイト
6 1. Helidon • Helidonとは • MicroProfileとは • ここがステキ!Helidon •
ここが残念、、Helidon 2. MicroProfile JWT Auth • MicroProfile JWT Authの目的と守備範囲 • MicroProfile JWT Authがやってくれること
Helidonとは • Oracle社が開発するマイクロサービス向けのJavaライブラリセット • QuarkusやMicronautと用途は守備範囲に近い • 2つのエディションに分かれている 7 Non BlockingなHTTPサーバのNettyを中核にリアクティ
ブスタイルで開発を行う軽量マイクロフレームワーク SEエディションにMicroProfile実装と独自拡張を追加し た機能豊富なフレームワーク 引用:https://www.slideshare.net/oracle4engineer/helidon 元の図にQuarkusがなかった ので入れるとするとこの辺り
MicroProfileとは 8 MicroProfile®プロジェクトは、マイクロサービスアー キテクチャ向けにエンタープライズ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
11 1. Helidon • Helidonとは • MicroProfileとは • ここがステキ!Helidon •
ここが残念、、Helidon 2. 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/2 1. JWT認証に関すること(JWT Auth) • リクエストでBearerトークンとして渡されたJWT の検証 •
公開鍵を使った署名の検証 • iss(発行者)クレームが指定されたものと同じか • aud(受信者)クレームが指定されたものと同じか • exp(有効期限)クレームのチェック • インジェクションによるクレーム(Claim)値取得 2. JWTの伝播に関すること(JWT Propagation) • MP JWTにおける必須クレーム、推奨クレームの定 義とその扱いに関する規定 13 import org.eclipse.microprofile.jwt.JsonWebToken; … @ApplicationScoped @Path("products") public class ProductResource { // 検証済みのJWTインスタンスがインジェクションされる @Inject private 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/2 3. セキュリティに関すること(JWT RBAC) • JAX-RS(Jakarta RESTful Web
Services)の SecurityContextへのマッピング • groupsクレームをもとにしたJAX-RSのエンドポ イントに対するロールベースアクセス制御 (RBAC) 14 import 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<Product> 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-parent 15
参考: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 ご清聴ありがとうございました