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

OSSの認証サービス Keycloak を.NETから使ってみた-Aspireとコンテナで使え...

Tomohisa Takaoka
September 28, 2024
960

OSSの認証サービス Keycloak を.NETから使ってみた-Aspireとコンテナで使える簡単IDaaS

8月に行われた、.NET Aspire Developer Dayで、『Secrets, Security, and Keycloak in .NET Aspire』というセッションが行われました。個人的にKeycloakは知らなかったのですが、オープンソースのIDソリューションです。ちょうどローカルでも動かせる認証サービスを使ってみたかったので実際に使ってみてKeycloakの概要や. NET、Azureとの相性に関して紹介します。

イベント
https://dotnetlab.connpass.com/event/329105/

ブログ
https://zenn.dev/jtechjapan_pub/articles/26611f2f18990d

Tomohisa Takaoka

September 28, 2024
Tweet

More Decks by Tomohisa Takaoka

Transcript

  1. ⾃⼰紹介 高丘 知央 ( Tomohisa Takaoka ) 株式会社ジェイテックジャパンCTO イベントソーシング・CQRSフレームワーク Sekiban

    メンテナ 米国カリフォルニア州ロングビーチ在住(ロスの近く) • X : @tomohisa • Github : @tomohisa • Linkedin : tomohisatakaoka 自作キーボード、3Dプリント自作トラックボール製作 11月に.NETラボ現地参加できそう #dotnetlab 🆗
  2. 株式会社ジェイテックジャパンの紹介 • 創業50年を超えた総合IT企業、株式会社 ジャパンテクニカルソフトウェア (JTS) のグループ企業。 • New York 所在

    J-Tech Creations, Inc. の 東京拠点。 • B2C / B2B アプリケーションを 開発‧運⽤するソフトウェア開発企業。 • .NET‧Azure 等 Microsoft の 技術スタックを主に使⽤。 🆗 #dotnetlab
  3. Overview 「OSSの認証サービス Keycloak を.NETから使ってみた」 1. Keycloak とは 2. .NET Aspire

    Keycloak 連携について 3. デモ 4. BFFによるクライアントセキュリティの向上 🆗 #dotnetlab
  4. アプリケーションを開発している時にこんなことで悩みませんか? • ユーザー管理、⾃分で作ったらそれだけで1システム ◦ 2段階認証、パスワードリセット、秘匿情報の管理、etc... • IDaaS (Octa,Auth0, EntraID ...)

    のどれを使うか決まっていない or 使えない • ソーシャルログインをそれぞれ作るのも⾯倒 • IDaaSの費⽤が⼼配 • ひとまずユーザー管理は楽してメインの機能を作りたい そんなときに... Keycloak ... 初学者なので間違いあったら指摘してください... 🆗 #dotnetlab 「OSSの認証サービス Keycloak を.NETから使ってみた」  Keycloak とは
  5. Keycloakとは? オープンソースのIDとアクセス管理ソフトウェア コンテナ上で動作する。 • シングルサインオン(SSO) • ユーザー管理とロールベースのアクセス制御 • 外部IDプロバイダとの連携(SAML、OpenID Connectなど)

    • 多要素認証(MFA) • ソーシャルログイン(Google、Facebookなど) • クライアントアプリケーション対応(Web、モバイ ル、API) これらにより、認証とアクセス制御の統合管理が可能 🆗 #dotnetlab 「OSSの認証サービス Keycloak を.NETから使ってみた」  Keycloak とは
  6. 🆗 #dotnetlab コンテナで動作する利点 • ローカル開発で簡単に起動できる • DEVモードでセキュリティ的にゆるい運⽤できるモードがある • DEVモードではコンテナ内にデータを永続化できる •

    コンテナのVolumesの削除により、データのリセットが簡単 • Realm (テナントのようなもの)のエクスポート、インポートができ る 「OSSの認証サービス Keycloak を.NETから使ってみた」  Keycloak とは
  7. 🆗 #dotnetlab 本番デプロイに関して • クラウドのコンテナ環境にデプロイ可能 • リバースプロキシを使⽤して部分的に公開も可能 • データベースとの連携 •

    スケールする設定に関してもドキュメント多数 • IDaaSよりも安価に済むという報告もあり • 簡単に設定できるマネージドサービスもある 「OSSの認証サービス Keycloak を.NETから使ってみた」  Keycloak とは
  8. 🆗 #dotnetlab Keycloak - Aspire 連携について .NET Aspire Developers Day

    2024年7⽉23⽇ Secrets, Security, and Keycloak in .NET Aspire by Jeremy Likness - 僕はこれをみてKeycloakを知りました 最近、Aspire関連のマイクロソフトイベントがとても多いので、DB、コンテナ、その他各分野ごとのリソースが とても多い 「OSSの認証サービス Keycloak を.NETから使ってみた」 2.NET Aspire Keycloak 連携について
  9. 🆗 #dotnetlab Keycloak - Aspire 連携について ホスト側 : Aspire.Hosting.Keycloak 8.2.1-preview.1.24473.4

    使⽤側: Aspire.Keycloak.Authentication 8.2.1-preview.1.24473.4 最近8.2でリリースされたため、ドキュメント量が少なく、使い かがわかりにくい。 Youtubeを⽌めては動かしてみての繰り返し Youtubeでは curl を使⽤してコマンドラインでログインと認証 を⾏う説明があり、勉強になった 「OSSの認証サービス Keycloak を.NETから使ってみた」 2.NET Aspire Keycloak 連携について
  10. 🆗 #dotnetlab 便利なサンプル aspire / playground / keycloak ⼀通り動くサンプル Host

    : Keycloakのコンテナを起動、設定は jsonでエクス ポートしたものを取り込むか、Webで設定 API Service : WebAPI KeycloakのJWTで認証できるように 設定している Web : Blazor Tokenはサーバーサイド側に持っている 「OSSの認証サービス Keycloak を.NETから使ってみた」 2.NET Aspire Keycloak 連携について
  11. 🆗 #dotnetlab サンプルを使⽤するために Keycloak - さらには認証と認可の基本、OpenID Connect, Saml, OAuth 2.0などの基本を知っておく必

    要がある。 O’Reilly の実践Keycloakはアプリケーションの設定も 含め説明されていてよい。 実践Keycloak & SAMLは認証の説明がわかりやすい 英語で検索したら情報は多い 「OSSの認証サービス Keycloak を.NETから使ってみた」 2.NET Aspire Keycloak 連携について
  12. 🆗 #dotnetlab 使⽤例を作っています J-TechCreations / OpenAttendanceManagement Aspire / Sekiban /

    ResultBox を使った勤怠サンプル (忙しくてあまり進んでいないですが、少しずつ機能追加 しています) Keycloakをログインに使う形に対応するためにKeycloak 対応を作成しています。 ApiService.Keycloak : Keycloakトークンで認証するWebAPI Web.Keycloak : BlazorによるBFFのサンプル Web.Keycloak.Next : Next.jsによるBFFのサンプル 「OSSの認証サービス Keycloak を.NETから使ってみた」  3. デモ
  13. 🆗 #dotnetlab BFFとは? BFF(Backend For Frontend)とは、フロントエンド専⽤のバックエンドAPI ⽬的:SPA(シングルページアプリケーション)のセキュリティと開発効率を向上 役割: • SPAから外部のAPIを直接呼び出さないようにする

    • トークン(特にリフレッシュトークン)漏洩リスクの低減 • フロントエンドと同じドメインにホストされる - CORS設定不要 利点:セキュリティ強化、開発容易化、 SPAの移植性向上など by : O’Reilly の実践Keycloak 「OSSの認証サービス Keycloak を.NETから使ってみた」  4.BFFによるクライアントセキュリティの向上
  14. 🆗 #dotnetlab 「OSSの認証サービス Keycloak を.NETから使ってみた」  4.BFFによるクライアントセキュリティの向上 MVC Webの場合、Cookie 認証でセキュアにできる アプリのためにAPIサーバとする場合はブラウザ版とコードが混ざり開発しにくくなる

    アプリではTOKENをアプリに⼊れることも多い アプリケーション サーバー ブラウザ 認証サーバー (Keycloakなど) トークン確認など ログイン DB TOKEN アプリ ログ イン Cookie認 証 ペ ー ジ の 送 信 TOKEN TOKEN認証 データの送信 アプリサーバーが外部に公開 DBは直接アクセスを防ぐこと が可能
  15. 🆗 #dotnetlab 「OSSの認証サービス Keycloak を.NETから使ってみた」  4.BFFによるクライアントセキュリティの向上 SPA フロントエンドはバックエンドの機能を持たない アプリとブラウザはともにjsonデータのみを⼊出⼒するため、アプリケーションサーバーは同じものを使うことも できる

    アプリケーション サーバー ブラウザ SPA 認証サーバー (Keycloakなど) トークン確認など ログイン DB TOKEN アプリ ログイン TOKEN認 証 デ ー タの 送 信 TOKEN TOKEN認証 データの送信 SPAサーバー バックエンドなし Vue, React etc アプリサーバーが外部に公開 DBは直接アクセスを防ぐこと が可能
  16. 🆗 #dotnetlab 「OSSの認証サービス Keycloak を.NETから使ってみた」  4.BFFによるクライアントセキュリティの向上 BFF Webの場合、Cookie 認証でセキュアにできる アプリのためにAPIサーバとする場合はブラウザ版とコードが混ざり開発しにくくなる

    アプリケーション サーバー ブラウザ 認証サーバー (Keycloakなど) トークン確認など ログイン DB アプリ TO KEN認 証 デ ー タ の 送 信 TOKEN認証 データの送信 BFFサーバー バックエンドあり Blazor, Next, Nuxt etc TOKEN TOKEN送信 Cookie認証 ページの送信 BFFサーバー バックエンドあり WebAPI, Node etc TOKEN認証 データの送信 TOKEN ログイン アプリ用 TOKEN認証 データの送信 TOKEN TOKEN WAFなどのセキュリティで アプリサーバーやDBを守 ることが可能
  17. まとめ • ⾃分で管理できる認証サーバーとして Keycloakは便利 • Aspireで使うのに、コンテナで開発できるの は便利 • Keycloakを使うにしても他のものを使うにし ても、ログインとユーザー管理の⾃作は今の

    時代は⼤変。ID専⽤サービスを使うのがよい • トークンをバックエンドに保持できるBFFパ ターンがセキュリティ的に有利。Blazorはそ の点素敵 🆗 #dotnetlab