方法: ACS 管理サービスを使用してインターネット ID プロバイダーとして Facebook を構成する
更新日: 2015 年 6 月 19 日
適用先:Azure
適用対象
Microsoft® Azure™ Access Control Service (ACS)
Facebook
まとめ
このトピックでは、Facebook を ID プロバイダーとして追加する場合に必要な基本手順の概要を示します。 Facebook は、管理ポータルを使用して ACS に ID プロバイダーとして追加することも、ACS 管理サービスで自動化することもできます。 管理サービスの操作は、ACS を管理するためのカスタム ユーザー インターフェイスを構築する場合や、マルチテナント Software as a Service (SaaS) ソリューションの新しいテナントのオンボードを自動化する場合などに便利です。
内容
目標
概要
手順の要約
手順 1 – 構成情報を収集する
手順 2 – 必要なサービスとアセンブリへの参照を追加する
手順 3 – 管理サービス プロキシを実装する
手順 4 – ID プロバイダーを追加する
手順 5 – 作業をテストする
目標
必要な前提条件と構成情報を特定します。
ID プロバイダーとして Facebook を追加するために必要な手順を一覧表示する。
構成が正常に完了したことをテストする。
概要
管理サービスは、ACS の主要なコンポーネントの 1 つである Web サービスです。 管理サービスは、管理ポータル ユーザー インターフェイスを介して使用できる機能を公開します。 管理ポータルで実行できる操作は管理サービスを使用して実行することもできます。 FACEBOOk を ID プロバイダーとして ACS に追加すると、インターネット スケールの ID 管理メカニズムの開発と維持を節約できます。 Facebook を ID プロバイダーとして構成するタスクを実行するには、特定の手順に従うコードを記述する必要があります。 このトピックでは、これらの基本手順の概要を示します。
手順の要約
手順 1 – 構成情報を収集する
手順 2 – 必要なサービスとアセンブリへの参照を追加する
手順 3 – 管理サービス プロキシを実装する
手順 4 – ID プロバイダーを追加する
手順 5 – 作業をテストする
手順 1 – 構成情報を収集する
この手順では、必要な構成情報を特定して収集する方法を示します。 次の情報を収集する必要があります。
管理サービス ID ユーザー名 — ManagementClient。
管理サービス ID パスワード — 管理サービスのサービス ID パスワードを取得するには:
アクセス制御サービスの管理ポータルにログオンします。
[管理] セクションで、[管理サービス] リンクをクリックします。
[管理サービス] ページで、[ManagementClient] リンク (ManagementClient はサービスの実際のユーザー名です) をクリックします。
[資格情報] セクションで、[対称キー] または [パスワード] リンクをクリックします。 どちらも値は同じです。 これはパスワードです。
サービスの名前空間
ACS ホスト名: 通常 は accesscontrol.windows.net。
Facebook アプリケーション ID とアプリケーション シークレット - Id プロバイダーとして Facebook を構成する方法に関するページの指示に従います。
必要な情報を収集したら、以下の手順に従って、Facebook を ID プロバイダーとして追加するコードを実行するサンプルのコンソール アプリケーションを作成します。
Visual Studio® 2010 を開き、新しいコンソール アプリケーション プロジェクトを作成します。
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";
手順 2 – 必要なサービスとアセンブリへの参照を追加する
この手順では、サービスとアセンブリに必要な依存関係を特定し、追加します。
サービスとアセンブリに必要な依存関係を追加するには
System.Web.Extensions への参照を追加します。
管理サービスへのサービス参照を追加します。 管理サービスの URL は名前空間に対して一意であり、次のような形式です。
https:// YOURNAMESPACE.accesscontrol.windows.net/v2/mgmt/service
次の宣言を追加します。
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 に注意してください。コンソール アプリケーションの作成時または管理サービスへの参照の追加時に既定値を変更した場合は異なることがあります。
手順 3 – 管理サービス プロキシを実装する
この手順では、管理サービス プロキシの実装をカプセル化するメソッドを作成します。
管理サービス プロキシを実装するには
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; }
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; }
手順 4 – ID プロバイダーを追加する
この手順では、前に作成した管理サービス プロキシを使用して、Facebook を ID プロバイダーとして追加します。
Facebook を ID プロバイダーとして追加するには
Main メソッドで、管理サービス プロキシを初期化します。
ManagementService svc = CreateManagementServiceClient();
ID プロバイダーを発行者として追加します。
Issuer issuer = new Issuer { Name = identityProviderName + “-” + facebookAppId }; svc.AddToIssuers(issuer); svc.SaveChanges(SaveChangesOptions.Batch);
ID プロバイダーを作成します。
var facebook = new IdentityProvider { DisplayName = identityProviderName, LoginLinkName = "Facebook", LoginParameters = "email", WebSSOProtocolType = "Facebook", IssuerId = issuer.Id }; svc.AddObject("IdentityProviders", facebook);
あらかじめ取得した証明書に基づいて、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);
管理サービスを除く証明書利用者が 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);
手順 5 – 作業をテストする
作業をテストするには
アクセス制御サービスの管理ポータルにログオンします。
[Access Control Service] ページで、[信頼関係] セクションの [規則グループ] リンクをクリックします。
使用可能ないずれかの規則をクリックします。
[規則グループの編集] ページで、[規則の追加] リンクをクリックします。
[要求規則の追加] ページで、[要求の発行者] セクションのドロップダウン リストから新しく追加した ID プロバイダーを選択します。
残りの値は既定値のまま使用します。
[保存] をクリックします。
これで、ID プロバイダーのパススルー規則が作成されました。