Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Split authority #151

Merged
merged 58 commits into from
Sep 12, 2018
Merged
Show file tree
Hide file tree
Changes from 55 commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
e84b227
Split authorities.
antrix1989 Jun 23, 2018
263cf6f
Merge branch 'dev' into sedemche/split_authorities
antrix1989 Jun 23, 2018
e4e2bc3
Fixes after merge conflict.
antrix1989 Jun 23, 2018
94b7545
Refactor MSIDAadAuthorityCache.
antrix1989 Jun 25, 2018
d4b1ded
Use MSIDAuthority in MSIDAccount.
antrix1989 Jun 25, 2018
346dd15
Uncomment MSIDAADAuthorityTests.
antrix1989 Jun 25, 2018
14a75fe
Normalize MSIDADFSAuthority.
antrix1989 Jun 25, 2018
3f3f925
Use universal url in cacheUrlWithContext.
antrix1989 Jun 25, 2018
77ee6d3
Use universal url in cacheAliases.
antrix1989 Jun 25, 2018
12739ce
Code cleaning.
antrix1989 Jun 25, 2018
423d24f
Merge branch 'dev' into sedemche/split_authorities
antrix1989 Jun 27, 2018
7d57ca4
Fixes after merge.
antrix1989 Jun 27, 2018
5ade21d
Fix project file.
antrix1989 Jul 3, 2018
b6ef418
Rename DRS enum.
antrix1989 Jul 3, 2018
8f245a9
Remove commented code.
antrix1989 Jul 3, 2018
374a7b9
Fix DRS discovery request.
antrix1989 Jul 3, 2018
33a5041
Support NSCopying in MSIDCache.
antrix1989 Jul 3, 2018
ee537b0
Fill in the error.
antrix1989 Jul 3, 2018
10a8ada
Pass host instead of url in aadAuthorityWithEnvironment.
antrix1989 Jul 3, 2018
7ac3f98
Removed cache from public properties.
antrix1989 Jul 4, 2018
fe02792
Fix unit tests.
antrix1989 Jul 4, 2018
d5457e3
Remove cacheURLForAuthority from factories.
antrix1989 Jul 4, 2018
d06fd38
Use MSIDAuthority in MSIDConfiguration.
antrix1989 Jul 4, 2018
4f7642e
Change storageAuthority type to MSIDAuthority.
antrix1989 Jul 4, 2018
eea6019
Code cleaning.
antrix1989 Jul 4, 2018
fa1d573
Merge branch 'sedemche/split_authorities' of github.com:AzureAD/micro…
antrix1989 Jul 4, 2018
50aa997
Save authority metadata in property.
antrix1989 Jul 5, 2018
8d320a5
Refactor authorities.
antrix1989 Jul 6, 2018
18255d8
Configure MSIDOpenIdConfigurationInfoRequest.
antrix1989 Jul 6, 2018
e032078
Fix issue with nil metadata in authority.
antrix1989 Jul 6, 2018
5fd5f21
Move out logic for detecting known host from MSIDAuthority to MSIDAAD…
antrix1989 Jul 10, 2018
e45ed5d
Add legacyCacheRefreshTokenLookupAliases to authorities.
antrix1989 Jul 12, 2018
ee20e42
Remove isTenantless.
antrix1989 Jul 12, 2018
b7b7c2a
Reuse authority factory.
antrix1989 Jul 13, 2018
8063c50
Remove isKnownHost from MSIDAuthority.
antrix1989 Jul 13, 2018
ca446c4
Remove trustedHosts method from MSIDAuthority.
antrix1989 Jul 13, 2018
0812464
Merge branch 'dev' into sedemche/split_authorities
antrix1989 Jul 13, 2018
3d1d0a6
Merge branch 'dev' into sedemche/split_authorities
antrix1989 Sep 5, 2018
d2a1d30
Fix list of known hosts.
antrix1989 Sep 6, 2018
1991882
Remove cacheURLForAuthority from MSIDOauth2Factory.
antrix1989 Sep 6, 2018
9ccc679
Remove legacyRefreshTokenLookupAuthorities from MSIDOauth2Factory.
antrix1989 Sep 6, 2018
666c64b
Remove legacyAccessTokenLookupAuthorities from MSIDOauth2Factory.
antrix1989 Sep 6, 2018
1434eb0
Code cleaning.
antrix1989 Sep 6, 2018
c0b00df
Rename authorityType -> telemetryAuthorityType.
antrix1989 Sep 6, 2018
11d74cc
Copy openIdConfigurationEndpoint.
antrix1989 Sep 6, 2018
2785096
Remove intitializer with url & tenant from base MSIDAuthroity class.
antrix1989 Sep 7, 2018
ff5e718
Fix validating MSIDADFSAuthority in MSIDAuthorityFactory.
antrix1989 Sep 7, 2018
26ebba1
Refactor MSIDAuthorityFactory.
antrix1989 Sep 7, 2018
94a7622
Provide underlyingError in MSIDAuthorityFactory during authority pars…
antrix1989 Sep 7, 2018
8985b65
Add 'environment' property to authority class.
antrix1989 Sep 7, 2018
5bbda28
Merge branch 'dev' into sedemche/split_authorities
antrix1989 Sep 8, 2018
c9e0945
Verify for nil authority.
antrix1989 Sep 8, 2018
5f33aa3
Fixed default accessor with authority aliases
oldalton Sep 9, 2018
1308a1b
Fixed duplicate file issues
oldalton Sep 9, 2018
c517b89
Fixed automation with new authorities
oldalton Sep 9, 2018
9b30681
Use authority factory in credential helper.
antrix1989 Sep 10, 2018
b14ff46
Merge from sedemche/split_authorities
oldalton Sep 10, 2018
bbcb8c6
Merge pull request #225 from AzureAD/oldalton/authority_aliases_fixes
oldalton Sep 10, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
317 changes: 281 additions & 36 deletions IdentityCore/IdentityCore.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

39 changes: 39 additions & 0 deletions IdentityCore/src/MSIDAADNetworkConfiguration.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// Copyright (c) Microsoft Corporation.
// All rights reserved.
//
// This code is licensed under the MIT License.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files(the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions :
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

#import <Foundation/Foundation.h>
#import "MSIDAADEndpointProviding.h"

@interface MSIDAADNetworkConfiguration : NSObject

@property (class, nullable) MSIDAADNetworkConfiguration *defaultConfiguration;

@property (nonatomic, nonnull) id<MSIDAADEndpointProviding> endpointProvider;

@property (nonatomic, nullable) NSString *aadApiVersion;

@property (nonatomic, nullable) NSString *aadAuthorityDiscoveryApiVersion;

@property (nonatomic, nullable) NSString *drsDiscoveryApiVersion;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When do we use DRS for AAD authority validation?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we don't use it for AAD, it is for ADFS authority validation.


@end
62 changes: 62 additions & 0 deletions IdentityCore/src/MSIDAADNetworkConfiguration.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// Copyright (c) Microsoft Corporation.
// All rights reserved.
//
// This code is licensed under the MIT License.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files(the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions :
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

#import "MSIDAADNetworkConfiguration.h"
#import "MSIDAADEndpointProvider.h"

static MSIDAADNetworkConfiguration *s_defaultConfiguration;

@implementation MSIDAADNetworkConfiguration

+ (void)initialize
{
if (self == [MSIDAADNetworkConfiguration self])
{
s_defaultConfiguration = [MSIDAADNetworkConfiguration new];
}
}

- (instancetype)init
{
self = [super init];
if (self)
{
_endpointProvider = [MSIDAADEndpointProvider new];
_aadAuthorityDiscoveryApiVersion = @"1.1";
_drsDiscoveryApiVersion = @"1.0";
}

return self;
}

+ (MSIDAADNetworkConfiguration *)defaultConfiguration
{
return s_defaultConfiguration;
}

+ (void)setDefaultConfiguration:(MSIDAADNetworkConfiguration *)defaultConfiguration
{
s_defaultConfiguration = defaultConfiguration;
}

@end
28 changes: 28 additions & 0 deletions IdentityCore/src/MSIDADFSType.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// Copyright (c) Microsoft Corporation.
// All rights reserved.
//
// This code is licensed under the MIT License.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files(the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions :
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

typedef NS_ENUM(NSInteger, MSIDADFSType)
{
MSIDADFSTypeOnPrems,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: OnPrems -> OnPrem

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

MSIDADFSTypeCloud
Copy link
Member

@oldalton oldalton Jun 28, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's rename MSIDADFSTypeCloud to something more appropriate

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

};
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,22 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

#import "MSIDAadAuthorityCache.h"
#import <Foundation/Foundation.h>

@interface MSIDAadAuthorityCache (TestUtil)
NS_ASSUME_NONNULL_BEGIN

- (NSDictionary<NSString *, MSIDAadAuthorityCacheRecord *> *)recordMap;
- (void)setRecordMap:(NSDictionary<NSString *, MSIDAadAuthorityCacheRecord *> *)cacheDictionary;
@interface MSIDCache <KeyType, ObjectType> : NSObject

- (BOOL)grabReadLock;
- (BOOL)grabWriteLock;
- (BOOL)tryWriteLock;
- (BOOL)unlock;
- (nullable ObjectType)objectForKey:(KeyType)key;

- (void)clear;
- (void)setObject:(ObjectType)obj forKey:(KeyType)key;

- (void)removeObjectForKey:(KeyType)key;

- (void)removeAllObjects;

- (NSUInteger)count;

@end

NS_ASSUME_NONNULL_END
90 changes: 90 additions & 0 deletions IdentityCore/src/MSIDCache.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
// Copyright (c) Microsoft Corporation.
// All rights reserved.
//
// This code is licensed under the MIT License.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files(the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions :
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

#import "MSIDCache.h"

@interface MSIDCache ()

@property (nonatomic) NSMutableDictionary *container;
@property (nonatomic) dispatch_queue_t synchronizationQueue;

@end

@implementation MSIDCache

- (instancetype)init
{
if (!(self = [super init]))
{
return nil;
}

NSString *queueName = [NSString stringWithFormat:@"com.microsoft.msidcache-%@", [NSUUID UUID].UUIDString];
_synchronizationQueue = dispatch_queue_create([queueName cStringUsingEncoding:NSASCIIStringEncoding], DISPATCH_QUEUE_CONCURRENT);
_container = [NSMutableDictionary new];

return self;
}

- (id)objectForKey:(id)key
{
__block id object;
dispatch_sync(self.synchronizationQueue, ^{
object = [self.container objectForKey:key];
});

return object;
}

- (void)setObject:(id)obj forKey:(id)key
{
dispatch_barrier_sync(self.synchronizationQueue, ^{
[self.container setObject:obj forKey:key];
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you fixed this to use subscript in another PR?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, it was fixed in another PR.

});
}

- (void)removeObjectForKey:(id)key
{
dispatch_barrier_sync(self.synchronizationQueue, ^{
[self.container removeObjectForKey:key];
});
}

- (void)removeAllObjects
{
dispatch_barrier_sync(self.synchronizationQueue, ^{
[self.container removeAllObjects];
});
}

- (NSUInteger)count
{
__block NSUInteger count = 0;
dispatch_sync(self.synchronizationQueue, ^{
count = self.container.allKeys.count;
});

return count;
}

@end
5 changes: 2 additions & 3 deletions IdentityCore/src/MSIDOAuth2Constants.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@ extern NSString *const MSID_OAUTH2_AUTHORIZATION;
extern NSString *const MSID_OAUTH2_AUTHORIZATION_CODE;
extern NSString *const MSID_OAUTH2_AUTHORIZATION_URI;
extern NSString *const MSID_OAUTH2_AUTHORITY;
extern NSString *const MSID_OAUTH2_AUTHORIZE_SUFFIX;
Copy link
Member

@oldalton oldalton Sep 5, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

those constants are still used in ADAL. Please revert removal...

extern NSString *const MSID_OAUTH2_V2_AUTHORIZE_SUFFIX;
extern NSString *const MSID_OAUTH2_BEARER;
extern NSString *const MSID_OAUTH2_CLIENT_ID;
extern NSString *const MSID_OAUTH2_CLAIMS;
Expand All @@ -45,7 +43,6 @@ extern NSString *const MSID_OAUTH2_SCOPE;
extern NSString *const MSID_OAUTH2_STATE;
extern NSString *const MSID_OAUTH2_SUB_ERROR;
extern NSString *const MSID_OAUTH2_TOKEN;
extern NSString *const MSID_OAUTH2_TOKEN_SUFFIX;
extern NSString *const MSID_OAUTH2_INSTANCE_DISCOVERY_SUFFIX;
extern NSString *const MSID_OAUTH2_TOKEN_TYPE;
extern NSString *const MSID_OAUTH2_LOGIN_HINT;
Expand Down Expand Up @@ -117,3 +114,5 @@ extern NSString *const MSID_REFRESH_TOKEN_CACHE_TYPE;
extern NSString *const MSID_LEGACY_TOKEN_CACHE_TYPE;
extern NSString *const MSID_ID_TOKEN_CACHE_TYPE;
extern NSString *const MSID_GENERAL_TOKEN_CACHE_TYPE;

extern NSString *const MSID_OPENID_CONFIGURATION_SUFFIX;
6 changes: 3 additions & 3 deletions IdentityCore/src/MSIDOAuth2Constants.m
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,10 @@
// THE SOFTWARE.

#import "MSIDOAuth2Constants.h"
#import "MSIDAADNetworkConfiguration.h"

NSString *const MSID_OAUTH2_ACCESS_TOKEN = @"access_token";
NSString *const MSID_OAUTH2_AUTHORIZATION = @"authorization";
NSString *const MSID_OAUTH2_AUTHORIZE_SUFFIX = @"/oauth2/authorize";
NSString *const MSID_OAUTH2_V2_AUTHORIZE_SUFFIX = @"/oauth2/v2.0/authorize";
NSString *const MSID_OAUTH2_AUTHORITY = @"authority";
NSString *const MSID_OAUTH2_AUTHORIZATION_CODE = @"authorization_code";
NSString *const MSID_OAUTH2_AUTHORIZATION_URI = @"authorization_uri";
Expand All @@ -47,7 +46,6 @@
NSString *const MSID_OAUTH2_STATE = @"state";
NSString *const MSID_OAUTH2_SUB_ERROR = @"sub_error";
NSString *const MSID_OAUTH2_TOKEN = @"token";
NSString *const MSID_OAUTH2_TOKEN_SUFFIX = @"/oauth2/token";
NSString *const MSID_OAUTH2_INSTANCE_DISCOVERY_SUFFIX = @"common/discovery/instance";
NSString *const MSID_OAUTH2_TOKEN_TYPE = @"token_type";
NSString *const MSID_OAUTH2_LOGIN_HINT = @"login_hint";
Expand Down Expand Up @@ -118,3 +116,5 @@
NSString *const MSID_LEGACY_TOKEN_CACHE_TYPE = @"legacysingleresourcetoken";
NSString *const MSID_ID_TOKEN_CACHE_TYPE = @"idtoken";
NSString *const MSID_GENERAL_TOKEN_CACHE_TYPE = @"token";

NSString *const MSID_OPENID_CONFIGURATION_SUFFIX = @".well-known/openid-configuration";
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
#import "MSIDDefaultAccountCacheQuery.h"
#import "MSIDAccountIdentifier.h"
#import "MSIDTelemetry+Cache.h"
#import "MSIDAuthority.h"

@interface MSIDDefaultTokenCacheAccessor()
{
Expand Down Expand Up @@ -750,7 +751,7 @@ - (BOOL)saveAccount:(MSIDAccount *)account

MSIDTelemetryCacheEvent *event = [MSIDTelemetry startCacheEventWithName:MSID_TELEMETRY_EVENT_TOKEN_CACHE_WRITE context:context];
MSIDAccountCacheItem *cacheItem = account.accountCacheItem;
cacheItem.environment = [_factory cacheEnvironmentFromEnvironment:account.authority.msidHostWithPortIfNecessary context:context];
cacheItem.environment = [_factory cacheEnvironmentFromEnvironment:account.authority.url.msidHostWithPortIfNecessary context:context];

BOOL result = [_accountCredentialCache saveAccount:cacheItem context:context error:error];
[MSIDTelemetry stopCacheEvent:event withItem:nil success:result context:context];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
#import "MSIDIdTokenClaims.h"
#import "MSIDAccountIdentifier.h"
#import "MSIDTelemetry+Cache.h"
#import "MSIDAuthorityFactory.h"

@interface MSIDLegacyTokenCacheAccessor()
{
Expand Down Expand Up @@ -259,7 +260,10 @@ - (BOOL)clearWithContext:(id<MSIDRequestContext>)context
{
MSIDAccount *account = [MSIDAccount new];
account.homeAccountId = refreshToken.homeAccountId;
account.authority = [MSIDAuthority cacheUrlForAuthority:refreshToken.authority tenantId:refreshToken.realm];

__auto_type authorityFactory = [MSIDAuthorityFactory new];
__auto_type authority = [authorityFactory authorityFromUrl:refreshToken.authority rawTenant:refreshToken.realm context:nil error:nil];
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will this do authority aliasing?

account.authority = authority;
account.accountType = MSIDAccountTypeMSSTS;
account.username = refreshToken.legacyUserId;
[resultAccounts addObject:account];
Expand Down
29 changes: 29 additions & 0 deletions IdentityCore/src/network/MSIDAADEndpointProvider.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// Copyright (c) Microsoft Corporation.
// All rights reserved.
//
// This code is licensed under the MIT License.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files(the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions :
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

#import <Foundation/Foundation.h>
#import "MSIDAADEndpointProviding.h"

@interface MSIDAADEndpointProvider : NSObject <MSIDAADEndpointProviding>

@end
Loading