次の方法で共有


ユーザーの登録と成果物のサブスクリプションを委任する方法

適用対象: Developer | Basic | Basic v2 | Standard | Standard v2 | Premium | Premium v2

委任を使用すると、Web サイトでユーザー データを所有し、開発者ポータルのユーザーに対してカスタム検証を実行できます。 委任を使用すると、開発者ポータルの組み込み機能ではなく、既存の Web サイトを使用して、開発者のサインインとサインアップ (および関連するアカウント管理操作) と製品サブスクリプションを処理できます。

開発者のサインインおよびサインアップ処理の委任

開発者のサインインまたはサインアップと開発者アカウントの管理オプションを既存の Web サイトに委任するには、サイト上で特殊な委任エンドポイントを作成します。 この特別な委任は、API Management 開発者ポータルから開始されたサインイン/サインアップおよび関連する要求のエントリ ポイントとして機能します。

最後のワークフローは、次の手順で構成されます。

  1. 開発者は、API Management 開発者ポータルでサインインまたはサインアップ リンク、またはアカウント管理リンクをクリックします。
  2. ブラウザーが委任エンドポイントにリダイレクトされます。
  3. 次に、委任エンドポイントにより、ユーザーがサインインまたはサインアップ UI、またはアカウント管理 UI にリダイレクトされるか、ユーザーにそれらの UI が表示されます。
  4. 操作が完了すると、ユーザーは API Management 開発者ポータルの最後にアクセスした場所にリダイレクトされます。

委任エンドポイントを介して要求をルーティングするように API Management を設定する

  1. Azure portal で、API Management インスタンスに移動します。

  2. サイドバー メニューの [開発者ポータル] で、[ 委任] を選択します。

  3. [ 委任を有効にする] チェック ボックスをオンにします。

  4. [ 代理人のサインインとサインアップ] を有効にするには、チェック ボックスをオンにします。

    ポータルでのサインインおよびサインアップの委任を示すスクリーンショット。

  5. 特殊な委任エンドポイントの URL を選択し、[ 委任サービス エンドポイント ] フィールドに入力します。

  6. 委任キー:

    • 委任サービスが API Management からの要求を検証するために使用する プライマリ検証キー または セカンダリ検証キー (またはその両方) を生成します。 いずれかのキーの横にある省略記号 (...) を選択し、[ 再生成] を選択します。
    • いずれかのキーの横にある省略記号 (...) を選択し、[ コピー] を選択します。 セキュリティで保護された場所にキーをコピーし、委任サービスを構成するときに使用します。
  7. 保存 を選択します。

ヒント

委任検証キーはいつでもローテーションおよび再生成できます。 ローテーションでは、主キーがセカンダリ キーに置き換えられ、セカンダリ キーが再生成されます。 キーを保存したら、新しいキーを使用するように委任サービスを更新してください。

委任エンドポイントを作成する

サイトに実装する新しい委任エンドポイントを作成するには、次の手順に従います。

  1. 操作に応じて次の形式で要求を受信します。

    http://www.yourwebsite.com/apimdelegation?operation={operation}&returnUrl={元のページの URL}&salt={文字列}&sig={文字列}

    -または-

    http://www.yourwebsite.com/apimdelegation?operation={operation}&userId={アカウントのユーザー ID}&salt={文字列}&sig={文字列}

    クエリ パラメーター:

    パラメーター 説明
    操作 委任要求の種類を特定します。 使用できる操作: SignInSignUpChangePasswordChangeProfileCloseAccountSignOut
    returnUrl SignIn または SignUp 時、ユーザーがサインインまたはサインアップ リンクをクリックした場所の URL。
    userId ChangePasswordChangeProfileCloseAccountSignOut 時、管理するアカウントのユーザー ID。
    セキュリティ ハッシュの計算に使用される特殊な salt 文字列。
    sig 自分で計算したハッシュとの比較に使用された、計算によって求められたセキュリティ ハッシュ。
  2. 要求の送信元が Azure API Management であることを確認します (省略できますが、セキュリティ上強く推奨されます)。

    • returnUrl (または UserId) および salt クエリ パラメータに基づいて、文字列の HMAC-SHA512 ハッシュを計算します。 例については、コード例を参照してください。

      SignIn および SignUp の場合:

      HMAC(salt + '\n' + returnUrl)
      

      ChangePasswordChangeProfileCloseAccountSignOut の場合:

      HMAC(salt + '\n' + userId)
      
    • 上の計算によって求められたハッシュを sig クエリ パラメーターの値と比較します。 2 つのハッシュ値が等しい場合は、次の手順に移動します。 それ以外の場合は、要求を拒否します。

  3. サインインまたはサインアップの要求、またはアカウント管理操作の要求を受け取っていることを確認します。

  4. サインインまたはサインアップ UI、またはアカウント管理 UI をユーザーに表示します。

  5. お客様の側で操作が完了したら、API Management でユーザーを管理します。 たとえば、ユーザーがサインアップすると、ユーザーの対応するアカウントを API Management 内に作成します。

    • ユーザーを作成 します。
    • ユーザー ID は、ユーザー ストア内のユーザー ID と同じ値、または追跡しやすい ID に設定してください。
  6. ユーザーがサインインまたはサインアップ後、正常に認証された場合、次の操作を行います。

    • API Management REST API を使用して、共有アクセス トークンを要求します。

    • 上記の API 呼び出しによって受け取った SSO URL に returnUrl クエリ パラメーターを付加します。 次に例を示します。

      https://contoso.developer.azure-api.net/signin-sso?token=<URL-encoded token>&returnUrl=%2Freturn%2Furl

    • 上で生成された URL にユーザーをリダイレクトします。

