このドキュメントはアーカイブされており、メンテナンスされていません。

方法:ACS 管理サービスを使用して Facebook をインターネット ID プロバイダーとして構成する

発行: 2011年4月

更新日: 2015年6月

適用対象: Azure

  • Microsoft® Azure™ Access Control Service (ACS)

  • Facebook

このトピックでは、Facebook を ID プロバイダーとして追加する場合に必要な基本手順の概要を示します。Facebook は ID プロバイダーとして追加できる ACS に追加できます。追加は、管理ポータルを使用して行うことも、ACS 管理サービスで自動化することもできます。ACS を管理するためのカスタム ユーザー インターフェイスを作成するシナリオや、マルチテナント SaaS (Software as a Service) ソリューションの新しいテナントのオンボーディングを自動化するシナリオなどで管理サービスを使用すると便利です。

  • 目標

  • 概要

  • 手順の概要

  • 手順 1 – 構成情報を収集する

  • 手順 2 – 必要なサービスとアセンブリへの参照を追加する

  • 手順 3 – 管理サービス プロキシを実装する

  • 手順 4 – ID プロバイダーを追加する

  • 手順 5 – 作業をテストする

  • 必要な前提条件と構成情報を特定します。

  • ID プロバイダーとして Facebook を追加するために必要な手順を一覧表示する。

  • 構成が正常に完了したことをテストする。

管理サービスは、ACS の主なコンポーネントの 1 つである Web サービスです。管理サービスは、管理ポータル ユーザー インターフェイスを介して使用できる機能を公開します。管理ポータルで実行できる操作は管理サービスを使用して実行することもできます。ACS に Facebook を ID プロバイダーとして追加すると、インターネット規模の ID 管理メカニズムの開発および維持を軽減できます。Facebook を ID プロバイダーとして構成するタスクを実行するには、特定の手順に従うコードを記述する必要があります。このトピックでは、これらの基本手順の概要を示します。

  • 手順 1 – 構成情報を収集する

  • 手順 2 – 必要なサービスとアセンブリへの参照を追加する

  • 手順 3 – 管理サービス プロキシを実装する

  • 手順 4 – ID プロバイダーを追加する

  • 手順 5 – 作業をテストする

この手順では、必要な構成情報を特定して収集する方法を示します。次の情報を収集する必要があります。

  • 管理サービス ID ユーザー名ManagementClient

  • 管理サービス ID パスワード — 管理サービスのサービス ID パスワードを取得するには:

    1. アクセス制御サービスの管理ポータルにログオンします。

    2. [管理] セクションで、[管理サービス] リンクをクリックします。

    3. [管理サービス] ページで、[ManagementClient] リンク (ManagementClient はサービスの実際のユーザー名です) をクリックします。

    4. [資格情報] セクションで、[対称キー] または [パスワード] リンクをクリックします。どちらも値は同じです。これはパスワードです。

  • サービスの名前空間

  • ACS ホスト名 — 通常は accesscontrol.windows.net です。

  • Facebook のアプリケーション ID とアプリケーション シークレット — 「方法:Facebook を ID プロバイダーとして構成する」の手順に従ってください。

必要な情報を収集したら、以下の手順に従って、Facebook を ID プロバイダーとして追加するコードを実行するサンプルのコンソール アプリケーションを作成します。

  1. Visual Studio® 2010 を開き、新しいコンソール アプリケーション プロジェクトを作成します。

  2. Program クラスで、次のようなコードを使用して、以前に収集した情報をモジュール スコープ変数に割り当てます。

static string serviceIdentityUsernameForManagement = "ManagementClient";
static string serviceIdentityPasswordForManagement = "My Password for my ManagementClient";

static string serviceNamespace = "MyNameSpaceNoDots";
static string acsHostName = "accesscontrol.windows.net";
static string acsManagementServicesRelativeUrl = "v2/mgmt/service/";


static string cachedSwtToken;
static string identityProviderName = "Facebook";

static string facebookAppId = "Your Facebook AppID";
static string facebookAppSecret = "Your Facebook Secret";

この手順では、サービスとアセンブリに必要な依存関係を特定し、追加します。

  1. System.Web.Extensions への参照を追加します。

  2. 管理サービスへのサービス参照を追加します。管理サービスの URL は名前空間に対して一意であり、次のような形式です。

    https://YOURNAMESPACE.accesscontrol.windows.net/v2/mgmt/service

  3. 次の宣言を追加します。

    using System.Web; 
    using System.Net; 
    using System.Data.Services.Client; 
    using System.Collections.Specialized; 
    using System.Web.Script.Serialization;
    using System.Globalization;
    using System.Runtime.Serialization.Json;
    using ConsoleApplication1.ServiceReference1;
    
    

最後の宣言 ConsoleApplication1.ServiceReference1 に注意してください。コンソール アプリケーションの作成時または管理サービスへの参照の追加時に既定値を変更した場合は異なることがあります。

