方法: ACS 管理サービスを使用して AD FS 2.0 をEnterprise ID プロバイダーとして構成する
更新日: 2015 年 6 月 19 日
適用先:Azure
適用対象
Microsoft® Azure™ Access Control Service (ACS)
Active Directory フェデレーション サービス (AD FS) 2.0
まとめ
このトピックでは、ID プロバイダーを名前空間または証明書利用者アプリケーションに追加する方法について説明します。 このタスクを実行するには、ACS 管理サービスを使用できます。 管理サービスは、ACS を管理するためのカスタム ユーザー インターフェイスを構築する場合や、マルチテナント サービスとしてのソフトウェア (SaaS) ソリューションの新しいテナントの追加を自動化する場合に特に便利です。
内容
目標
概要
手順の要約
手順 1 – 構成情報を収集する
手順 2 – 必要なサービスとアセンブリへの参照を追加する
手順 3 – 管理サービス プロキシを実装する
手順 4 – ID プロバイダーを追加する
手順 5 – 作業をテストする
目標
要件および構成情報を特定する。
必要な手順を一覧表示する。
構成が正常に完了したことを確認する。
概要
ACS 管理サービスは、ACS 機能をコードに公開する Web サービスです。 ACS 管理サービスは、ACS 管理ポータルのユーザー インターフェイスで使用できる機能サブセットを含め、すべての ACS 機能にアクセスできます。
MICROSOFT を ID プロバイダーとして ACS に追加すると、企業 ID 管理に対する投資をクラウドベースのソリューションに再利用できます。 ID プロバイダーとして構成するには、特定の手順に従うコードを記述する必要があります。 このトピックでは、これらの基本手順の概要を示します。
手順の要約
手順 1 – 構成情報を収集する
手順 2 – 必要なサービスとアセンブリへの参照を追加する
手順 3 – 管理サービス プロキシを実装する
手順 4 – ID プロバイダーを追加する
手順 5 – 作業をテストする
手順 1 – 構成情報を収集する
この手順では、必要な構成情報の収集方法について説明します。 次の情報を収集する必要があります。
管理サービス ID ユーザー名。 既定値は ManagementClient です。
管理サービス ID パスワード。
名前空間の名前。
ACS ホスト名: accesscontrol.windows.net
署名証明書の文字列: 展開から AD FS 署名証明書の文字列を取得します。
管理サービス ID ユーザー名とパスワードを検索するには、次の手順を使用します。
Microsoft Azure管理ポータル (https://manage.WindowsAzure.com) に移動し、サインインし、[Active Directory] をクリックします。 (トラブルシューティングのヒント: "Active Directory" 項目が見つからないか、使用できません)Access Control名前空間を管理するには、名前空間を選択し、[管理] をクリックします。 または、[アクセス制御名前空間] をクリックして名前空間を選択し、[管理] をクリックします。
[管理サービス] をクリックしてから、[ManagementClient] などの管理サービスを選択します。
[名前] フィールドの値は、管理サービス ID ユーザー名です。
[資格情報] セクションで、[パスワード] をクリックします。 パスワード フィールドの値は管理サービス ID パスワードです。
必要な情報を収集したら、次の手順に従って、ID プロバイダーとして追加するコードを実行するサンプル コンソール アプリケーションを作成します。
Visual Studioを開始し、新しいコンソール アプリケーション プロジェクトを作成します。
Program クラスで、モジュール スコープを持つ変数に構成情報値を割り当てます。 この方法は以下のコード サンプルに示されています。
static string serviceIdentityUsernameForManagement = "ManagementClient"; static string serviceIdentityPasswordForManagement = "ManagementClientPasswordValue"; static string serviceNamespace = "MyNameSpaceNoDots"; static string acsHostName = "accesscontrol.windows.net"; static string signingCertificate = "Very long string representing ADFS signing certificate"; static string cachedSwtToken; static string identityProviderName = "My Other ADFS Identity Provider";
手順 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;
手順 3 – 管理サービス プロキシを実装する
この手順では、管理サービス プロキシの実装をカプセル化するメソッドを作成します。
管理サービス プロキシを実装するには
Program クラスに次のメソッドを追加します。
public static ManagementService CreateManagementServiceClient() { string managementServiceHead = "v2/mgmt/service/"; string managementServiceEndpoint = string.Format("https://{0}.{1}/{2}", serviceNamespace, acsHostName, managementServiceHead); 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, string.Format("OAuth {0}", cachedSwtToken)); } private static string GetTokenFromACS() { // request a token from ACS WebClient client = new WebClient(); client.BaseAddress = string.Format("https://{0}.{1}", serviceNamespace, acsHostName); NameValueCollection values = new NameValueCollection(); values.Add("grant_type", "password"); values.Add("client_id", serviceIdentityUsernameForManagement); values.Add("username", serviceIdentityUsernameForManagement); values.Add("client_secret", serviceIdentityPasswordForManagement); values.Add("password", serviceIdentityPasswordForManagement); byte[] responseBytes = client.UploadValues("/v2/OAuth2-13/rp/AccessControlManagement", "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 プロバイダーを追加する
この手順では、前に作成した管理サービス プロキシを使用して ID プロバイダーとして追加します。
AD FS 2.0 を ID プロバイダーとして追加するには
管理サービス プロキシを初期化します。
ManagementService svc = CreateManagementServiceClient();
ID プロバイダーを発行者として追加します。
Issuer issuer = new Issuer { Name = identityProviderName }; svc.AddToIssuers(issuer); svc.SaveChanges(SaveChangesOptions.Batch);
ID プロバイダーを作成します。
IdentityProvider identityProvider = new IdentityProvider() { DisplayName = identityProviderName, Description = identityProviderName, WebSSOProtocolType = "WsFederation", IssuerId = issuer.Id }; svc.AddObject("IdentityProviders", identityProvider);
あらかじめ取得した証明書に基づいて、ID プロバイダー署名キーを作成します。
IdentityProviderKey identityProviderKey = new IdentityProviderKey() { DisplayName = "SampleIdentityProviderKeyDisplayName", Type = "X509Certificate", Usage = "Signing", Value = Convert.FromBase64String(signingCertificate), IdentityProvider = identityProvider, StartDate = startDate, EndDate = endDate, }; svc.AddRelatedObject(identityProvider, "IdentityProviderKeys", identityProviderKey);
ID プロバイダーのサインイン アドレスを更新します。
IdentityProviderAddress realm = new IdentityProviderAddress() { Address = "http://SampleIdentityProvider.com/sign-in/", EndpointType = "SignIn", IdentityProvider = identityProvider, }; svc.AddRelatedObject(identityProvider, "IdentityProviderAddresses", realm); 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 = identityProvider.Id, RelyingPartyId = rp.Id }); } } svc.SaveChanges(SaveChangesOptions.Batch);
手順 5 – 作業をテストする
作業をテストするには
[Access Control Service] ページで、[信頼関係] セクションの [規則グループ] リンクをクリックします。
使用可能ないずれかの規則をクリックします。
[規則グループの編集] ページで、[規則の追加] リンクをクリックします。
[要求規則の追加] ページで、[要求の発行者] セクションのドロップダウン リストから新しく追加した ID プロバイダーを選択します。
残りの値は既定値のまま使用します。
[保存] をクリックします。
これで、ID プロバイダーのパススルー規則が作成されました。