製品のサブスクリプション処理の委任

製品のサブスクリプション処理を委任するしくみは、ユーザーのサインイン/サインアップ処理の委任と似ています。 最後のワークフローは、次の手順で構成されます。

  1. 開発者は、API Management 開発者ポータルで製品を選択し、[ サブスクライブ ] ボタンを選択します。
  2. ブラウザーが委任エンドポイントにリダイレクトされます。
  3. 委任エンドポイントで、必要な製品のサブスクリプション手順が実行されます。この手順の設計は、お客様に任されています。 次の手順を実行できます。
    • 別のページへのリダイレクトして課金情報を要求する。
    • さらに質問する。
    • 情報を保存するだけでユーザーのアクションを求めない。

API Management 機能を有効にする

[ 委任 ] ページで、[ 委任を有効にする] チェック ボックスをオンにし、[ 製品サブスクリプションの委任] を有効にします。

委任エンドポイントを作成する

サイトの新しい委任エンドポイントを作成するには、次の手順に従います。

  1. 操作に応じて次の形式で要求を受信します。

    http://www.yourwebsite.com/apimdelegation?operation={operation}&productId={サブスクライブする成果物}&userId={要求元のユーザー}&salt={文字列}&sig={文字列}

    -または-

    http://www.yourwebsite.com/apimdelegation?operation={operation}&subscriptionId={管理対象のサブスクリプション}&salt={文字列}&sig={文字列}

    クエリ パラメーター:

    パラメーター 説明
    操作 委任要求の種類を特定します。 有効な製品サブスクリプション要求オプションは次のとおりです。
    • Subscribe: 提供された ID (以下を参照) を持つ特定の製品をユーザーがサブスクライブするための要求。
    • 登録を解除: ユーザーの製品のサブスクリプションを解除するための要求
    productId "サブスクライブ" 時、ユーザーがサブスクリプションを要求した製品の ID。
    userId "サブスクライブ" 時の要求側ユーザーの ID。
    subscriptionId [登録を解除] で、製品のサブスクリプション ID。
    セキュリティ ハッシュの計算に使用される特殊な salt 文字列。
    sig 自分で計算したハッシュとの比較に使用された、計算によって求められたセキュリティ ハッシュ。
  2. 要求が Azure API Management から送信されていることを確認します (省略可能ですが、セキュリティを強化することを強くお勧めします)。

    • productIduserId (または subscriptionId)、salt クエリ パラメータに基づいて、文字列の HMAC-SHA512 ハッシュを計算します。

      Subscribe の場合:

      HMAC(salt + '\n' + productId + '\n' + userId)
      

      [登録を解除] の場合:

      HMAC(salt + '\n' + subscriptionId)
      
    • 上の計算によって求められたハッシュを sig クエリ パラメーターの値と比較します。 2 つのハッシュが一致する場合は、次の手順に進みます。 それ以外の場合は、要求を拒否します。

  3. operation で要求された操作の種類 (課金、追加の質問など) に基づいて、製品のサブスクリプションを処理します。

  4. お客様の側で操作が完了したら、API Management でサブスクリプションを管理します。 たとえば、サブスクリプションのための REST API を呼び出して、API Management 製品にユーザーをサブスクライブします。

コード例

これらのコード サンプルは、ユーザーのサインインまたはサインアップを委任する際に returnUrl クエリ パラメータのハッシュを生成する方法を示しています。 returnUrlは、ユーザーがサインインまたはサインアップ リンクをクリックしたページの URL です。

  • Azure portal の [委任] 画面で設定した委任検証キーを取得します。
  • 署名を検証し、渡された returnUrlの有効性を証明する HMAC を作成します。

他のハッシュを計算する場合も、同じコードを多少変更して使用することができます。たとえば、製品サブスクリプションを委任する場合は、productIduserId を使用します。

returnUrl のハッシュを生成する C# のコード

using System.Security.Cryptography;

string key = "delegation validation key";
string returnUrl = "returnUrl query parameter";
string salt = "salt query parameter";
string signature;
using (var encoder = new HMACSHA512(Convert.FromBase64String(key)))
{
    signature = Convert.ToBase64String(encoder.ComputeHash(Encoding.UTF8.GetBytes(salt + "\n" + returnUrl)));
    // change to (salt + "\n" + productId + "\n" + userId) when delegating product subscription
    // compare signature to sig query parameter
}

returnUrl のハッシュを生成する Node.js のコード

var crypto = require('crypto');

var key = 'delegation validation key'; 
var returnUrl = 'returnUrl query parameter';
var salt = 'salt query parameter';

var hmac = crypto.createHmac('sha512', new Buffer(key, 'base64'));
var digest = hmac.update(salt + '\n' + returnUrl).digest();
// change to (salt + "\n" + productId + "\n" + userId) when delegating product subscription
// compare signature to sig query parameter

var signature = digest.toString('base64');

重要

委任変更を有効にするには、開発者ポータルを再発行する必要があります。