mirror of
https://github.com/danielsogl/awesome-cordova-plugins.git
synced 2025-03-16 16:43:50 +08:00
feat(ms-adal): add Azure Active Directory Authentication plugin
closes #372
This commit is contained in:
parent
bde2b38668
commit
cf0c740269
154
src/@ionic-native/plugins/ms-adal/index.ts
Normal file
154
src/@ionic-native/plugins/ms-adal/index.ts
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
import { Plugin, IonicNativePlugin, checkAvailability, InstanceProperty, CordovaInstance } from '@ionic-native/core';
|
||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
|
||||||
|
export interface AuthenticationResult {
|
||||||
|
|
||||||
|
accessToken: string;
|
||||||
|
accesSTokenType: string;
|
||||||
|
expiresOn: Date;
|
||||||
|
idToken: string;
|
||||||
|
isMultipleResourceRefreshToken: boolean;
|
||||||
|
status: string;
|
||||||
|
statusCode: number;
|
||||||
|
tenantId: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates authorization header for web requests.
|
||||||
|
* @returns {String} The authorization header.
|
||||||
|
*/
|
||||||
|
createAuthorizationHeader(): string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface TokenCache {
|
||||||
|
clear(): void;
|
||||||
|
readItems(): Promise<TokenCacheItem[]>;
|
||||||
|
deleteItem(item: TokenCacheItem): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface TokenCacheItem {
|
||||||
|
accessToken: string;
|
||||||
|
authority: string;
|
||||||
|
clientId: string;
|
||||||
|
displayableId: string;
|
||||||
|
expiresOn: Date;
|
||||||
|
isMultipleResourceRefreshToken: boolean;
|
||||||
|
resource: string;
|
||||||
|
tenantId: string;
|
||||||
|
userInfo: UserInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UserInfo {
|
||||||
|
displayableId: string;
|
||||||
|
userId: string;
|
||||||
|
familyName: string;
|
||||||
|
givenName: string;
|
||||||
|
identityProvider: string;
|
||||||
|
passwordChangeUrl: string;
|
||||||
|
passwordExpiresOn: Date;
|
||||||
|
uniqueId: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name MS ADAL
|
||||||
|
* @description
|
||||||
|
* Active Directory Authentication Library (ADAL) plugin.
|
||||||
|
* Active Directory Authentication Library ([ADAL](https://docs.microsoft.com/en-us/dotnet/api/microsoft.identitymodel.clients.activedirectory?view=azure-dotnet))
|
||||||
|
* plugin provides easy to use authentication functionality for your Apache Cordova apps by taking advantage of
|
||||||
|
* Windows Server Active Directory and Windows Azure Active Directory. Here you can find the source code for the library.
|
||||||
|
* @usage
|
||||||
|
* ```typescript
|
||||||
|
* import { MSAdal, AuthenticationContext, AuthenticationResult } from '@ionic-native/ms-adal';
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* constructor(private msAdal: MSAdal) {}
|
||||||
|
*
|
||||||
|
* ...
|
||||||
|
*
|
||||||
|
* let authContext: AuthenticationContext = this.msAdal.createAuthenticationContext('https://login.windows.net/common');
|
||||||
|
*
|
||||||
|
* authContext.acquireTokenAsync('https://graph.windows.net', 'a5d92493-ae5a-4a9f-bcbf-9f1d354067d3', 'http://MyDirectorySearcherApp')
|
||||||
|
* .then((authResponse: AuthenticationResult) => {
|
||||||
|
* console.log('Token is' , authResponse.accessToken);
|
||||||
|
* console.log('Token will expire on', authResponse.expiresOn);
|
||||||
|
* })
|
||||||
|
* .catch((e: any) => console.log('Authentication failed', e));
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* @classes
|
||||||
|
* AuthenticationContext
|
||||||
|
* @interfaces
|
||||||
|
* AuthenticationResult
|
||||||
|
* TokenCache
|
||||||
|
* TokenCacheItem
|
||||||
|
* UserInfo
|
||||||
|
*/
|
||||||
|
@Plugin({
|
||||||
|
pluginName: 'MSADAL',
|
||||||
|
plugin: 'cordova-plugin-ms-adal',
|
||||||
|
pluginRef: 'Microsoft.ADAL',
|
||||||
|
repo: 'https://github.com/AzureAD/azure-activedirectory-library-for-cordova',
|
||||||
|
platforms: ['Android', 'iOS', 'Windows']
|
||||||
|
})
|
||||||
|
@Injectable()
|
||||||
|
export class MSAdal extends IonicNativePlugin {
|
||||||
|
|
||||||
|
createAuthenticationContext(authority: string, validateAuthority: boolean = true) {
|
||||||
|
let authContext: any;
|
||||||
|
if (checkAvailability(MSAdal.getPluginRef(), null, MSAdal.getPluginName()) === true) {
|
||||||
|
authContext = new (MSAdal.getPlugin()).AuthenticationContext(authority);
|
||||||
|
}
|
||||||
|
return new AuthenticationContext(authContext);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export class AuthenticationContext {
|
||||||
|
|
||||||
|
@InstanceProperty
|
||||||
|
authority: string;
|
||||||
|
|
||||||
|
@InstanceProperty
|
||||||
|
validateAuthority: boolean;
|
||||||
|
|
||||||
|
@InstanceProperty
|
||||||
|
tokenCache: any;
|
||||||
|
|
||||||
|
constructor(private _objectInstance: any) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Acquires token using interactive flow. It always shows UI and skips token from cache.
|
||||||
|
*
|
||||||
|
* @param {String} resourceUrl Resource identifier
|
||||||
|
* @param {String} clientId Client (application) identifier
|
||||||
|
* @param {String} redirectUrl Redirect url for this application
|
||||||
|
* @param {String} userId User identifier (optional)
|
||||||
|
* @param {String} extraQueryParameters
|
||||||
|
* Extra query parameters (optional)
|
||||||
|
* Parameters should be escaped before passing to this method (e.g. using 'encodeURI()')
|
||||||
|
* @returns {Promise} Promise either fulfilled with AuthenticationResult object or rejected with error
|
||||||
|
*/
|
||||||
|
@CordovaInstance({
|
||||||
|
otherPromise: true
|
||||||
|
})
|
||||||
|
acquireTokenAsync(resourceUrl: string, clientId: string, redirectUrl: string, userId: string, extraQueryParameters?: any): Promise<AuthenticationResult> { return; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Acquires token WITHOUT using interactive flow. It checks the cache to return existing result
|
||||||
|
* if not expired. It tries to use refresh token if available. If it fails to get token without
|
||||||
|
* displaying UI it will fail. This method guarantees that no UI will be shown to user.
|
||||||
|
*
|
||||||
|
* @param {String} resourceUrl Resource identifier
|
||||||
|
* @param {String} clientId Client (application) identifier
|
||||||
|
* @param {String} userId User identifier (optional)
|
||||||
|
* @returns {Promise} Promise either fulfilled with AuthenticationResult object or rejected with error
|
||||||
|
*/
|
||||||
|
@CordovaInstance({
|
||||||
|
otherPromise: true
|
||||||
|
})
|
||||||
|
acquireTokenSilentAsync(resourceUrl: string, clientId: string, userId: string): Promise<AuthenticationResult> { return; }
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user