この手順では、管理サービス プロキシの実装をカプセル化するメソッドを作成します。

  1. 次のメソッドを Program クラスに追加します。

    public static ManagementService CreateManagementServiceClient()
            {
                string managementServiceEndpoint = String.Format(CultureInfo.InvariantCulture, "https://{0}.{1}/{2}",
                    serviceNamespace,
                    acsHostName,
                    acsManagementServicesRelativeUrl);
                ManagementService managementService = new ManagementService(new Uri(managementServiceEndpoint));
    
                managementService.SendingRequest += GetTokenWithWritePermission;
    
                return managementService;
            }
    
    
    
  2. GetTokenWithWritePermission メソッドとそのヘルパー メソッドを実装します。これにより、SWT OAuth トークンが HTTP 要求の承認ヘッダーに追加されます。

    public static void GetTokenWithWritePermission(object sender, SendingRequestEventArgs args)
            {
                GetTokenWithWritePermission((HttpWebRequest)args.Request);
            }
    
            public static void GetTokenWithWritePermission(HttpWebRequest args)
            {
                if (cachedSwtToken == null)
                {
                    cachedSwtToken = GetTokenFromACS();
                }
    
                args.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + cachedSwtToken);
            }
    
            private static string GetTokenFromACS()
            {
                //
                // Request a token from ACS
                //
                WebClient client = new WebClient();
                client.BaseAddress = string.Format(CultureInfo.CurrentCulture, 
                                                   "https://{0}.{1}", 
                                                   serviceNamespace, 
                                                   acsHostName);
    
                NameValueCollection values = new NameValueCollection();
                values.Add("grant_type", "client_credentials");
                values.Add("client_id", serviceIdentityUsernameForManagement);
                values.Add("client_secret", serviceIdentityPasswordForManagement);
                values.Add("scope", client.BaseAddress + acsManagementServicesRelativeUrl);
    
                byte[] responseBytes = client.UploadValues("/v2/OAuth2-13", "POST", values);
    
                string response = Encoding.UTF8.GetString(responseBytes);
    
                // Parse the JSON response and return the access token 
                JavaScriptSerializer serializer = new JavaScriptSerializer();
    
                Dictionary<string, object> decodedDictionary = serializer.DeserializeObject(response) as Dictionary<string, object>;
    
                return decodedDictionary["access_token"] as string;
    
            }
    
    
    
    

この手順では、前に作成した管理サービス プロキシを使用して、Facebook を ID プロバイダーとして追加します。

  1. Main メソッドで、管理サービス プロキシを初期化します。

    ManagementService svc = CreateManagementServiceClient();
    
    
  2. ID プロバイダーを発行者として追加します。

    Issuer issuer = new Issuer
    {
       Name = identityProviderName + “-” + facebookAppId
    };
    svc.AddToIssuers(issuer);
    svc.SaveChanges(SaveChangesOptions.Batch);
    
    
  3. ID プロバイダーを作成します。

    var facebook = new IdentityProvider
    {
        DisplayName = identityProviderName,
        LoginLinkName = "Facebook",
        LoginParameters = "email",
        WebSSOProtocolType = "Facebook",
        IssuerId = issuer.Id
    };
    
    svc.AddObject("IdentityProviders", facebook);
    
    
  4. あらかじめ取得した証明書に基づいて、ID プロバイダー署名キーを作成します。

    var facebookKeys = new[]
        {
            new IdentityProviderKey
                {
                    IdentityProvider = facebook,
                    StartDate = DateTime.UtcNow,
                    EndDate = DateTime.UtcNow.AddYears(1),
                    Type = "ApplicationKey",
                    Usage = "ApplicationId",
                    Value = Encoding.UTF8.GetBytes(facebookAppId)
                },
            new IdentityProviderKey
                {
                    IdentityProvider = facebook,
                    StartDate = DateTime.UtcNow,
                    EndDate = DateTime.UtcNow.AddYears(1),
                    Type = "ApplicationKey",
                    Usage = "ApplicationSecret",
                    Value = Encoding.UTF8.GetBytes(facebookAppSecret)
                }
        };
    
    foreach (var key in facebookKeys)
    {
        svc.AddRelatedObject(facebook, "IdentityProviderKeys", key);
    }
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    
    
  5. 管理サービスを除く証明書利用者が ID プロバイダーが使用できるようにします。

    foreach (RelyingParty rp in svc.RelyingParties)
    {
        // skip the built-in management RP. 
        if (rp.Name != "AccessControlManagement")
        {
            svc.AddToRelyingPartyIdentityProviders(new RelyingPartyIdentityProvider()
            {
                IdentityProviderId = facebook.Id,
                RelyingPartyId = rp.Id
            });
        }
    }
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    
    

  1. アクセス制御サービスの管理ポータルにログオンします。

  2. [Access Control Service] ページで、[信頼関係] セクションの [規則グループ] リンクをクリックします。

  3. 使用可能ないずれかの規則をクリックします。

  4. [規則グループの編集] ページで、[規則の追加] リンクをクリックします。

  5. [要求規則の追加] ページで、[要求の発行者] セクションのドロップダウン リストから新しく追加した ID プロバイダーを選択します。

  6. 残りの既定値はそのままにします。

  7. [保存] をクリックします。

これで、ID プロバイダーのパススルー規則が作成されました。

表示: