IBM Cloud Docs
カスタム ID

カスタム ID

認証時に独自のカスタム ID プロバイダーを使用できます。 IBM Cloud® App ID でサポートされている認証メカニズムの代替となる、任意の認証メカニズムに準拠した ID プロバイダーを使用できます (専有またはレガシーのものを含む)。

概要

独自の ID プロバイダーを導入することで、独自のプロトコルを使用したカスタム認証フローを作成できます。 共有する情報や保管する情報など、さらに自由に制御できます。

カスタム・プロバイダーを構成した後で、それをアプリケーションに追加するようにしてください。

このフローを使用できる状況

App ID が特定の ID プロバイダーを直接サポートしていない場合、App ID の既存の認証フローと認証プロトコルの間のブリッジとして、カスタム識別フローを使用することができます。 例えば、GitHub または LinkedIn を使用してユーザーにサインインを許可するとします。 ユーザー認証情報を容易に扱えるように ID プロバイダーの既存の SDK を使用してから、その情報をパッケージして App ID と交換することができます。

別の認証フローが必要になるシナリオは、以下のように多数あります。

  • 専有の社内 ID プロバイダー
  • サード・パーティーの ID プロバイダー
  • 複雑な認証フロー (独自の多要素メカニズムが組み込まれていることがあります)

場合によっては、レガシー・プロバイダーで独自のカスタム認証プロトコルが使用されていることがあります。 カスタム識別フローによって認証が許可から完全に分離されるため、任意の認証メカニズムを採用し、それから得られる認証情報を App ID に提供することができます。 これらの処理はすべて、ユーザー資格情報を露出せずに実行できます。

このフローの技術的な仕組み

カスタム ID ワークフローは、Assertion Framework for OAuth 2.0 Authorization Grants [RFC7521 ] で定義されている JWT-Bearer 拡張グラント・タイプに基づいて構築されている。 App ID トークンのユーザー情報を交換するために、認証アーキテクチャーで、非対称 RSA 鍵ペアを使用して App ID との信頼関係を確立します。 信頼関係が確立されたら、JWT-Bearer 付与タイプを使用することで、App ID のトークンの署名付き JWT 内にある、検証済みユーザー情報を交換できます。

フローの概要

あらゆる認証フローの場合と同様に、カスタム識別を使用する場合も、ID プロバイダーのユーザー情報の整合性を確保するため、アプリケーションが App ID との一定レベルの信頼関係を確立できるようにする必要があります。 カスタム識別の場合、非対称 RSA 公開鍵/秘密鍵ペアを使用して、信頼関係を確立します。 カスタム識別は、アーキテクチャーの要件に基づいて 2 種類の信頼モデルをサポートします。2 つの違いはストレージ・ロケーションと秘密鍵の使用法のみです。

カスタム認証リクエスト
*カスタム
のリクエストフローです

ID プロバイダ署名済みフロー
  1. ID プロバイダーによる署名
従来の OAuth 2.0 フローと同様に、最もセキュアな信頼モデルでは、ID プロバイダーと許可サーバー (この場合は App ID) との間の直接の関係が作成されます。 このモデルでは、ID プロバイダーが秘密鍵の保管と JWT アサーションの署名を実行します。 これらのアサーションは、App ID に渡されると、対応する公開鍵を使用して検証されます。これにより、ID プロバイダーからのユーザー情報が転送中に故意に改ざんされていないことを確認できます。
アプリケーション署名フロー
  1. アプリケーションによる署名
別の方式として、アプリと App ID との間の関係に基づいた信頼モデルを採用することもできます。 このワークフローでは、秘密鍵はサーバー・サイドのアプリケーションに保管されます。 認証が成功すると、アプリは、ID プロバイダーの応答を JWT に変換し、その秘密鍵を使用して JWT に署名します。その後、アプリはトークンを App ID に送信します。 このアーキテクチャーでは、この ID プロバイダーに App ID との関係がないため、信頼モデルは前者の方法より弱くなります。 App ID は、サーバー・サイドのアプリケーションによって送信された情報を信頼できますが、データが ID プロバイダーによって送信されたオリジナル・データであることを確証できません。

JSON Web トークンの生成

JSONウェブトークンを生成することで、検証済みのユーザーデータをカスタムID JWTに変換できます。 このトークンを、事前構成された公開鍵に対応する秘密鍵で署名する必要があります。 トークン署名ライブラリのリストについては、以下をチェックしてほしい。 https://jwt.io/.

JWT フォーマットの例

{
  // Header
  "alg": "RS256",
  "typ": "JOSE",
  // Payload
  // Required
  "iss": "String", // Should reference your identity provider
  "aud": "String", // Must be the OAuth server URL name
  "exp": "Int",    // Should be a value with a short lifespan
  "sub": "String", // Must be the unique user ID provided by your identity provider

  // Normalized claims (optional)
  "name": "String",
  "email": "String",
  "locale": "String",
  "picture": "String",
  "gender": "String",

  // Custom Scopes to add to access token (optional)
  scope="custom_scope1 custom_scope2"

  // Other custom claims (optional)
  role="admin"
}
JWSフィールド
フィールド 説明
iss ID プロバイダーへの参照を含める必要があります。
aud OAuth サーバー URL。 形式: https://<region>.appid.cloud.ibm.com/oauth/v4/<tenantID>
exp トークンが有効である時間の長さ。 セキュリティー上の理由から、短い存続期間を具体的に指定する必要があります。
sub ID プロバイダーによって提供される固有のユーザー ID。
正規化クレーム すべての正規化クレームは、この要求に対する応答として返される、識別トークンで提供されます。 /userinfo エンドポイントを使用して、さらにカスタム・クレームを検出することができます。
スコープ

デフォルトでは、すべての App ID トークンに事前設定スコープのグループが含まれています。 以下のいずれかを実行して、追加のスコープを要求できます。

  • JWS トークンのスコープ・フィールドでスコープを指定します。
  • /token 要求の URL-form スコープ・パラメーターを使用してスコープを指定します。

App ID トークンの取得

カスタム・プロバイダーと App ID との間のブリッジを作成するには、App ID のトークンが必要です。 サービス・トークンを取得するには、 /token エンドポイントを使用して、認証済みのユーザー情報を交換します。

Post /token
Content-Type: application/x-www-from-urlencoded
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
assertion=<payload>
scope="<spaceSeparatedScopeArray>"
必須リクエスト変数
変数 説明
コンテンツ・タイプ applications/x-www-from-urlencoded
grant_type urn:ietf:params:oauth:grant-type:jwt-bearer
assertion JWS ペイロード・ストリング。
スコープ カスタム・スコープの空白文字区切りリスト。