Обмен учетными данными между iOS 8 приложениями и вебом,...
-
Upload
yandex -
Category
Technology
-
view
437 -
download
3
description
Transcript of Обмен учетными данными между iOS 8 приложениями и вебом,...
![Page 1: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/1.jpg)
![Page 2: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/2.jpg)
Kanstantsin Charnukha, Yury Vasileuski
Sharing credentials between native apps and Safari
Mobile Camp, 2 August, 2014
iOS authorization development team
![Page 3: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/3.jpg)
Content
Credentials
Sharing credentials and iOS 7
Sharing credentials and iOS 8
![Page 4: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/4.jpg)
![Page 5: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/5.jpg)
5
Credentials
![Page 6: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/6.jpg)
6
Credentials lifecycle
![Page 7: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/7.jpg)
7
UI and memory
• Secure text entry
• Dump memory with GDB and Jailbreak
![Page 8: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/8.jpg)
8
Network
• HTTPS
• Man in The Middle (MiTM)
![Page 9: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/9.jpg)
9
MiTM
• HTTPS is vulnerable to MiTM
• Credentials may leak
![Page 10: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/10.jpg)
10
SSL Pinning
• Protection against MiTM
• Connection only to known server
![Page 11: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/11.jpg)
11
Storing and sharing credentials
![Page 12: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/12.jpg)
12
Storing credentials on disk
• NSUserDefaults – Backup
– Jailbreak
– No ability to share between apps
• NSFileManager – NSFileProtectionComplete
– No passcode
– Brute force
– Jailbreak
– No ability to share between apps
• Keychain – Jailbreak
– Sharing between apps of the vendor
![Page 13: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/13.jpg)
13
Keychain
• Keychain is sqlite DB
• /private/var/Keychains/keychain-2.db
• Hardware specific key encryption
• Key is unique per device
![Page 14: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/14.jpg)
14
Keychain is vulnerable
• Physical access
• Jailbreak
• Connect over ssh
• Copy and run keychain_dumper
• Examine all of the keychain data
More info here:
http://www.securitylearn.net/tag/dump-passwords-
from-iphone-keychain/
![Page 15: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/15.jpg)
![Page 16: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/16.jpg)
Keychain allows to share credentials
Access group
![Page 17: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/17.jpg)
Sharing with keychain
• Same access group in entitlements
• $(AppIdentifierPrefix) is the first part of group ID
• $(AppIdentifierPrefix) may be retrieved
programmatically by getting or adding any item in
keychain
![Page 18: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/18.jpg)
Options to store credentials
• No credentials storage
• Store authorization token
• Store passwords in keychain
• Store x-token in keychain
![Page 19: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/19.jpg)
No credentials storage
• User enters credentials each launch
• Secure
• No credentials storage
![Page 20: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/20.jpg)
Store authorization token
• Credentials on token expiration
• High security level
![Page 21: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/21.jpg)
Store passwords in keychain
• User enters credentials only once
• Common approach
• Low security level
![Page 22: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/22.jpg)
Store x-token in keychain
• User enters credentials only once
• High security level
![Page 23: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/23.jpg)
Store x-token in keychain
• Can be used by other apps
![Page 24: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/24.jpg)
X-Token and credentials sharing
• Password is exchanged with x-token.
• Each app saves x-token to keychain.
• Secure. Password is not stored on device.
• Sharing between apps.
• Each app can exchange it for token with special
permissions.
![Page 25: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/25.jpg)
Credentials and Safari
?
![Page 26: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/26.jpg)
Safari credentials in iOS 7
![Page 27: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/27.jpg)
Safari credentials in iOS 7
• Saves
passwords
• No access to
keychain data
• No access to
cookies
![Page 28: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/28.jpg)
28
Safari credentials in iOS 7
![Page 29: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/29.jpg)
![Page 30: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/30.jpg)
WWDC 2014 topics of interest
• Shared web credentials API in Safari session 506: Your App, Your Website, and Safari
• Support of actions by Safari session 217: Creating Extensions for iOS and OS X, Part Two
![Page 31: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/31.jpg)
31
Safari credentials in iOS 8
![Page 32: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/32.jpg)
32
Sharing credentials with Safari, iOS 8
Shared web credentials API:
• Direct export to app
• Direct import from app
Actions support:
• Indirect import to Safari
• Indirect export from Safari
• Support of specific credentials
![Page 33: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/33.jpg)
Safari and native app
Safari Native app
![Page 34: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/34.jpg)
34
Safari shared web
credentials
![Page 35: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/35.jpg)
Shared shared web credentials API
void SecAddSharedWebCredential(
CFStringRef fqdn,
CFStringRef account,
CFStringRef password,
void (^completionHandler)(
CFErrorRef error));
void SecRequestSharedWebCredential(
CFStringRef fqdn,
CFStringRef account,
void (^completionHandler)(
CFArrayRef credentials,
CFErrorRef error));
![Page 36: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/36.jpg)
Shared web credentials API
void SecAddSharedWebCredential(
CFStringRef fqdn,
CFStringRef account,
CFStringRef password,
void (^completionHandler)(
CFErrorRef error));
void SecRequestSharedWebCredential(
CFStringRef fqdn,
CFStringRef account,
void (^completionHandler)(
CFArrayRef credentials,
CFErrorRef error));
![Page 37: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/37.jpg)
Account and password
• Raw credentials
• Easy to use and understand
• Easy to import from Safari to any app
• Difficult to export from “token-based” app to Safari
![Page 38: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/38.jpg)
Shared web credentials API
void SecAddSharedWebCredential(
CFStringRef fqdn,
CFStringRef account,
CFStringRef password,
void (^completionHandler)(
CFErrorRef error));
void SecRequestSharedWebCredential(
CFStringRef fqdn,
CFStringRef account,
void (^completionHandler)(
CFArrayRef credentials,
CFErrorRef error));
![Page 39: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/39.jpg)
fqdn or Fully qualified domain name
@function SecRequestSharedWebCredential
@param fqdn (Optional) Fully qualified domain name
of the website for which passwords are being
requested. If NULL is passed in this argument, the
domain name(s) listed in the calling application's
'com.apple.developer.associated-domains'
entitlement are searched implicitly.
![Page 40: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/40.jpg)
Associated domains
Domains are listed at Safari AutoFill Settings.
![Page 41: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/41.jpg)
41
Safari and native app
Safari Native app
![Page 42: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/42.jpg)
42
Associating app and web site
app #5
yandex.ru
gmail.com
facebook.com
twitter.com
app #4
facebook.com
![Page 43: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/43.jpg)
43
Associating app and web site
app #5
yandex.ru
gmail.com
facebook.com
twitter.com
app #4
facebook.com
![Page 44: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/44.jpg)
44
Associating app and web site
app #5
yandex.ru
gmail.com
facebook.com
twitter.com
yandex.ru
app #1
app #2
facebook.com app #4
facebook.com
https://domain/apple-app-site-association
gmail.com
twitter.com
app #3
app #4
![Page 45: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/45.jpg)
45
Associating app and web site
app #5
yandex.ru
gmail.com
facebook.com
twitter.com
yandex.ru
app #1
app #2
facebook.com
app #3 app #4
facebook.com
gmail.com
twitter.com
app #4
![Page 46: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/46.jpg)
46
Associating app and web site
app #5
yandex.ru
gmail.com
facebook.com
twitter.com
yandex.ru
app #1
app #2
facebook.com
app #3 app #4
facebook.com
gmail.com
twitter.com
app #4
![Page 47: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/47.jpg)
Test server setup with node.js
// missing node.js common setup
app.all('/apple-app-site-association', function(req, res,
next) {
res.setHeader('Content-Type', 'application/pkcs7-mime');
next();
});
var PORT = 8000;
var HOST = ’test.host.on.private.network.net';
var sshKey = fs.readFileSync('./certs/key.pem');
var sshCert = fs.readFileSync('./certs/cert.pem')
var https_options = {key: sshKey, cert: sshCert};
https.createServer(https_options, app).listen(PORT, HOST);
![Page 48: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/48.jpg)
Test server setup with node.js
// missing node.js common setup
app.all('/apple-app-site-association', function(req, res,
next) {
res.setHeader('Content-Type', 'application/pkcs7-mime');
next();
});
var PORT = 8000;
var HOST = ’test.host.on.private.network.net';
var sshKey = fs.readFileSync('./certs/key.pem');
var sshCert = fs.readFileSync('./certs/cert.pem')
var https_options = {key: sshKey, cert: sshCert};
https.createServer(https_options, app).listen(PORT, HOST);
![Page 49: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/49.jpg)
49
Notes on server setup
• Certificate is verified by iOS itself
• Not available on simulator
• No way to use self-signed certificate
• Self-installed certificates impacts Safari, but not
verification process
• Provide certificate signed by iOS trusted CA
• Use static domains, no local IPs.
• Apply to multiple domains
![Page 50: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/50.jpg)
50
• Multiple app prefixes (AppStore, AdHoc, Debug)
• Multiple bundles (AppStore, inhouse)
• Different certificates for every domain
// apps.json content
{"webcredentials":{"apps":["APPSTORE_PREFIX.ru.yandex.app1
", "APPSTORE_PREFIX.ru.yandex.app2"]}}
cat apps.json | openssl smime -sign –inkey certs/key.pem –
signer certs/cert.pem -noattr -nodetach -outform DER > apple-
app-site-association
apple-app-site-association
![Page 51: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/51.jpg)
User control and credential access
![Page 52: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/52.jpg)
52
Usage drawbacks
1. User-side security but poor user experience
2. User asked on every single credential access
3. No method to check account existence
4. Difficult to sync account addition and removal
![Page 53: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/53.jpg)
53
Actions and Safari
![Page 54: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/54.jpg)
54
Actions
Action is an extension point that helps users to
manipulate or view content within the context of
another app, e.g. transforming DOM within Safari.
![Page 55: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/55.jpg)
55
Empty login page within Safari
![Page 56: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/56.jpg)
56
Safari actions bar
![Page 57: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/57.jpg)
57
Custom actions within Safari
![Page 58: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/58.jpg)
58
• UIActivityViewController
• NSURL
NSString *stringURL = @"https://yandex.ru";
NSURL *pageURL = [NSURL URLWithString:stringURL];
UIActivityViewController *activityVC = [[UIActivityViewController
alloc]
initWithActivityItems:@[pageURL, stringURL]
applicationActivities:nil];
[mainVC presentViewController:activityVC
animated:YES
completion:nil];
Displaying activities within Safari
![Page 59: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/59.jpg)
59
NSExtension setup to handle Safari
• NSExtensionActivationRule
• NSExtensionActivationSupportsWebURLWithMaxCount
![Page 60: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/60.jpg)
Native app keychain credentials
![Page 61: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/61.jpg)
61
Completed login page
![Page 62: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/62.jpg)
62
NSExtension setup to access DOM
• NSExtensionAttributes
• NSExtensionJavaScriptPreprocessingFile
![Page 63: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/63.jpg)
63
• ExtensionPreprocessingJS
// PasswordHandler.js
var PasswordHandler = function() {};
PasswordHandler.prototype = {
run: function(arguments) {
...
},
finalize: function(arguments) {
...
}
};
var ExtensionPreprocessingJS = new PasswordHandler
JavaScript preprocessing file
![Page 64: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/64.jpg)
64
run: function(arguments) {
var loginInput = document.getElementsByName("login")[0]
var loginInputText = loginInput.value
var passwdInput = document.getElementsByName("passwd")[0]
var passwdInputText = passwdInput.value
arguments.completionFunction({
”login" : loginInputText, ”passwd" : passwdInputText})
}
finalize: function(arguments) {
var loginInput = document.getElementsByName("login")[0]
var loginInputText = arguments["login"]
loginInput.value = loginInputText;
var passwdInput = document.getElementsByName("passwd")[0]
var passwdInputText = arguments["passwd"]
passwdInput.value = passwdInputText
}
Getting values from DOM
![Page 65: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/65.jpg)
65
run: function(arguments) {
var loginInput = document.getElementsByName("login")[0]
var loginInputText = loginInput.value
var passwdInput = document.getElementsByName("passwd")[0]
var passwdInputText = passwdInput.value
arguments.completionFunction({
”login" : loginInputText, ”passwd" : passwdInputText})
}
finalize: function(arguments) {
var loginInput = document.getElementsByName("login")[0]
var loginInputText = arguments["login"]
loginInput.value = loginInputText;
var passwdInput = document.getElementsByName("passwd")[0]
var passwdInputText = arguments["passwd"]
passwdInput.value = passwdInputText
}
Getting values from DOM
![Page 66: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/66.jpg)
66
• NSExtensionJavaScriptFinalizeArgumentKey
• kUTTypePropertyList
NSDictionary *js =
@{NSExtensionJavaScriptFinalizeArgumentKey:
@{@"login" : self.login, @"passwd": self.passwd}};
NSItemProvider *pItem = [[NSItemProvider alloc]
initWithItem:js
typeIdentifier:(NSString *)kUTTypePropertyList];
NSExtensionItem *eItem = [[NSExtensionItem alloc] init];
eItem.attachments = @[providerItem];
[self.extensionContext
completeRequestReturningItems:@[eItem]
completionHandler:nil];
Setting values to DOM
![Page 67: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/67.jpg)
Differences
Pros:
• No server setup by default
• Custom credentials support
• Any browser and web view support
Cons:
• Not available on device by default
• More difficult to implement on client side
• No server side control by default
• Security is developer responsibility
![Page 68: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/68.jpg)
Summary
• Credentials
• Sharing credentials and iOS 7
• Sharing credentials and iOS 8
![Page 69: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/69.jpg)
Kanstantsin Charnukha,
iOS authorization
development team
Thanks
Yury Vasileuski,
![Page 70: Обмен учетными данными между iOS 8 приложениями и вебом, Константин Чернухо, Юрий Василевский](https://reader031.fdocuments.net/reader031/viewer/2022013121/54b6fcfa4a7959b42a8b45ff/html5/thumbnails/70.jpg)