Uygulamanızı geliştirme
Önemli
Mart 2020'den önce yayımlanan Microsoft Rights Management Service SDK sürümleri kullanım dışı bırakılmıştır; önceki sürümleri kullanan uygulamaların Mart 2020 sürümünü kullanacak şekilde güncelleştirilmiş olması gerekir. Tüm ayrıntılar için kullanımdan kaldırma bildirimine bakın.
Microsoft Rights Management Service SDK'sı için başka geliştirme planlanmıyor. Sınıflandırma, etiketleme ve koruma hizmetleri için Microsoft Bilgi Koruması SDK'sının benimsenmesini kesinlikle öneririz.
Bu örnekte, Azure Information Protection hizmetiyle (AIP) etkileşimli çalışan basit bir konsol uygulaması oluşturacaksınız. Bu uygulama, korunacak belgenin yolunu giriş olacak alacak ve ardından geçici bir ilke veya Azure şablonuyla belgeyi koruyacak. Ardından uygulama, girişlere göre doğru ilkeleri uygulayacak ve bilgi korumalı belgeler oluşturacak. Kullanacağınız örnek kod Azure IP test uygulamasıdır ve Github üzerindedir.
Örnek uygulama önkoşulları
- İşletim Sistemi: Windows 10, Windows 8, Windows 7, Windows Server 2008, Windows Server 2008 R2 veya Windows Server 2012
- Programlama Dili: C# (.NET Framework 3.0 veya üstü)
- Geliştirme ortamı: Visual Studio 2015 (veya üstü)
Azure Yapılandırmanızı ayarlama
Azure’u bu uygulamaya göre ayarlamak için bir Kiracı Kimliği, Simetrik Anahtar ve Uygulama Birincil Kimliği oluşturmanız gerekir.
Azure AD Kiracısı yapılandırması
Azure Information Protection için Azure AD ortamını yapılandırmak için Azure Information Protection'dan koruma hizmetini etkinleştirme bölümündeki yönergeleri izleyin.
Hizmet etkinleştirildikten sonra, izleyen adımlar için PowerShell bileşenlerine ihtiyacınız olacak. Bunu gerçekleştirmek için PowerShell kullanarak Azure Information Protection korumasını yönetme'yi izleyin.
Kiracı Kimliğinizi alma
- PowerShell’i yönetici olarak çalıştırın.
- RMS modülünü içeri aktarın:
Import-Module AIPService
- Atanan kullanıcı kimlik bilgileriyle hizmete bağlanın:
Connect-AipService –Verbose
- RMS’nin etkinleştirildiğinden emin olun:
enable-aipservice
- Şu komutu çalıştırarak kiracı kimliğinizi alın:
Get-AipServiceConfiguration
BPOSId (kiracı kimliği) değerini kaydedin. Bu değer sonraki adımlarda gerekecektir.
Örnek çıkış
- Hizmetle bağlantıyı kesin:
Disconnect-AipServiceService
Hizmet asıl adı oluşturma
Hizmet Asıl Adı oluşturmak için bu adımları izleyin:
Hizmet asıl adı, erişim denetimi için yapılandırılan, hizmetin Microsoft Azure AD ile kimlik doğrulaması yapmasına ve Microsoft Azure AD Hak Yönetimi’ni kullanarak bilgileri korumasına olanak tanıyan kimlik bilgileridir.
- PowerShell’i yönetici olarak çalıştırın
- Şu komutu kullanarak Microsoft Azure AD modülünü içeri aktarın:
Import-Module MSOnline
- Atanan kullanıcı kimlik bilgileriyle çevrimiçi hizmetinize bağlanın:
Connect-MsolService
- Şu komutu kullanarak yeni bir hizmet asıl adı oluşturun:
New-MsolServicePrincipal
- Hizmet asıl adınız için bir ad girin
Simetrik anahtarı ve uygulama birincil kimliğini gelecekte kullanmak üzere kaydedin.
Örnek çıkış
- Uygulama birincil kimliğinizi, simetrik anahtarınızı ve kiracı kimliğinizi uygulamanın App.config dosyasına ekleyin.
Örnek App.config dosyası
- ClientID ve RedirectUri, uygulamanızı Azure'a kaydettiğinizde size sunulacaktır. Uygulamanızı Azure’a nasıl kaydedeceğiniz ve ClientID ile RedirectUri değerlerini nasıl alacağınız hakkında bilgi için bkz. Azure RMS’yi ADAL kimlik doğrulaması için yapılandırma.
Tasarım özeti
Aşağıdaki diyagramda oluşturduğunuz uygulamanın mimarisi ve süreç akışı gösterilir; adımlar aşağıda açıklanmıştır.
- Kullanıcı girişleri:
- Korunacak dosyanın yolu
- Şablon seçer ve geçici bir ilke oluşturur
- Uygulama AIP ile kimlik doğrulaması ister.
- AIP kimlik doğrulamasını onaylar
- Uygulama AIP’den şablonları ister.
- AIP önceden tanımlanmış şablonları döndürür.
- Uygulama belirtilen dosyayı verili konumda bulur.
- Uygulama dosyaya AIP koruma ilkesini uygular.
Kod nasıl çalışır
Azure IP Testi örneğinde, çözüm Iprotect.cs dosyasıyla başlar. Bur bir C# konsol uygulamasıdır ve AIP özellikli diğer tüm uygulamalar gibi main()
yönteminde gösterildiği şekilde MSIPC.dll’yi yükleyerek başlarsınız.
//Loads MSIPC.dll
SafeNativeMethods.IpcInitialize();
SafeNativeMethods.IpcSetAPIMode(APIMode.Server);
Azure bağlanmak için gereken parametreleri yükleyin
//Loads credentials for the service principal from App.Config
SymmetricKeyCredential symmetricKeyCred = new SymmetricKeyCredential();
symmetricKeyCred.AppPrincipalId = ConfigurationManager.AppSettings["AppPrincipalId"];
symmetricKeyCred.Base64Key = ConfigurationManager.AppSettings["Base64Key"];
symmetricKeyCred.BposTenantId = ConfigurationManager.AppSettings["BposTenantId"];
Konsol uygulamasında dosya yolunu sağladığınızda, uygulama dosyanın zaten şifrelenmiş olup olmadığını denetler. Yöntem, SafeFileApiNativeMethods sınıfındadır.
var checkEncryptionStatus = SafeFileApiNativeMethods.IpcfIsFileEncrypted(filePath);
Belge şifrelenmemişse, bilgi isteminde sağlanan seçimle belgeyi şifrelemeye devam eder.
if (!checkEncryptionStatus.ToString().ToLower().Contains(alreadyEncrypted))
{
if (method == EncryptionMethod1)
{
//Encrypt a file via AIP template
ProtectWithTemplate(symmetricKeyCred, filePath);
}
else if (method == EncryptionMethod2)
{
//Encrypt a file using ad-hoc policy
ProtectWithAdHocPolicy(symmetricKeyCred, filePath);
}
}
Şablon seçeneğiyle korumak için sunucudan şablon listesini almaya devam eder ve kullanıcıya belirtilecek seçeneği sağlar.
Şablonlarda değişiklik yapmadıysanız, AIP’den varsayılan şablonları alırsınız
public static void ProtectWithTemplate(SymmetricKeyCredential symmetricKeyCredential, string filePath)
{
// Gets the available templates for this tenant
Collection<TemplateInfo> templates = SafeNativeMethods.IpcGetTemplateList(null, false, true,
false, true, null, null, symmetricKeyCredential);
//Requests tenant template to use for encryption
Console.WriteLine("Please select the template you would like to use to encrypt the file.");
//Outputs templates available for selection
int counter = 0;
for (int i = 0; i < templates.Count; i++)
{
counter++;
Console.WriteLine(counter + ". " + templates.ElementAt(i).Name + "\n" +
templates.ElementAt(i).Description);
}
//Parses template selection
string input = Console.ReadLine();
int templateSelection;
bool parseResult = Int32.TryParse(input, out templateSelection);
//Returns error if no template selection is entered
if (parseResult)
{
//Ensures template value entered is valid
if (0 < templateSelection && templateSelection <= counter)
{
templateSelection -= templateSelection;
// Encrypts the file using the selected template
TemplateInfo selectedTemplateInfo = templates.ElementAt(templateSelection);
string encryptedFilePath = SafeFileApiNativeMethods.IpcfEncryptFile(filePath,
selectedTemplateInfo.TemplateId,
SafeFileApiNativeMethods.EncryptFlags.IPCF_EF_FLAG_KEY_NO_PERSIST, true, false, true, null,
symmetricKeyCredential);
}
}
}
Geçici bir ilke seçerseniz, uygulama kullanıcısının haklara sahip olacak kişilerin e-postalarını sağlaması gerekir. Bu bölümde IpcCreateLicenseFromScratch() yöntemi kullanılarak ve şablona yeni ilke uygulanarak lisans oluşturulur.
if (issuerDisplayName.Trim() != "")
{
// Gets the available issuers of rights policy templates.
// The available issuers is a list of RMS servers that this user has already contacted.
try
{
Collection<TemplateIssuer> templateIssuers = SafeNativeMethods.IpcGetTemplateIssuerList(
null,
true,
false,
false, true, null, symmetricKeyCredential);
// Creates the policy and associates the chosen user rights with it
SafeInformationProtectionLicenseHandle handle = SafeNativeMethods.IpcCreateLicenseFromScratch(
templateIssuers.ElementAt(0));
SafeNativeMethods.IpcSetLicenseOwner(handle, owner);
SafeNativeMethods.IpcSetLicenseUserRightsList(handle, userRights);
SafeNativeMethods.IpcSetLicenseDescriptor(handle, new TemplateInfo(null, CultureInfo.CurrentCulture,
policyName,
policyDescription,
issuerDisplayName,
false));
//Encrypts the file using the ad hoc policy
string encryptedFilePath = SafeFileApiNativeMethods.IpcfEncryptFile(
filePath,
handle,
SafeFileApiNativeMethods.EncryptFlags.IPCF_EF_FLAG_KEY_NO_PERSIST,
true,
false,
true,
null,
symmetricKeyCredential);
}
}
Kullanıcı etkileşimi örneği
Her şeyi oluşturduktan ve yürüttükten sonra, uygulamanın çıkışları aşağıdaki gibi görünmelidir:
Bir şifreleme yöntemi seçmeniz istenir.
Korunacak dosyaların yolunu sağlamanız istenir.
Lisans sahibinin e-postasını girmeniz istenir (bu lisans sahibinin Azure AD Kiracısı üzerinde Genel Yönetici ayrıcalıkları olmalıdır).
Dosyaya erişim haklarına sahip olacak kullanıcıların e-posta adreslerini girersiniz (e-postalar boşluklarla ayrılmalıdır).
Yetkili kullanıcılara verilecek hakları listeden seçersiniz.
Son olarak, bazı ilke meta verilerini girersiniz: ilke adı, açıklama ve veren (Azure AD Kiracı) görünen ad