iOS/OS X-kódpéldák
Fontos
A Microsoft Rights Management Service SDK 2020 márciusa előtt kiadott verziói elavultak; a korábbi verziókat használó alkalmazásokat frissíteni kell a 2020. márciusi kiadás használatához. További részletekért tekintse meg az elavulással kapcsolatos közleményt.
A Microsoft Rights Management Service SDK-hoz nem tervezünk további fejlesztéseket. Határozottan javasoljuk, hogy a besorolási, címkézési és védelmi szolgáltatásokhoz használja a Microsoft-információvédelem SDK-t.
Ez a témakör az RMS SDK iOS/OS X-verziójának fontos kódelemeit mutatja be.
Megjegyzés Az alábbi példakódban és leírásokban az MSIPC (Microsoft-információvédelem és vezérlés) kifejezéssel hivatkozunk az ügyfélfolyamatra.
A Microsoft Rights Management SDK 4.2 használata – főbb forgatókönyvek
Az alábbiakban egy nagyobb mintaalkalmazásból kiemelt Objective C-kódpéldákat láthat, amelyek az SDK megismerésének szempontjából fontos fejlesztési forgatókönyveket képviselnek. Bemutatják a Microsoft védett fájlformátumának (védett fájl) használatát, az egyéni védett fájlformátumok használatát, valamint az egyéni felhasználói felületi vezérlők használatát.
Forgatókönyv: RMS-védelemmel ellátott fájl használata
1. lépés: Hozzon létre egy MSProtectedData objektumot.
Leírás: Hozza létre az MSProtectedData objektum egy példányát a create (létrehozás) metódus használatával, amely az MSAuthenticationCallback segítségével elvégzi a szolgáltatáshitelesítést egy token beszerzése által, úgy, hogy az MSAuthenticationCallback egy példányát authenticationCallback paraméterként átadja az MSIPC API-nak. Tekintse meg a MSProtectedData protectedDataWithProtectedFile felé irányuló hívást az alábbi példakódszakaszban.
+ (void)consumePtxtFile:(NSString *)path authenticationCallback:(id<MSAuthenticationCallback>)authenticationCallback { // userId can be provided as a hint for authentication [MSProtectedData protectedDataWithProtectedFile:path userId:nil authenticationCallback:authenticationCallback options:Default completionBlock:^(MSProtectedData *data, NSError *error) { //Read the content from the ProtectedData, this will decrypt the data NSData *content = [data retrieveData]; }]; }
2. lépés: Állítsa be a hitelesítést az Active Directory Authentication Library (ADAL) használatával.
Leírás: Ebben a lépésben az MSAuthenticationCallback megvalósítása az ADAL használatával történik példaként megadott hitelesítési paraméterekkel. További információ az ADAL használatával kapcsolatban: Azure AD Authentication Library (ADAL).
// AuthenticationCallback holds the necessary information to retrieve an access token. @interface MsipcAuthenticationCallback : NSObject<MSAuthenticationCallback> @end @implementation MsipcAuthenticationCallback - (void)accessTokenWithAuthenticationParameters: (MSAuthenticationParameters *)authenticationParameters completionBlock: (void(^)(NSString *accessToken, NSError *error))completionBlock { ADAuthenticationError *error; ADAuthenticationContext* context = [ ADAuthenticationContext authenticationContextWithAuthority:authenticationParameters.authority error:&error ]; NSString *appClientId = @"com.microsoft.sampleapp"; NSURL *redirectURI = [NSURL URLWithString:@"local://authorize"]; // Retrieve token using ADAL [context acquireTokenWithResource:authenticationParameters.resource clientId:appClientId redirectUri:redirectURI userId:authenticationParameters.userId completionBlock:^(ADAuthenticationResult *result) { if (result.status != AD_SUCCEEDED) { NSLog(@"Auth Failed"); completionBlock(nil, result.error); } else { completionBlock(result.accessToken, result.error); } }]; }
3. lépés: Az MSUserPolicy objektum MSUserPolicy accessCheck metódusával ellenőrizze, hogy a felhasználó rendelkezik-e szerkesztési jogosultságokkal ehhez a tartalomhoz.
- (void)accessCheckWithProtectedData:(MSProtectedData *)protectedData { //check if user has edit rights and apply enforcements if (!protectedData.userPolicy.accessCheck(EditableDocumentRights.Edit)) { // enforce on the UI textEditor.focusableInTouchMode = NO; textEditor.focusable = NO; textEditor.enabled = NO; } }
Forgatókönyv: Új védett fájl létrehozása sablon használatával
Ez a forgatókönyv a sablonok listájának beszerzésével (MSTemplateDescriptor) kezdődik, majd az első sablon kiválasztásával létrehoz egy házirendet, végül létrehozza az új védett fájlt, és tartalmat ír abba.
1. lépés: Szerezze be a sablonok listáját.
+ (void)templateListUsageWithAuthenticationCallback:(id<MSAuthenticationCallback>)authenticationCallback { [MSTemplateDescriptor templateListWithUserId:@"user@domain.com" authenticationCallback:authenticationCallback completionBlock:^(NSArray/*MSTemplateDescriptor*/ *templates, NSError *error) { // use templates array of MSTemplateDescriptor (Note: will be nil on error) }]; }
2. lépés: Hozzon létre egy MSUserPolicy házirendet a lista első sablonjának használatával.
+ (void)userPolicyCreationFromTemplateWithAuthenticationCallback:(id<MSAuthenticationCallback>)authenticationCallback { [MSUserPolicy userPolicyWithTemplateDescriptor:[templates objectAtIndex:0] userId:@"user@domain.com" signedAppData:nil authenticationCallback:authenticationCallback options:None completionBlock:^(MSUserPolicy *userPolicy, NSError *error) { // use userPolicy (Note: will be nil on error) }]; }
3. lépés: Hozzon létre egy MSMutableProtectedData objektumot, és írja bele a kívánt tartalmat.
+ (void)createPtxtWithUserPolicy:(MSUserPolicy *)userPolicy contentToProtect:(NSData *)contentToProtect { // create an MSMutableProtectedData to write content [contentToProtect protectedDataInFile:filePath originalFileExtension:kDefaultTextFileExtension withUserPolicy:userPolicy completionBlock:^(MSMutableProtectedData *data, NSError *error) { // use data (Note: will be nil on error) }]; }
Forgatókönyv: Egyéni védett fájl megnyitása
1. lépés: Hozzon létre egy MSUserPolicy házirendet egy serializedContentPolicy házirendből.
+ (void)userPolicyWith:(NSData *)protectedData authenticationCallback:(id<MSAuthenticationCallback>)authenticationCallback { // Read header information from protectedData and extract the PL /*------------------------------------------- | PL length | PL | ContetSizeLength | -------------------------------------------*/ NSUInteger serializedPolicySize; NSMutableData *serializedPolicy; [protectedData getBytes:&serializedPolicySize length:sizeof(serializedPolicySize)]; [protectedData getBytes:[serializedPolicy mutableBytes] length:serializedPolicySize]; // Get the user policy , this is an async method as it hits the REST service // for content key and usage restrictions // userId provided as a hint for authentication [MSUserPolicy userPolicyWithSerializedPolicy:serializedPolicy userId:@"user@domain.com" authenticationCallback:authenticationCallback options:Default completionBlock:^(MSUserPolicy *userPolicy, NSError *error) { }]; }
2. lépés: Hozzon létre egy MSCustomProtectedData objektumot az MSUserPolicy segítségével, amelyet az 1. lépésben hozott létre, és olvassa ki a tartalmat.
+ (void)customProtectedDataWith:(NSData *)protectedData { // Read header information from protectedData and extract the protectedContentSize /*------------------------------------------- | PL length | PL | ContetSizeLength | -------------------------------------------*/ NSUInteger protectedContentSize; [protectedData getBytes:&protectedContentSize length:sizeof(protectedContentSize)]; // Create the MSCustomProtector used for decrypting the content // The content start position is the header length [MSCustomProtectedData customProtectedDataWithPolicy:userPolicy protectedData:protectedData contentStartPosition:sizeof(NSUInteger) + serializedPolicySize contentSize:protectedContentSize completionBlock:^(MSCustomProtectedData *customProtector, NSError *error) { //Read the content from the custom protector, this will decrypt the data NSData *content = [customProtector retrieveData]; NSLog(@"%@", content); }]; }
Forgatókönyv: Egyéni védett fájl létrehozása egyéni (alkalmi) házirend használatával
1. lépés: Hozzon létre egy házirendleírót a felhasználó által megadott e-mail-címmel.
Leírás: A gyakorlatban a következő objektumok jönnek létre az eszköz felületén megadott felhasználói adatok használatával: MSUserRights és MSPolicyDescriptor.
+ (void)policyDescriptor { MSUserRights *userRights = [[MSUserRights alloc] initWithUsers:[NSArray arrayWithObjects: @"user1@domain.com", @"user2@domain.com", nil] rights:[MSEmailRights all]]; MSPolicyDescriptor *policyDescriptor = [[MSPolicyDescriptor alloc] initWithUserRights:[NSArray arrayWithObjects:userRights, nil]]; policyDescriptor.contentValidUntil = [[NSDate alloc] initWithTimeIntervalSinceNow:NSTimeIntervalSince1970 + 3600.0]; policyDescriptor.offlineCacheLifetimeInDays = 10; }
2. lépés: Hozza létre az egyéni MSUserPolicy házirendet a selectedDescriptor házirendleíróból.
+ (void)userPolicyWithPolicyDescriptor:(MSPolicyDescriptor *)policyDescriptor { [MSUserPolicy userPolicyWithPolicyDescriptor:policyDescriptor userId:@"user@domain.com" authenticationCallback:authenticationCallback options:None completionBlock:^(MSUserPolicy *userPolicy, NSError *error) { // use userPolicy (Note: will be nil on error) }]; }
3. lépés: Hozza létre az MSMutableProtectedData objektumot, írja be a tartalmat abba, majd zárja le azt.
+ (void)mutableCustomProtectedData:(NSMutableData *)backingData policy:(MSUserPolicy *)policy contentToProtect:(NSString *)contentToProtect { //Get the serializedPolicy from a given policy NSData *serializedPolicy = [policy serializedPolicy]; // Write header information to backing data including the PL // ------------------------------------ // | PL length | PL | ContetSizeLength | // ------------------------------------- NSUInteger serializedPolicyLength = [serializedPolicy length]; [backingData appendData:[NSData dataWithBytes:&serializedPolicyLength length:sizeof(serializedPolicyLength)]]; [backingData appendData:serializedPolicy]; NSUInteger protectedContentLength = [MSCustomProtectedData getEncryptedContentLengthWithPolicy:policy contentLength:unprotectedData.length]; [backingData appendData:[NSData dataWithBytes:&protectedContentLength length:sizeof(protectedContentLength)]]; NSUInteger headerLength = sizeof(serializedPolicyLength) + serializedPolicyLength + sizeof(protectedContentLength); // Create the MSMutableCustomProtector used for encrypting content // The content start position is the current length of the backing data // The encryptedContentSize content size is 0 since there is no content yet [MSMutableCustomProtectedData customProtectorWithUserPolicy:policy backingData:backingData protectedContentOffset:headerLength completionBlock:^(MSMutableCustomProtectedData *customProtector, NSError *error) { //Append data to the custom protector, this will encrypt the data and write it to the backing data [customProtector appendData:[contentToProtect dataUsingEncoding:NSUTF8StringEncoding] error:&error]; //close the custom protector so it will flush and finalise encryption [customProtector close:&error]; }]; }