Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

KeycloakでAPI認可に入門する

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Wird geladen in …3
×

Hier ansehen

1 von 49 Anzeige
Anzeige

Weitere Verwandte Inhalte

Diashows für Sie (20)

Ähnlich wie KeycloakでAPI認可に入門する (20)

Anzeige

Weitere von Hitachi, Ltd. OSS Solution Center. (20)

Aktuellste (20)

Anzeige

KeycloakでAPI認可に入門する

  1. 1. © Hitachi, Ltd. 2022. All rights reserved. KeycloakでAPI認可に入門する OSSセキュリティ技術の会第10回勉強会 【オンライン】 2022/02/09 日立製作所 OSSソリューションセンタ 中村 雄一 田畑 義之
  2. 2. © Hitachi, Ltd. 2022. All rights reserved. Contents 1 1. Keycloakとは 2. API認可の基礎 3. Keycloakの基本概念 4. API認可をKeycloakで試す
  3. 3. 2 © Hitachi, Ltd. 2022. All rights reserved. Webベースのシステム Webアプリ ケーション Webシステム ブラウザー ネイティブ アプリ REST API ユーザー 他システム HTTPリクエスト HTML画面 HTTPリクエスト(REST) 処理結果 マイクロサービス サービス サービス サービス HTTPリクエスト(REST) 処理結果
  4. 4. 3 © Hitachi, Ltd. 2022. All rights reserved. 認証と認可 ユーザー クレデンシャルを提示 (ユーザー名とパスワード等) システム (インターネットバンキング) Webアプリケーション (銀行Web) REST API (残高照会 API) 外部アプリケーション (家計簿アプリ) 残高照会メニュー操作 残高照会API呼び出し 家計簿アプリに 残高照会を認可 残高情報 ①認証 誰かを確認 ②認可 アクセス権を与える ③認可判断 権限の確認
  5. 5. 4 © Hitachi, Ltd. 2022. All rights reserved. Keycloakとは • OSSの「IAM(Identity and Access Management)」のソフトウェア https://www.keycloak.org/ • コミュニティが活発・オープンで、商用利用も広く進んでいる 日本人のメンテナも!(乗松さん@日立) • 最新標準にも対応。v15.0では、OpenID FoundationのFAPI, FAPI-CIBA, Open Banking Brasil FAPIという仕様にも正式対応。 https://openid.net/certification/ • 豊富な機能 分類 機能 概要 認証 認証情報管理 認証に必要なユーザ名・属性情報を管理 パスワード認証 ユーザ名・パスワードに基づき認証 多要素認証 OTP(FreeOTPベース)や、WebAuthnに基づいた多要素認証を提供 外部連携 外部の認証情報と連携して認証する 認可 権限管理 ユーザやアプリに紐づく権限を管理 認可サービス 権限とリソースの紐づけを管理し、認可判断を実行する 認証・認可連携 プロトコル OAuth 2.0 認可サーバ APIの認可サーバとして必要なエンドポイントを提供(認可エンドポイ ント、トークンエンドポイント、トークン失効エンドポイント等) OpenID Connect OP OpenID ConnectのOPサーバとしての機能を提供 SAML IdP SAMLのIdPサーバとしての機能を提供 カスタマイズ ポイント SPI 様々な拡張を作りこむためのJavaのインタフェース クライアントポリシー クライアント毎に異なった振る舞いをKeycloakに持たせるための拡張 フレームワーク アプリ用 ライブラリ クライアントアダプタ アプリにOpenID Connect RP,SAML SPの機能を持たせたり、認可 サービスのクライアント機能を持たせるアプリ用ライブラリ
  6. 6. 5 © Hitachi, Ltd. 2022. All rights reserved. Keycloakでできること Webアプリ A Webアプリ B Webアプリ C システム Keycloak 認証 処理 認可 処理 REST API 群 認証や 認可の 委譲 外部の クレデンシャル ソーシャル サイトの認証 Keycloak内の クレデンシャル ユースケース① OAuth2.0の枠組みに 適切に従った「API認可」 ユースケース② クレデンシャルの入力は 一度だけ「SSO」 ユースケース③ 外部のクレデンシャルや 認証システムとの連携 連 携
  7. 7. 6 © Hitachi, Ltd. 2022. All rights reserved. Keycloakの構成 Keycloak JDK Wildfly [アプリケーションサーバー] JDBC ドライバー OS RDB この単位のzipファイルが配布 Keycloakの設定情報を格納。 デフォルトではH2という DBが配布物に含まれている。 本番用途では外部DBが推奨 Quarkusという軽量なアプリケーションサーバ で動くものも開発中
  8. 8. 7 © Hitachi, Ltd. 2022. All rights reserved. Keycloakのインストール ・ 公式サイトよりzipまたはtar.gzをダウンロード。 書籍で使っているバージョンは15.0.2。本勉強会時点の最新版は16.1.0 ・ 前提環境: Java(JDK 8以上)。最低でも512MのRAMと1Gのディスク容量 ・ インストール&起動 (Windowsの場合) zipを展開し、コマンドプロンプトで展開したディレクトリに移動し、 .binstandalone.bat とするだけ。
  9. 9. 8 © Hitachi, Ltd. 2022. All rights reserved. 管理者ユーザーを作成 ウェルカムページ(http://localhost:8080/)をブラウザで開き、管理者ユーザーを作成 ユーザー名とパスワードを入力し 管理者ユーザーを作成
  10. 10. 9 © Hitachi, Ltd. 2022. All rights reserved. 管理コンソールにログイン ・ Keycloakの設定は管理コンソールから行う。 ・ ウェルカムページから「Administration Console」を選択し、管理者ユーザーでログイン
  11. 11. 10 © Hitachi, Ltd. 2022. All rights reserved. レルム作成: レルムとは 「レルム」とはKeycloak の管理単位のことで、ユーザーなどの情報はレルム単位で管理。 「master」レルムは、すべてのレルムを管理できる特別なレルム(先ほどは「master」レルム) 任意にレルムを作成して管理ができ(部署単位、用途単位等)、マルチテナントのような使い方もできる。 Keycloakサーバー master レルム department A レルム department B レルム クライアント ユーザー レルムの設定 グループ セッション ロール 管理者ユーザー クライアント ユーザー レルムの設定 グループ セッション ロール …
  12. 12. 11 © Hitachi, Ltd. 2022. All rights reserved. レルムの作成 API認可の動作確認用に、「demo-api」レルムを作成
  13. 13. 12 © Hitachi, Ltd. 2022. All rights reserved. レルムを確認
  14. 14. © Hitachi, Ltd. 2022. All rights reserved. Contents 13 1. Keycloakとは 2. API認可の基礎 3. Keycloakの基本概念 4. API認可をKeycloakで試す
  15. 15. 14 © Hitachi, Ltd. 2022. All rights reserved. API認可とは ・ API 認可: API 呼び出しを行う際の認可 ・ API認可では、「OAuth 2.0」が広く使われている。 ・ OAuth 2.0 (以下OAuth) ユーザーのリソース(protected resource)へのアクセスを 外部アプリケーション(3rd party application)に認可するためのプロトコル RFC6749で規定
  16. 16. 15 © Hitachi, Ltd. 2022. All rights reserved. OAuthの登場人物とAPI認可 認可サーバー (Keycloak) クライアント (家計簿アプリ) リソースサーバー (X銀行残高照会API) アクセスへの 同意 API呼び出し (w/ アクセストークン) アクセストークン発行 (read_balanceスコープ付き) リソースオーナー (ブラウザー) ① リソースオーナーが 家計簿アプリに残高情報へのア クセス権を認可 ② 認可された証拠となる トークンを発行 ③ トークンの提示 リソース (残高情報) ④ トークンをもとに 認可判断 ★アクセストークン: API を呼び出すときに使う「認可された証拠」 リソースアクセスがクライアントに認可されたかを示す 「スコープ(scope)」が関連付けられている。 OAuthではアクセストークン発行のためのフローをいくつか規定
  17. 17. 16 © Hitachi, Ltd. 2022. All rights reserved. OAuthの典型的なフロー : 認可コードフロー クライアント (例:家計簿アプリ) 2. 認可リクエスト (w/クライアントID、スコープ、 リダイレクトURI) 認可サーバー (Keycloak) 3. ユーザー認証、4. 同意の取得 5. 認可レスポンス (w/認可コード) リソースオーナー (ブラウザー) 1. API連携指示 6. トークンリクエスト (w/認可コード、クライアントID、 クライアントシークレット) 8. トークンレスポンス (w/アクセストークン、 リフレッシュトークン) クライアントID・シークレット リダイレクトURI リソースサーバー (例:X銀行残高照会API) 9. API呼び出し (w/アクセストークン) 事前に認可サーバーが発行 認可サーバに事前登録 Keycloakでは Valid Redirect URIsに登録 家計簿メニュー 残高更新 7. クライアント認証と 認可コード・リダイレクトURIの確認 Keycloakの場合: ブラウザとKeycloakの間に セッション確立 認可エンドポイント リダイレクトURI。 クライアントに実装 トークン エンドポイント X銀行ログイン ID pass 家計簿アプリが 以下のアクセス を求めています 残高照会 許可する X銀行残高連携 家計簿メニュー
  18. 18. 17 © Hitachi, Ltd. 2022. All rights reserved. Keycloakにおけるアクセストークン eyJhbGc<略> NmxRIn0. eyJleHA<略>JteRq5n.eyJhbOi<略>7JqzJwbg ヘッダー (Base64URLエンコード) ペイロード(JWT) (Base64URLエンコード) 署名 (Base64URLエンコード) { "alg": "RS256", "typ": "JWT", "kid":"SPeVQvHYuixD2g- vgNvnaZdBFHqmP25N_t5o2Ly 5Es" } { "exp" : 1634452276, "iat" : 1634451676, "auth_time" : 1634450659, "iss" : "https://api.example.com/auth/realms/demo", "aud" : "account", "sub" : "e7565c5c-3bcf-4a52-8746-c8ef4b940545", "azp" : "demo-client", "scope" : "profile email", "preferred_username" : "user-api" } 署名検証に必要な情報等が 含まれる トークンの有効期限やスコープなどが含まれる。 各項目はクレームと呼ばれる アクセストークンの形式は任意だがKeycloakではJWSを採用
  19. 19. 18 © Hitachi, Ltd. 2022. All rights reserved. リフレッシュトークン ・ アクセストークンには有効期限があり、短くすることが推奨(数分、数十分) 期限が切れるたびに認可コードフローで認証や認可をしていたら不便。 ・ リフレッシュトークンはアクセストークンよりも長い期限(数時間や数日など)。 アクセストークンと一緒に発行。 クライアントはリフレッシュトークンを使えばアクセストークンを再取得できる。 クライアント 認可サーバー (Keycloak) 1. リフレッシュリクエスト (w/リフレッシュトークン、クライアント ID、クライアントシークレット) 3. リフレッシュレスポンス (w/アクセストークン、リフレッシュ トークン) 2. クライアント認証と リフレッシュトークンの検証 トークン エンドポイント
  20. 20. 19 © Hitachi, Ltd. 2022. All rights reserved. トークンの無効化 無効化の方法 誰が無効化するか トークン無効化エンドポイントによる無効化 (RFC7009) クライアント アカウント管理コンソールによる無効化 リソースオーナー 管理コンソールによる無効化 管理者ユーザー ・ 有効期限内であっても、アクセストークンやリフレッシュトークンは 無効にすることができる。 (セキュリティ上の理由や、リソースオーナーがAPI連携解除したい場合) ・ Keycloakがサポートする無効化の手段
  21. 21. 20 © Hitachi, Ltd. 2022. All rights reserved. リソースサーバーでのアクセストークンの扱い クライアント (外部アプリケーション) API呼び出し (w/アクセストークン) 認可サーバー (Keycloak) 2. スコープによる認可判断 リソースサーバー (APIサーバー) 1.トークンの検証 (b) トークンイントロスペクション 1.トークンの検証 (a) ローカルでの検証 どちらか を実施 3. 業務処理 ・ ローカルでの検証(署名のチェックなど) ⇒ 無効化を即座に検知できない ・ トークンイントロスペクション ⇒ 無効化を即座に検知できる トークンの検証などの共通処理は APIゲートウェイで代行することもできる
  22. 22. 21 © Hitachi, Ltd. 2022. All rights reserved. OIDC (OpenID Connect) OAuth2.0を拡張した「認証」のためのプロトコル。用語が異なったり、追加概念(IDトークン等)がある。 中身はOAuth2.0であるため、API認可にも使うことが可能。 RP (WebアプリケーションA) OP (Keycloak) 6.トークンレスポンス(w/アクセストークン、 リフレッシュトークン、IDトークン) 3. ユーザー認証と同意の取得 認可エンドポイント 4. 認証レスポンス(w/認可コード) トークンエンドポイント 1. Webアプリケーションにアクセス 5.トークンリクエスト(w/認可コード、 クライアントID・シークレット) 7.IDトークンの検証 リダイレクトURI 2. 認証リクエスト (w/クライアントID、スコープ:openid必須、 リダイレクトURI) ブラウザーとOPの間で セッション確立 8.RPとブラウザーの間で ログインセッション確立 リソースオーナー (ブラウザー)
  23. 23. © Hitachi, Ltd. 2022. All rights reserved. Contents 22 1. Keycloakとは 2. API認可の基礎 3. Keycloakの基本概念 4. API認可をKeycloakで試す
  24. 24. 23 © Hitachi, Ltd. 2022. All rights reserved. Keycloakの基本概念 Keycloakの設定を行うためには、特有の用語の理解が必要。 「ユーザー」「クライアント」「セッション」「ロール」「グループ」 「レルム」「クライアントアダプター」「プロトコルマッパー」 「クライアントスコープ」など 今回は、最も基本的な「クライアント」と「セッション」を紹介。
  25. 25. 24 © Hitachi, Ltd. 2022. All rights reserved. クライアント • 認証・認可サーバーであるKeycloakのサービスを利用するアプリケーションのこと。 OAuthのクライアント、OIDCのRP、SAMLのSP。 • 管理コンソールの「Clients」画面より作成、管理できる。
  26. 26. 25 © Hitachi, Ltd. 2022. All rights reserved. セッション  Keycloakではログインが成功するとセッションが生成され、メモリー 上で管理。  アクセストークンやリフレッシュトークンもセッションと関連付けられ て管理されている。セッションが無効になるとトークンも無効に。 Keycloak セッション ②発行 セッションID Cookie リフレッシュトークン アクセストークン セッションID セッションID セッションID ①認証されたタイミングで生成、 セッションID採番 ③確認
  27. 27. © Hitachi, Ltd. 2022. All rights reserved. Contents 26 1. Keycloakとは 2. API認可の基礎 3. Keycloakの基本概念 4. API認可をKeycloakで試す
  28. 28. © Hitachi, Ltd. 2022. All rights reserved. 4. API認可をKeycloakで試す 27 ① 検証環境を構築する ② 検証に必要な設定をする ③ 検証環境を動かしてみよう ④ トークンリフレッシュとトークン無効化を試してみる ⑤ セキュリティを向上する
  29. 29. © Hitachi, Ltd. 2022. All rights reserved. 4. API認可をKeycloakで試す 28 ① 検証環境を構築する ② 検証に必要な設定をする ③ 検証環境を動かしてみよう ④ トークンリフレッシュとトークン無効化を試してみる ⑤ セキュリティを向上する
  30. 30. 29 © Hitachi, Ltd. 2022. All rights reserved. ①検証環境を構築する • 今回実現するもの → 認可コードフローでアクセストークンを取得しAPIを呼び出すための検証環境 クライアントID・ クライアントシークレット クライアントID・ クライアントシークレット クライアントID・ クライアントシークレット リダイレクトURI APIコール サンプルクライアント (クライアント) 認可リクエスト Keycloak (認可サーバー) ユーザー認証、同意の取得 認可レスポンス ブラウザー (リソースオーナー) API連携指示 認可エンドポイント トークンリクエスト トークンレスポンス トークン エンドポイント サンプルAPIサーバー (リソースサーバー ) リダイレクトURI イントロスペクションリクエスト イントロスペクション エンドポイント イントロスペクションレスポンス APIレスポンス
  31. 31. 30 © Hitachi, Ltd. 2022. All rights reserved. ①検証環境を構築する • 今回実現するもの → 認可コードフローでアクセストークンを取得しAPIを呼び出すための検証環境 • https://github.com/keycloak-book-jp から検証環境のソースコードを取得可能 ブラウザー (リソースオーナー) サンプルAPIサーバー (リソースサーバー) サンプルクライアント (クライアント) Keycloak (認可サーバー) localhost:8080 localhost:8082 localhost:8081 APIコール (w/アクセストークン) トークンリクエスト (w/認可コード、クライアントID、 クライアントシークレット) API連携指示 ユーザー認証、同意の取得
  32. 32. © Hitachi, Ltd. 2022. All rights reserved. 4. API認可をKeycloakで試す 31 ① 検証環境を構築する ② 検証に必要な設定をする ③ 検証環境を動かしてみよう ④ トークンリフレッシュとトークン無効化を試してみる ⑤ セキュリティを向上する
  33. 33. 32 © Hitachi, Ltd. 2022. All rights reserved. ②検証に必要な設定をする ① レルムの追加 ② ユーザーの追加 ③ エンドポイント指定 ④ クライアント作成・設定 ⑤ クライアントID・ クライアントシークレット共有 ⑥ エンドポイント指定 ⑦ クライアント作成・設定 ⑧ クライアントID・ クライアントシークレット共有 ⑨ スコープ作成・設定
  34. 34. 33 © Hitachi, Ltd. 2022. All rights reserved. ②検証に必要な設定をする ① レルムの追加 ② ユーザーの追加 ③ エンドポイント指定 ④ クライアント作成・設定 ⑤ クライアントID・ クライアントシークレット共有 ⑥ エンドポイント指定 ⑦ クライアント作成・設定 ⑧ クライアントID・ クライアントシークレット共有 ⑨ スコープ作成・設定
  35. 35. 34 © Hitachi, Ltd. 2022. All rights reserved. ②検証に必要な設定をする ① レルムの追加 ② ユーザーの追加 ③ エンドポイント指定 ④ クライアント作成・設定 ⑤ クライアントID・ クライアントシークレット共有 ⑥ エンドポイント指定 ⑦ クライアント作成・設定 ⑧ クライアントID・ クライアントシークレット共有 ⑨ スコープ作成・設定
  36. 36. 35 © Hitachi, Ltd. 2022. All rights reserved. ②検証に必要な設定をする ① レルムの追加 ② ユーザーの追加 ③ エンドポイント指定 ④ クライアント作成・設定 ⑤ クライアントID・ クライアントシークレット共有 ⑥ エンドポイント指定 ⑦ クライアント作成・設定 ⑧ クライアントID・ クライアントシークレット共有 ⑨ スコープ作成・設定
  37. 37. 36 © Hitachi, Ltd. 2022. All rights reserved. ②検証に必要な設定をする ① レルムの追加 ② ユーザーの追加 ③ エンドポイント指定 ④ クライアント作成・設定 ⑤ クライアントID・ クライアントシークレット共有 ⑥ エンドポイント指定 ⑦ クライアント作成・設定 ⑧ クライアントID・ クライアントシークレット共有 ⑨ スコープ作成・設定
  38. 38. 37 © Hitachi, Ltd. 2022. All rights reserved. ②検証に必要な設定をする ① レルムの追加 ② ユーザーの追加 ③ エンドポイント指定 ④ クライアント作成・設定 ⑤ クライアントID・ クライアントシークレット共有 ⑥ エンドポイント指定 ⑦ クライアント作成・設定 ⑧ クライアントID・ クライアントシークレット共有 ⑨ スコープ作成・設定
  39. 39. 38 © Hitachi, Ltd. 2022. All rights reserved. ②検証に必要な設定をする ① レルムの追加 ② ユーザーの追加 ③ エンドポイント指定 ④ クライアント作成・設定 ⑤ クライアントID・ クライアントシークレット共有 ⑥ エンドポイント指定 ⑦ クライアント作成・設定 ⑧ クライアントID・ クライアントシークレット共有 ⑨ スコープ作成・設定
  40. 40. 39 © Hitachi, Ltd. 2022. All rights reserved. ②検証に必要な設定をする ① レルムの追加 ② ユーザーの追加 ③ エンドポイント指定 ④ クライアント作成・設定 ⑤ クライアントID・ クライアントシークレット共有 ⑥ エンドポイント指定 ⑦ クライアント作成・設定 ⑧ クライアントID・ クライアントシークレット共有 ⑨ スコープ作成・設定
  41. 41. © Hitachi, Ltd. 2022. All rights reserved. 4. API認可をKeycloakで試す 40 ① 検証環境を構築する ② 検証に必要な設定をする ③ 検証環境を動かしてみよう ④ トークンリフレッシュとトークン無効化を試してみる ⑤ セキュリティを向上する
  42. 42. 41 © Hitachi, Ltd. 2022. All rights reserved. ③検証環境を動かしてみよう クライアントID・ クライアントシークレット クライアントID・ クライアントシークレット クライアントID・ クライアントシークレット リダイレクトURI APIコール サンプルクライアント (クライアント) 認可リクエスト Keycloak (認可サーバー) ユーザー認証、同意の取得 認可レスポンス ブラウザー (リソースオーナー) API連携指示 認可エンドポイント トークンリクエスト トークンレスポンス トークン エンドポイント サンプルAPIサーバー (リソースサーバー ) リダイレクトURI イントロスペクションリクエスト イントロスペクション エンドポイント イントロスペクションレスポンス APIレスポンス localhost:8080 localhost:8081 localhost:8082
  43. 43. © Hitachi, Ltd. 2022. All rights reserved. 4. API認可をKeycloakで試す 42 ① 検証環境を構築する ② 検証に必要な設定をする ③ 検証環境を動かしてみよう ④ トークンリフレッシュとトークン無効化を試してみる ⑤ セキュリティを向上する
  44. 44. 43 © Hitachi, Ltd. 2022. All rights reserved. ④トークンリフレッシュとトークン無効化を試してみる サンプルクライアント (クライアント) Keycloak (認可サーバー) リフレッシュリクエスト リフレッシュレスポンス トークン エンドポイント localhost:8080 localhost:8081  トークンリフレッシュ: アクセストークンの有効期限が切れたときに、ユーザの再認証無しでアクセストークンを再取得する。 サンプルクライアント (クライアント) Keycloak (認可サーバー) 無効化リクエスト 200 OK 無効化 エンドポイント localhost:8080 localhost:8081  トークン無効化: アクセストークンの有効期限が切れる前に、アクセストークンを無効化する。
  45. 45. © Hitachi, Ltd. 2022. All rights reserved. 4. API認可をKeycloakで試す 44 ① 検証環境を構築する ② 検証に必要な設定をする ③ 検証環境を動かしてみよう ④ トークンリフレッシュとトークン無効化を試してみる ⑤ セキュリティを向上する
  46. 46. 45 © Hitachi, Ltd. 2022. All rights reserved. ⑤セキュリティを向上する ~今回はPKCEやります~ サンプルクライアント (クライアント) 認可リクエスト Keycloak (認可サーバー) ユーザー認証、同意の取得 認可レスポンス ブラウザー (リソースオーナー) API連携指示 認可エンドポイント トークンリクエスト トークンレスポンス トークン エンドポイント サンプルAPIサーバー (リソースサーバー ) リダイレクトURI  PKCEとは: RFC 7636で定められたProof Key for Code Exchangeの頭文字をとったもの。 認可コード横取り攻撃を軽減する。 ①クライアントは、code_verifierというランダム値を生成し、そのハッシュ値(code_challenge)を計算する。 ②クライアントは、code_challengeを認可リクエストに付与する。 ③クライアントは、code_verifierをトークンリクエストに付与する。 ④認可サーバーは、code_verifierとcode_challengeを検証する。 ① ② ③ ④
  47. 47. 46 © Hitachi, Ltd. 2022. All rights reserved. おわりに: 参考文献 • 書籍: 認証と認可Keycloak入門 今回の内容の詳細、SSO、様々な認証 (多要素認証、外部ストレージ等) HA構成やカスタマイズの基本までカバー https://ric.co.jp/book/new-publication/detail/2081 https://www.amazon.co.jp/dp/4865943226/ • 書籍でカバーできてない内容について • ThinkIT: KeycloakのFAPI 1.0対応で実現する高度なAPIセキュリティ https://thinkit.co.jp/series/10313 Financial-grade API (FAPI)や、ベースとなっているClient Policies等を解説 • 公式ドキュメント https://www.keycloak.org/documentation 日本語訳: https://keycloak-documentation.openstandia.jp/
  48. 48. 47 © Hitachi, Ltd. 2022. All rights reserved. Trademarks • OpenID is a trademark or registered trademark of OpenID Foundation in the United States and other countries. • GitHub is a trademark or registered trademark of GitHub, Inc. in the United States and other countries. • Other brand names and product names used in this material are trademarks, registered trademarks, or trade names of their respective holders.

×