An iOS Authentication Architecture for All
-
Upload
rene-cacheaux -
Category
Documents
-
view
777 -
download
6
description
Transcript of An iOS Authentication Architecture for All
![Page 1: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/1.jpg)
Get Ready1
![Page 2: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/2.jpg)
An iOS Authentication Architecture for All
How to stop reinventing the auth wheel
2
![Page 4: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/4.jpg)
PatternThere’s a
for That
4
![Page 5: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/5.jpg)
WHAT’S THE BIG DEAL?
5
![Page 6: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/6.jpg)
SpendTime
Building Features
that ROCK
6
![Page 7: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/7.jpg)
EngineerAmazingFirst Impressions
7
![Page 8: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/8.jpg)
BuildReliable
andSecure
Apps
8
![Page 9: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/9.jpg)
Meet John
9
![Page 10: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/10.jpg)
10
![Page 11: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/11.jpg)
image by adamjackson1984
11
![Page 13: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/13.jpg)
13
![Page 14: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/14.jpg)
What to Build? 14
![Page 15: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/15.jpg)
15
![Page 16: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/16.jpg)
Business Cards
16
![Page 17: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/17.jpg)
Ready, Set...17
![Page 18: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/18.jpg)
18
![Page 19: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/19.jpg)
19
![Page 20: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/20.jpg)
but then...
20
![Page 21: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/21.jpg)
21
![Page 22: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/22.jpg)
O...AUTH22
![Page 23: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/23.jpg)
Really!?23
![Page 24: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/24.jpg)
What exactly is OAuth?
24
![Page 25: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/25.jpg)
I have to use a UIWebView?!
WAIT!
25
![Page 26: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/26.jpg)
Is there a library for this??
26
![Page 27: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/27.jpg)
YESGTMOAuth, whew.
27
![Page 28: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/28.jpg)
Just Download
It!
28
![Page 29: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/29.jpg)
But then...
29
![Page 30: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/30.jpg)
Things start going wrong...
30
![Page 31: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/31.jpg)
GTMOAuth1 or 2?
31
![Page 32: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/32.jpg)
Is Linked in OAuth 1 or 2?
32
![Page 33: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/33.jpg)
BOTH?
33
![Page 34: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/34.jpg)
One Hour Later
34
![Page 35: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/35.jpg)
35
![Page 36: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/36.jpg)
Jen!
36
![Page 37: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/37.jpg)
37
![Page 38: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/38.jpg)
Jen went to CocoaConf and...
38
![Page 39: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/39.jpg)
Well...There’s a Pattern
39
![Page 40: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/40.jpg)
CocoaAuth
40
![Page 41: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/41.jpg)
AND there’s a reference implementation
41
![Page 42: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/42.jpg)
Auth Kit
42
![Page 43: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/43.jpg)
Three PatternsThree Steps
43
![Page 44: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/44.jpg)
Accounts
1 2 3Auth
ControllersAuth UI
Three PattersThree Steps
44
![Page 45: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/45.jpg)
But first...
45
![Page 46: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/46.jpg)
John chose OAuth 2for Linked in
46
![Page 47: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/47.jpg)
Why?47
![Page 48: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/48.jpg)
John chose Google’sGTMOAuth
48
![Page 49: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/49.jpg)
Why?49
![Page 50: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/50.jpg)
Back to:Three patterns
Three steps
50
![Page 51: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/51.jpg)
Accounts
1 2 3Auth
ControllersAuth UI
Three PattersThree Steps
51
![Page 52: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/52.jpg)
So we want to implement Accounts...
52
![Page 53: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/53.jpg)
First An Intro
53
![Page 54: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/54.jpg)
OAuth 2
Meet OAuth 2.0
54
![Page 55: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/55.jpg)
1st thing...
55
![Page 56: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/56.jpg)
The Access Token
image by tv
56
![Page 57: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/57.jpg)
It’s...
57
![Page 58: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/58.jpg)
Opaque58
![Page 59: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/59.jpg)
It has...
59
![Page 60: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/60.jpg)
Scopes60
![Page 61: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/61.jpg)
and it...
61
![Page 62: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/62.jpg)
Expires62
![Page 63: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/63.jpg)
That’s OAuth 2 Access Token
On to Step 1, Accounts
63
![Page 64: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/64.jpg)
Accounts
1
64
![Page 65: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/65.jpg)
If you need Auth you have user’s...
65
![Page 66: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/66.jpg)
And if you have users, you need
account management
66
![Page 67: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/67.jpg)
Accounts makes up the model layer
67
![Page 68: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/68.jpg)
3 Entities in Accounts
68
![Page 69: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/69.jpg)
1
2
3
Credentials
Accounts
Store
69
![Page 70: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/70.jpg)
1
2
3
Credentials
Accounts
Store
70
![Page 71: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/71.jpg)
@property(nonatomic, copy) NSString *accessToken;@property(nonatomic, strong) NSDate *expirationDate;
AKOAuth2AccountCredential : NSObject
71
![Page 72: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/72.jpg)
That’s all for credentials, super easy.
Accounts is next.
72
![Page 73: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/73.jpg)
1
2
3
Credentials
Accounts
Store
73
![Page 74: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/74.jpg)
@property(nonatomic, copy, readonly) NSString *identifier;@property(nonatomic, copy, readonly) NSString *username;@property(nonatomic, copy, readonly) NSString *accountType;
- (void)clearCredential;
AKAccount : NSObject
74
![Page 75: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/75.jpg)
Account Type
Subclassing
1
2
75
![Page 76: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/76.jpg)
Account Type“com.linkedin”
76
![Page 77: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/77.jpg)
Subclassing AKAccount
77
![Page 78: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/78.jpg)
Base
Auth Protocol
Library
Class Structure
78
![Page 79: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/79.jpg)
@interface AKAccount ()@property(nonatomic, copy, readwrite) NSString *identifier;
@end
@implementation AKAccount
+ (instancetype)accountWithIdentifier:(NSString *)identifier { return [[self alloc] initWithIdentifier:identifier];}
- (id)initWithIdentifier:(NSString *)identifier { self = [super init]; if (self) { _identifier = identifier; } return self;}
- (void)clearCredential { // Abstract method.}
@end
AKAccount Base
79
![Page 80: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/80.jpg)
@class AKOAuth2AccountCredential;
@interface AKOAuth2Account : AKAccount
@property(nonatomic, strong, readonly) AKOAuth2AccountCredential *OAuth2Credential;
@end
@implementation AKOAuth2Account
- (AKOAuth2AccountCredential *)OAuth2Credential { // Subclasses should implement this. They should always access // credentials from a secure store. return nil;}
@end
AKOAuth2Account
80
![Page 81: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/81.jpg)
@implementation AKGTMOAuth2Account
- (AKOAuth2AccountCredential *)OAuth2Credential { // Get credential from Google's GTMOAuth2 library.}
- (void)clearCredential { // Remove credential from storage.}
@end
AKGTMOAuth2Account
81
![Page 82: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/82.jpg)
@property(nonatomic, copy, readonly) NSString *identifier;@property(nonatomic, copy, readonly) NSString *username;@property(nonatomic, copy, readonly) NSString *accountType;
- (void)clearCredential;
AKAccount : NSObject
82
![Page 83: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/83.jpg)
1
2
3
Credentials
Accounts
Store
83
![Page 84: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/84.jpg)
+ (void)registerAccountTypeClass:(Class)accountTypeClass;
+ (instancetype)sharedStore;
- (AKAccount *)newAccount;
- (void)saveAccount:(AKAccount *)account;
- (AKAccount *)authenticatedAccount;
AKAccountStore : NSObject
84
![Page 85: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/85.jpg)
1
2
Account Ref Store
Credential Store
Implementing
85
![Page 86: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/86.jpg)
1
2
Account Ref Store
Credential Store
Implementing
86
![Page 87: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/87.jpg)
1
2
Account Ref Store
Credential Store
Implementing
87
![Page 88: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/88.jpg)
Credential Store
2
1 Keychain
Library Provided
88
![Page 89: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/89.jpg)
Keychain
1
89
![Page 90: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/90.jpg)
Library Provided Store
2
90
![Page 91: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/91.jpg)
- (AKOAuth2AccountCredential *)OAuth2Credential { AKGTMOAuth2AuthController *authController = [AKGTMOAuth2AuthController sharedController]; GTMOAuth2Authentication *auth = [authController newGTMOAuth2Authentication]; if (!auth) { return nil; } BOOL isAuthenticated = [GTMOAuth2ViewControllerTouch authorizeFromKeychainForName:authController.keychainItemName authentication:auth]; if (!isAuthenticated) { return nil; }
AKOAuth2AccountCredential *credential = [[AKOAuth2AccountCredential alloc] init]; credential.accessToken = auth.accessToken; return credential;}
GTMOAuth 2
91
![Page 92: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/92.jpg)
+ (void)registerAccountTypeClass:(Class)accountTypeClass;
+ (instancetype)sharedStore;
- (AKAccount *)newAccount;
- (void)saveAccount:(AKAccount *)account;
- (AKAccount *)authenticatedAccount;
AKAccountStore : NSObject
92
![Page 93: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/93.jpg)
Accounts, done.
Next pattern, #2
93
![Page 94: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/94.jpg)
Auth Controller
2
94
![Page 95: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/95.jpg)
Before looking at Auth Controller...
95
![Page 96: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/96.jpg)
More OAuth2
Fun
96
![Page 97: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/97.jpg)
The Actors
Client
Authorization Server
Resource Server
97
![Page 98: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/98.jpg)
The Client
APP
98
![Page 99: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/99.jpg)
Authorization Server99
![Page 100: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/100.jpg)
Resource Server100
![Page 101: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/101.jpg)
Before you can authenticate against an API’s OAuth you
have to ...
101
![Page 102: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/102.jpg)
Register the Client102
![Page 103: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/103.jpg)
Linked in103
![Page 104: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/104.jpg)
And that gives you:
104
![Page 105: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/105.jpg)
Client ID105
![Page 106: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/106.jpg)
Client Secret106
![Page 107: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/107.jpg)
That’s it. The Basics.
107
![Page 108: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/108.jpg)
image by Damien Erambert
2Auth Controller
108
![Page 109: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/109.jpg)
If you have auth...
109
![Page 110: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/110.jpg)
You have a login...
110
![Page 111: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/111.jpg)
If you have login,UIKit has to launch
a login flow.
111
![Page 112: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/112.jpg)
Something has to be in control, no?
112
![Page 113: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/113.jpg)
2 Protocols
113
![Page 114: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/114.jpg)
- (void)beginAuthenticationAttempt;
- (void)unauthenticateAccount:(AKAccount *)account;
<AKAuthControl>
- (void)presentAKLoginViewController:(UIViewController *)viewController;
- (void)authControllerAccount:(AKAccount *)account didAuthenticate:(id<AKAuthControl>)authController;
- (void)authControllerAccount:(AKAccount *)account didUnauthenticate:(id<AKAuthControl>)authController;
<AKAuthHandler>
114
![Page 115: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/115.jpg)
Now the star of the show,
AKAuthController
115
![Page 116: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/116.jpg)
@property(nonatomic, weak) id<AKAuthHandler> authHandler;
+ (instancetype)sharedController;
AKAuthController : NSObject<AKAuthControl>
it’s abstract116
![Page 117: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/117.jpg)
Simple
117
![Page 118: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/118.jpg)
How does it work?
118
![Page 119: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/119.jpg)
1
2
3
The Flows
Linkedin Auth Controller
Calling Linkedin API
119
![Page 120: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/120.jpg)
The Flows120
![Page 121: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/121.jpg)
id <AKAuthHandler> AKAuthController Login UIViewController
beginAuthenticationAttempt
initialize
presentAKLoginViewController:
user authenticated
authControllerAccount:didAuthenticate:
Login View Flow
121
![Page 122: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/122.jpg)
Authenticated Flowid <AKAuthHandler> AKAuthController
beginAuthenticationAttempt
authControllerAccount:didAuthenticate:
122
![Page 123: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/123.jpg)
Bounce Back Flowid <AKAuthHandler> AKAuthController Safari
beginAuthenticationAttempt
open URL
user authenticated
authControllerAccount:didAuthenticate:
App Delegate
open URL
123
![Page 124: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/124.jpg)
So, the Linked in Auth Controller
124
![Page 125: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/125.jpg)
But first...
125
![Page 126: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/126.jpg)
Last OAuth 2 Lesson
126
![Page 127: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/127.jpg)
The Grant
The Access Token (Part 2)
Two Steps
1
2
127
![Page 128: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/128.jpg)
The Grant128
![Page 129: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/129.jpg)
Yes, there IS another token.
129
![Page 130: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/130.jpg)
Auth Code
Browser
The Request
The Redirect
130
![Page 131: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/131.jpg)
Browser
131
![Page 132: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/132.jpg)
The Request
132
![Page 133: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/133.jpg)
Client Browser Auth Server
Auth Code Request URL
Auth Code GET Request
Redirect URL with Auth Code
Redirect URL with Auth Code
HTML Flow
133
![Page 134: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/134.jpg)
Query String Params
https://www.linkedin.com/uas/oauth2/authorization
?response_type=code &client_id=YOUR_API_KEY &scope=SCOPE &state=STATE &redirect_uri=YOUR_REDIRECT_URI
134
![Page 135: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/135.jpg)
The Redirect
135
![Page 136: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/136.jpg)
Client Browser Auth Server
Auth Code Request URL
Auth Code GET Request
Redirect URL with Auth Code
Redirect URL with Auth Code
HTML Flow
136
![Page 137: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/137.jpg)
And now, get the Auth Code...
137
![Page 138: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/138.jpg)
It’s in the redirect URL query string.
YOUR_REDIRECT_URI/?code=AUTHORIZATION_CODE
138
![Page 139: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/139.jpg)
So that’s the Auth Code Grant
139
![Page 140: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/140.jpg)
Now, it’s time for some more Access
Token fun.
140
![Page 141: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/141.jpg)
The Access Token141
![Page 142: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/142.jpg)
Now that I have an Auth Code...
142
![Page 143: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/143.jpg)
How do I get an Access Token?
143
![Page 144: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/144.jpg)
Request
Response
144
![Page 145: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/145.jpg)
Request
145
![Page 146: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/146.jpg)
Client Auth Server
Access Token POST Request with Auth Code
JSON with Access Token
146
![Page 147: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/147.jpg)
Query String Params
https://www.linkedin.com/uas/oauth2/accessToken
?grant_type=authorization_code &code=AUTHORIZATION_CODE &redirect_uri=YOUR_REDIRECT_URI &client_id=YOUR_API_KEY &client_secret=YOUR_SECRET_KEY
147
![Page 148: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/148.jpg)
Response
148
![Page 149: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/149.jpg)
Client Auth Server
Access Token POST Request with Auth Code
JSON with Access Token
149
![Page 150: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/150.jpg)
Payload
{ "expires_in":5184000, "access_token":"AQXdSP_W41_UPs5ioT_t8HESyODB4FqbkJ8LrV_5mf f4gPODzOYR"}
150
![Page 151: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/151.jpg)
So that’s how you get an Access Token
151
![Page 152: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/152.jpg)
Back to... Linked in Auth Controller
152
![Page 153: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/153.jpg)
Base
Auth Protocol
Library
AKAuthController
AKGTMOAuth2AuthController
MALinkedInAuthController
Subclass Structure
153
![Page 154: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/154.jpg)
Using GTMOAuth2
154
![Page 155: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/155.jpg)
Code Demo
155
![Page 156: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/156.jpg)
We now have an Access token in the
Keychain
156
![Page 157: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/157.jpg)
Time to make some API Calls
157
![Page 158: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/158.jpg)
Calling the Linked in API
158
![Page 159: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/159.jpg)
Getting Access Token from Account Store
Using the Access Token
Handling Bad Token Responses
1
23
159
![Page 160: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/160.jpg)
Getting Access Token
1
160
![Page 161: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/161.jpg)
Using Access Token
2
161
![Page 162: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/162.jpg)
Client Resource Server
API Request with Access Token
Protected Resource
162
![Page 163: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/163.jpg)
Code Demo
163
![Page 164: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/164.jpg)
FINALLY! API Calls
164
![Page 165: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/165.jpg)
Bad Token
3
165
![Page 166: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/166.jpg)
Get Auth Controller
166
![Page 167: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/167.jpg)
Client Resource Server
API Request with Access Token
Bad Token
AKAuthController
Unauthenticate Account
167
![Page 168: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/168.jpg)
Log Out Account168
![Page 169: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/169.jpg)
And... Wait How will the app react?
169
![Page 170: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/170.jpg)
That’s where Auth UI comes in.
170
![Page 171: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/171.jpg)
Auth UI
3
171
![Page 172: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/172.jpg)
Container View Controller
172
![Page 173: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/173.jpg)
Application Container View Controller
Unauthenticated View Controller
Authenticated View Controller
173
![Page 174: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/174.jpg)
1
2
3
Children View Controllers
Installation
Flows
174
![Page 175: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/175.jpg)
Children
175
![Page 176: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/176.jpg)
Installation
176
![Page 177: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/177.jpg)
Code Demo
177
![Page 178: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/178.jpg)
Flows
178
![Page 179: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/179.jpg)
Log In
179
![Page 180: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/180.jpg)
Container Auth ControllerChild Controller
beginAuthenticationAttempt
beginAuthenticationAttempt
authControllerAccount:didAuthenticate:
transition into authenticated view controller
180
![Page 181: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/181.jpg)
Log Out
181
![Page 182: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/182.jpg)
Container Auth ControllerChild Controller
authControllerAccount:didUnauthenticate:
transition into unauthenticated view controller
182
![Page 183: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/183.jpg)
That’s AuthUI
183
![Page 184: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/184.jpg)
Whew! Those are the
Patterns
184
![Page 185: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/185.jpg)
Back in SFO...
185
![Page 186: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/186.jpg)
image by adamjackson1984
186
![Page 187: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/187.jpg)
187
![Page 188: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/188.jpg)
And the winner is...
188
![Page 189: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/189.jpg)
189
![Page 190: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/190.jpg)
190
![Page 191: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/191.jpg)
10 years later...
191
![Page 192: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/192.jpg)
192
![Page 193: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/193.jpg)
John opens a hookah bar...
193
![Page 194: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/194.jpg)
YES...a hookah bar
194
![Page 195: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/195.jpg)
and
195
![Page 196: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/196.jpg)
JUST MARRIED!
196
![Page 197: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/197.jpg)
The End
197
![Page 198: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/198.jpg)
So what’s the point?
198
![Page 199: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/199.jpg)
Auth Sucks
199
![Page 200: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/200.jpg)
Auth Takes Time
200
![Page 201: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/201.jpg)
It gets in the way
201
![Page 202: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/202.jpg)
TIMEDon’t spend
on auth
202
![Page 203: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/203.jpg)
FeaturesSpend time on
203
![Page 204: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/204.jpg)
Benefits
204
![Page 205: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/205.jpg)
Save Time and
Effort
205
![Page 206: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/206.jpg)
Consistent Interface
206
![Page 207: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/207.jpg)
It’s simple
207
![Page 208: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/208.jpg)
Future
208
![Page 209: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/209.jpg)
Future of iOS
209
![Page 210: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/210.jpg)
Future of CocoaAuth
&Auth Kit
210
![Page 211: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/211.jpg)
Resources
211
![Page 212: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/212.jpg)
/RCacheaux/AuthKit
212
![Page 214: An iOS Authentication Architecture for All](https://reader036.fdocuments.net/reader036/viewer/2022081516/5463af9baf795997368b4588/html5/thumbnails/214.jpg)
214