SAP sicher mobil nutzen – Teil 2

Blog-Featureimage-Database Technology-20140818

Wie im ersten Teil meines Blogs angekündigt, erkläre ich Ihnen in diesem Teil die Verwendbarkeit von TouchID und SAP DataVault. Viel Spaß beim Lesen!

Wie nutze ich TouchID und den SAP DataVault?
Die Funktionen von TouchID kann man sehr einfach nutzten, da es, wie im ersten Teil des Blogs bereits erwähnt, nur ein eingeschränktes Interface bietet:

// Initialisierung
LAContext *myContext = [[LAContext alloc] init];
NSError *authError = nil;
NSString *myLocalizedReasonString = @“Authenticate using your finger“;

// Fingerabdruck erkannt
if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError]){
[myContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
localizedReason:myLocalizedReasonString
reply:^(BOOL succes, NSError *error) {
if (succes) {
[NSThread  detachNewThreadSelector:@selector(loginSuccesfulWithTouchID)
toTarget:self
withObject:nil];
NSLog(@“User is authenticated successfully“);
} else {
switch (error.code) {
case LAErrorAuthenticationFailed:
[NSThread detachNewThreadSelector:@selector(authenticationFailed)
toTarget:self
withObject:nil];
NSLog(@“Authentication Failed“);
break;
case LAErrorUserCancel:
[NSThread detachNewThreadSelector:@selector(userPressedCancelButton)
toTarget:self
withObject:nil];
NSLog(@“User pressed Cancel button“);
break;
case LAErrorUserFallback:
[NSThread detachNewThreadSelector:@selector(userPressedEnterPasswordButton)
toTarget:self
withObject:nil];
NSLog(@“User pressed \“Enter Password\““);
break;
default:
[NSThread detachNewThreadSelector:@selector(touchIDIsNotConfigured)
toTarget:self
withObject:nil];
NSLog(@“Touch ID is not configured“);
break;
}

NSLog(@“Authentication Fails“);
}
}];
} else {
[NSThread detachNewThreadSelector:@selector(userPressedEnterPasswordButton)
toTarget:self
withObject:nil];
NSLog(@“Can not evaluate Touch ID“);
}

Wenn der Fingerabdruck erkannt wurde gibt es zwei Möglichkeiten. Der Fingerabdruck ist identisch mit dem gespeicherten und die Variable succes wird auf YES gesetzt oder der weicht von diesem ab, in diesem Fall wird der Else Teil aufgerufen. Dort werden über den Error Code in einer Switch Case Anweisung die verschiedenen Fehler abgearbeitet.

Damit die Apple Schlüsselbundverwaltung genutzt werden kann, werden zwei Methoden implementiert: Die „InsertKeyandValue“ Methode und die „findDataForKey“ Methode. Beide Methoden benutzen ein NSMutableDictionary, das mit der Schlüsselbundverwaltung verbunden ist.

-(NSMutableDictionary*) prepareDict:(NSString *) key
{
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass];

NSData *encodedKey = [key dataUsingEncoding:NSUTF8StringEncoding];
[dict setObject:encodedKey forKey:(__bridge id)kSecAttrGeneric];
[dict setObject:encodedKey forKey:(__bridge id)kSecAttrAccount];
[dict setObject:internService forKey:(__bridge id)kSecAttrService];
[dict setObject:(__bridge id)kSecAttrAccessibleAlwaysThisDeviceOnly forKey:(__bridge id)kSecAttrAccessible];

//This is for sharing data across apps
if(internGroup != nil)
[dict setObject:internGroup forKey:(__bridge id)kSecAttrAccessGroup];
return dict;
}

Die Methode „prepareDict“ gibt das Dictionary für die Schlüsselbundverwaltung wieder. Wichtig ist, dass die Variable internService gesetzt wird. Mit der Variable internGroup kann die Schlüsselbundverwaltung von mehreren Apps genutzt werden.

-(BOOL) insertKey:(NSString *)key andValue:(NSData *)data
{
NSMutableDictionary * dict =[self prepareDict:key];
[dict setObject:data forKey:(__bridge id)kSecValueData];

OSStatus status = SecItemAdd((__bridge CFDictionaryRef)dict, NULL);
if(errSecSuccess != status) {
NSLog(@“Unable add item with key =%@ error:%ld“,key,(long)status);
}
return (errSecSuccess == status);
}

Die Methode „InsertKeyandValue” fügt ein neues Key-Value Paar der Schlüsselbundverwaltung hinzu.

-(NSData*) findDataForKey:(NSString*)key
{
NSMutableDictionary *dict = [self prepareDict:key];
[dict setObject:(__bridge id)kSecMatchLimitOne forKey:(__bridge id)kSecMatchLimit];
[dict setObject:(id)kCFBooleanTrue forKey:(__bridge id)kSecReturnData];
CFTypeRef result = NULL;
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)dict,&result);

if( status != errSecSuccess) {
NSLog(@“Unable to fetch item for key %@ with error:%ld“,key,(long)status);
return nil;
}
return (__bridge NSData *)result;
}

Die Methode „findDataForKey” findet den passend Value aus der Schlüsselbundverwaltung für den mitgegebenen Key.

TouchID in Action

Schon heute können sie gerne die hier beschriebenen Funktionen von TouchID in der aktuellen it.mobile InfoCollector App testen.

Fazit
Die Verwendung von TouchID ist für den Anwender sehr einfach und spart Zeit. Das Interface erlaubt weiterhin die Eingabe von Passwörtern und erkennt, wenn der Benutzer TouchID nicht konfiguriert hat. Wie sicher TouchID ist, wird sich in der Zukunft herausstellen.

Meine persönliche Meinung: „Ich denke, Apple hat da ein gutes System entworfen, was sicherlich schwerer zu „knacken“ ist als viele Passwörter der Benutzer, wenn überhaupt eins vorhanden ist. Dennoch sollte man Apple nicht blind vertrauen. Aus diesem Grund würde ich meinen Schlüsselbund mit Passwörtern nicht in der iCloud speichern und diese Option in den Einstellungen des iOS deaktivieren.“

– von Constantin Frhr. Teuffel von Birkensee, Beratung / Consulting, itelligence AG –

Immer auf dem Laufenden bleiben! Mit unserem “Schon gehört?” Newsletter sind Sie immer bestens informiert. Sie erhalten stets aktuelle Produkt- und Beratungsinformationen zu itelligence Lösungen und SAP Produkten sowie Neuigkeiten aus unserem Servicecenter. Jetzt kostenlos und unverbindlich anmelden.

Ähnliche Beiträge

NTT_DATA-Business-Solutions-690x180
Lesen Sie mehr
blog_featured image_simplification1
Lesen Sie mehr
Blogbild_Scrum
Lesen Sie mehr
Image_Gears-on-Digital-Background-690x180
Lesen Sie mehr
Blogbild_Alain-1
Lesen Sie mehr
Feature_Image-Experience-NewOpportunities-690x180
Lesen Sie mehr
Folgen Sie uns: