-
Notifications
You must be signed in to change notification settings - Fork 4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(cognito): user pool identity provider with support for Facebook …
…& Amazon (#8134) ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
- Loading branch information
Niranjan Jayakar
authored
Jun 3, 2020
1 parent
6cf458a
commit 1ad919f
Showing
16 changed files
with
677 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
import { Construct, IResource, Resource } from '@aws-cdk/core'; | ||
|
||
/** | ||
* Represents a UserPoolIdentityProvider | ||
*/ | ||
export interface IUserPoolIdentityProvider extends IResource { | ||
/** | ||
* The primary identifier of this identity provider | ||
* @attribute | ||
*/ | ||
readonly providerName: string; | ||
} | ||
|
||
/** | ||
* User pool third-party identity providers | ||
*/ | ||
export class UserPoolIdentityProvider { | ||
|
||
/** | ||
* Import an existing UserPoolIdentityProvider | ||
*/ | ||
public static fromProviderName(scope: Construct, id: string, providerName: string): IUserPoolIdentityProvider { | ||
class Import extends Resource implements IUserPoolIdentityProvider { | ||
public readonly providerName: string = providerName; | ||
} | ||
|
||
return new Import(scope, id); | ||
} | ||
|
||
private constructor() {} | ||
} |
52 changes: 52 additions & 0 deletions
52
packages/@aws-cdk/aws-cognito/lib/user-pool-idps/amazon.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
import { Construct } from '@aws-cdk/core'; | ||
import { CfnUserPoolIdentityProvider } from '../cognito.generated'; | ||
import { UserPoolIdentityProviderBase, UserPoolIdentityProviderProps } from './base'; | ||
|
||
/** | ||
* Properties to initialize UserPoolAmazonIdentityProvider | ||
*/ | ||
export interface UserPoolIdentityProviderAmazonProps extends UserPoolIdentityProviderProps { | ||
/** | ||
* The client id recognized by 'Login with Amazon' APIs. | ||
* @see https://developer.amazon.com/docs/login-with-amazon/security-profile.html#client-identifier | ||
*/ | ||
readonly clientId: string; | ||
/** | ||
* The client secret to be accompanied with clientId for 'Login with Amazon' APIs to authenticate the client. | ||
* @see https://developer.amazon.com/docs/login-with-amazon/security-profile.html#client-identifier | ||
*/ | ||
readonly clientSecret: string; | ||
/** | ||
* The types of user profile data to obtain for the Amazon profile. | ||
* @see https://developer.amazon.com/docs/login-with-amazon/customer-profile.html | ||
* @default [ profile ] | ||
*/ | ||
readonly scopes?: string[]; | ||
} | ||
|
||
/** | ||
* Represents a identity provider that integrates with 'Login with Amazon' | ||
* @resource AWS::Cognito::UserPoolIdentityProvider | ||
*/ | ||
export class UserPoolIdentityProviderAmazon extends UserPoolIdentityProviderBase { | ||
public readonly providerName: string; | ||
|
||
constructor(scope: Construct, id: string, props: UserPoolIdentityProviderAmazonProps) { | ||
super(scope, id, props); | ||
|
||
const scopes = props.scopes ?? [ 'profile' ]; | ||
|
||
const resource = new CfnUserPoolIdentityProvider(this, 'Resource', { | ||
userPoolId: props.userPool.userPoolId, | ||
providerName: 'LoginWithAmazon', // must be 'LoginWithAmazon' when the type is 'LoginWithAmazon' | ||
providerType: 'LoginWithAmazon', | ||
providerDetails: { | ||
client_id: props.clientId, | ||
client_secret: props.clientSecret, | ||
authorize_scopes: scopes.join(' '), | ||
}, | ||
}); | ||
|
||
this.providerName = super.getResourceNameAttribute(resource.ref); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
import { Construct, Resource } from '@aws-cdk/core'; | ||
import { IUserPool } from '../user-pool'; | ||
import { IUserPoolIdentityProvider } from '../user-pool-idp'; | ||
|
||
/** | ||
* Properties to create a new instance of UserPoolIdentityProvider | ||
*/ | ||
export interface UserPoolIdentityProviderProps { | ||
/** | ||
* The user pool to which this construct provides identities. | ||
*/ | ||
readonly userPool: IUserPool; | ||
} | ||
|
||
/** | ||
* Options to integrate with the various social identity providers. | ||
*/ | ||
export abstract class UserPoolIdentityProviderBase extends Resource implements IUserPoolIdentityProvider { | ||
public abstract readonly providerName: string; | ||
|
||
public constructor(scope: Construct, id: string, props: UserPoolIdentityProviderProps) { | ||
super(scope, id); | ||
props.userPool.registerIdentityProvider(this); | ||
} | ||
} |
57 changes: 57 additions & 0 deletions
57
packages/@aws-cdk/aws-cognito/lib/user-pool-idps/facebook.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
import { Construct } from '@aws-cdk/core'; | ||
import { CfnUserPoolIdentityProvider } from '../cognito.generated'; | ||
import { UserPoolIdentityProviderBase, UserPoolIdentityProviderProps } from './base'; | ||
|
||
/** | ||
* Properties to initialize UserPoolFacebookIdentityProvider | ||
*/ | ||
export interface UserPoolIdentityProviderFacebookProps extends UserPoolIdentityProviderProps { | ||
/** | ||
* The client id recognized by Facebook APIs. | ||
*/ | ||
readonly clientId: string; | ||
/** | ||
* The client secret to be accompanied with clientUd for Facebook to authenticate the client. | ||
* @see https://developers.facebook.com/docs/facebook-login/security#appsecret | ||
*/ | ||
readonly clientSecret: string; | ||
/** | ||
* The list of facebook permissions to obtain for getting access to the Facebook profile. | ||
* @see https://developers.facebook.com/docs/facebook-login/permissions | ||
* @default [ public_profile ] | ||
*/ | ||
readonly scopes?: string[]; | ||
/** | ||
* The Facebook API version to use | ||
* @default - to the oldest version supported by Facebook | ||
*/ | ||
readonly apiVersion?: string; | ||
} | ||
|
||
/** | ||
* Represents a identity provider that integrates with 'Facebook Login' | ||
* @resource AWS::Cognito::UserPoolIdentityProvider | ||
*/ | ||
export class UserPoolIdentityProviderFacebook extends UserPoolIdentityProviderBase { | ||
public readonly providerName: string; | ||
|
||
constructor(scope: Construct, id: string, props: UserPoolIdentityProviderFacebookProps) { | ||
super(scope, id, props); | ||
|
||
const scopes = props.scopes ?? [ 'public_profile' ]; | ||
|
||
const resource = new CfnUserPoolIdentityProvider(this, 'Resource', { | ||
userPoolId: props.userPool.userPoolId, | ||
providerName: 'Facebook', // must be 'Facebook' when the type is 'Facebook' | ||
providerType: 'Facebook', | ||
providerDetails: { | ||
client_id: props.clientId, | ||
client_secret: props.clientSecret, | ||
authorize_scopes: scopes.join(','), | ||
api_version: props.apiVersion, | ||
}, | ||
}); | ||
|
||
this.providerName = super.getResourceNameAttribute(resource.ref); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
export * from './base'; | ||
export * from './amazon'; | ||
export * from './facebook'; |
Oops, something went wrong.