Nasıl yapılır: Hizmet Kimliklerini Yapılandırmak için ACS Yönetim Hizmetini Kullanma
Güncelleştirme: 19 Haziran 2015
Şunlar için geçerlidir: Azure
Uygulanan Öğe
- Microsoft Azure Active Directory Access Control (Access Control Hizmeti veya ACS olarak da bilinir)
Genel Bakış
ACS hizmet kimliklerini ACS Yönetim Portalı'nı (daha fazla bilgi için bkz . Hizmet Kimlikleri) veya ACS Yönetim Hizmeti'ni kullanarak yapılandırabilirsiniz. ACS yönetimi için özel bir kullanıcı arabirimi oluşturuyorsanız veya çok kiracılı Hizmet Olarak Yazılım (SaaS) çözümleri için yeni bir kiracı eklemeyi otomatikleştirmek istiyorsanız ACS Yönetim Hizmeti ile çalışmak daha verimli olabilir.
ACS Yönetim Hizmetini Kullanarak Hizmet Kimliklerini Yapılandırma Adımları
Önemli
Aşağıdaki adımları gerçekleştirmeden önce sisteminizin ACS Önkoşulları bölümünde özetlenen tüm .NET framework ve platform gereksinimlerini karşıladığından emin olun.
ACS Yönetim Hizmeti'ni kullanarak hizmet kimliklerini yapılandırmak için aşağıdaki adımları tamamlayın:
1. Adım – ACS Yapılandırma Bilgilerini Toplama
2. Adım – Örnek konsol uygulaması oluşturma
3. Adım – Gerekli Hizmetlere ve Derlemelere Başvuru Ekleme
4. Adım – Yönetim Hizmeti İstemcisini Uygulama
5. Adım – Hizmet Kimliği Ekleme
1. Adım – ACS Yapılandırma Bilgilerini Toplama
Gerekli yapılandırma bilgilerini toplamak için ACS Yönetim Portalı'nı kullanabilirsiniz. ACS Yönetim Portalı'nı başlatma hakkında daha fazla bilgi için bkz. ACS Yönetim Portalı.
ACS yapılandırma bilgilerini toplamak için
ACS Yönetim Portalı'nı başlatın. ACS Yönetim Portalı'nı başlatma hakkında daha fazla bilgi için bkz. ACS Yönetim Portalı.
ACS yönetim hizmeti hesabının değerini alın. Varsayılan ManagementClient hesabını kullanabilirsiniz. Bu değeri görüntülemek için ACS Yönetim Portalı'nda, sayfanın sol tarafındaki ağaçtaki Yönetim bölümünün altında Yönetim hizmeti'ne tıklayın.
ACS Yönetim Hizmeti hesap parolasının değerini alın. Bu değeri görüntülemek için aşağıdakileri yapın:
ACS Yönetim Portalı'nda, sayfanın sol tarafındaki ağaçtaki Yönetim bölümünün altında Yönetim hizmeti'ne tıklayın.
Yönetim Hizmeti sayfasında, Yönetim Hizmeti Hesapları'nın altında Yönetimİstemci'ye tıklayın.
Yönetim Hizmeti Hesabını Düzenle sayfasında, Kimlik Bilgileri'nin altında Parola'ya tıklayın.
Yönetim Kimlik Bilgilerini Düzenle sayfasında Parola alanındaki değeri kopyalayın.
Azure ad alanınızın değerini alın. Bu değeri Azure portal veya ACS Yönetim Portalınızın URL'sinden alabilirsiniz. Örneğin, içinde http://contoso.accesscontrol.windows.netAzure ad alanının değeri contoso'dur.
ACS ana bilgisayar adının değerini alın. Genellikle accesscontrol.windows.net.
2. Adım – Örnek konsol uygulaması oluşturma
Bu adımda, ACS hizmet kimliklerinizi eklemek için kodu çalıştırabilen bir örnek konsol uygulaması oluşturursunuz.
Örnek konsol uygulaması oluşturmak için
Visual Studio 2012'i açın ve yeni bir konsol uygulaması projesi oluşturun.
Aşağıdaki kodu Program sınıfına ekleyin ve yukarıdaki adımda topladığınız uygun yapılandırma bilgilerine serviceIdentityPasswordForManagement, serviceNamespace ve acsHostName değişkenlerini atayın.
public const string serviceIdentityUsernameForManagement = "ManagementClient"; public const string serviceIdentityPasswordForManagement = "My Password/Key for ManagementClient"; public const string serviceNamespace = "MyNameSpaceNoDots"; public const string acsHostName = "accesscontrol.windows.net"; public const string acsManagementServicesRelativeUrl = "v2/mgmt/service/"; static string cachedSwtToken;
3. Adım – Gerekli Hizmetlere ve Derlemelere Başvuru Ekleme
Bu adımda, gerekli bağımlılıkları belirler ve hizmetlere ve derlemelere eklersiniz.
Gerekli bağımlılıkları hizmetlere ve derlemelere eklemek için
Başvurular'a sağ tıklayın, Başvuru Ekle'ye tıklayın ve System.Web.Extensions'a başvuru ekleyin.
Not
Çözüm Gezgini örnek konsol uygulama adınıza sağ tıklamanız, Özellikler'i seçmeniz ve örnek uygulamanızın hedef çerçevesini .NET Framework 4 İstemci Profilinden (yeni konsol uygulaması oluşturduğunuzda varsayılan olarak atanır) .NET Framework 4 olarak değiştirmeniz gerekebilir.
Hizmet Başvuruları'na sağ tıklayın, Hizmet Başvurusu Ekle'ye tıklayın ve Yönetim Hizmeti'ne bir hizmet başvurusu ekleyin. Yönetim Hizmeti URL'si ad alanınıza özgüdür ve aşağıdakine benzer şekilde görünür:
https:// YOURNAMESPACE.accesscontrol.windows.net/v2/mgmt/service
Aşağıdaki bildirimleri ekleyin; burada MyConsoleApplication konsol uygulamanızın adı, MyServiceReference ise hizmet başvurunuzun adıdır:
using System; using System.Collections.Generic; using System.Linq; using System.Text; 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.Security.Cryptography; using System.Security.Cryptography.X509Certificates; using MyConsoleApplication.MyServiceReference;
4. Adım – Yönetim Hizmeti İstemcisini Uygulama
Bu adımda Yönetim Hizmeti istemcisini uygularsınız.
Yönetim Hizmeti istemcisini uygulamak için
Program sınıfına aşağıdaki yöntemi ekleyin:
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 yöntemini ve yardımcı yöntemlerini oluşturmak için Program sınıfına aşağıdaki kodu ekleyin. GetTokenWithWritePermission ve yardımcıları, HTTP isteğinin Authorization üst bilgisine SWT OAuth belirtecini ekler.
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; }
5. Adım – Hizmet Kimliği Ekleme
Bu adımda, yukarıdaki adımda oluşturduğunuz Yönetim Hizmeti istemcisini kullanarak bir hizmet kimliği eklersiniz. ACS hizmet kimliği kimlik bilgisi türü olarak parola, simetrik anahtar veya X.509 sertifikası kullanabilir.
Hizmet kimliği eklemek için
Program sınıfındaki Main yöntemine aşağıdaki kodu ekleyerek Yönetim Hizmeti istemcisini başlatın:
ManagementService svc = CreateManagementServiceClient();
Aşağıdakilerden birini yapın:
Parolayla ilişkilendirilmiş bir hizmet kimliği eklemek ve değişiklikleri kaydetmek için Program sınıfındaki Main yöntemine aşağıdaki kodu ekleyin:
Not
Bu hizmet kimliğini "SampleServiceIdentity" olarak çağırabilir ve parolasını aşağıdaki kodda gösterildiği gibi "SampleServiceIdentityPassword" olarak ayarlayabilirsiniz.
string name = "SampleServiceIdentity"; string password = "SampleServiceIdentityPassword"; ServiceIdentity sid = new ServiceIdentity() { Name = name }; DateTime startDate, endDate; startDate = DateTime.UtcNow; endDate = DateTime.MaxValue; ServiceIdentityKey key = new ServiceIdentityKey() { EndDate = endDate.ToUniversalTime(), StartDate = startDate.ToUniversalTime(), Type = "Password", Usage = "Password", Value = Encoding.UTF8.GetBytes(password), DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Password", name) }; svc.AddToServiceIdentities(sid); svc.AddRelatedObject( sid, "ServiceIdentityKeys", key); svc.SaveChanges(SaveChangesOptions.Batch);
Simetrik anahtarla ilişkilendirilmiş bir hizmet kimliği eklemek ve değişiklikleri kaydetmek için Program sınıfındaki Main yöntemine aşağıdaki kodu ekleyin:
Not
Bu hizmet kimliğini "SampleServiceIdentity" olarak çağırabilir ve simetrik anahtar değerini aşağıdaki kodda gösterildiği gibi "SampleServiceIdentityPassword" olarak ayarlayabilirsiniz.
string name = "SampleServiceIdentity"; string symKey = "SampleServiceIdentitySymmetricKey"; ServiceIdentity sid = new ServiceIdentity() { Name = name }; DateTime startDate, endDate; startDate = DateTime.UtcNow; endDate = DateTime.MaxValue; ServiceIdentityKey key = new ServiceIdentityKey() { EndDate = endDate.ToUniversalTime(), StartDate = startDate.ToUniversalTime(), Type = "Symmetric", Usage = "Signing", Value = Convert.FromBase64String(symKey), DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Sym Key", name) }; svc.AddToServiceIdentities(sid); svc.AddRelatedObject( sid, "ServiceIdentityKeys", key); svc.SaveChanges(SaveChangesOptions.Batch);
X.509 sertifikasıyla ilişkili bir hizmet kimliği eklemek ve değişiklikleri kaydetmek için Program sınıfındaki Main yöntemine aşağıdaki kodu ekleyin:
Not
Bu hizmet kimliğini aşağıdaki kodda gösterildiği gibi "SampleServiceIdentity" olarak çağırabilirsiniz
Aşağıdaki kodda ,"Tam yol yerine yazın. CER dosyası", X.509 sertifikanızın tam yolunu içerir. Örneğin, ACS2ClientCertificate.cer adlı bir sertifika C:\'ye kaydedildiyse, doğru değer "C:\ ACS2ClientCertificate.cer".string name = "SampleServiceIdentity"; X509Certificate2 cert = new X509Certificate2(@"Full path to your .CER file"); ServiceIdentity sid = new ServiceIdentity() { Name = name }; DateTime startDate, endDate; startDate = cert.NotBefore.ToUniversalTime(); endDate = cert.NotAfter.ToUniversalTime(); ServiceIdentityKey key = new ServiceIdentityKey() { EndDate = endDate.ToUniversalTime(), StartDate = startDate.ToUniversalTime(), Type = "X509Certificate", Usage = "Signing", Value = cert.GetRawCertData(), DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Cert", name) }; svc.AddToServiceIdentities(sid); svc.AddRelatedObject( sid, "ServiceIdentityKeys", key); svc.SaveChanges(SaveChangesOptions.Batch);