Google Apps (G Suite), Microsoft Azure AD, GitHub, OKTA, Auth0, Centrify authentication for CloudFront using Lambda@Edge. The original use case for cloudfront-auth
was to serve private S3 content over HTTPS without running a proxy server in EC2 to authenticate requests; but cloudfront-auth
can be used authenticate requests of any Cloudfront origin configuration.
Upon successful authentication, a cookie (named TOKEN
) with the value of a signed JWT is set and the user redirected back to the originally requested path. Upon each request, Lambda@Edge checks the JWT for validity (signature, expiration date, audience and matching hosted domain) and will redirect the user to configured provider's login when their session has timed out.
If your CloudFront distribution is pointed at a S3 bucket, configure origin access identity so S3 objects can be stored with private permissions. (Origin access identity requires the S3 ACL owner be the account owner. Use our s3-object-owner-monitor Lambda function if writing objects across multiple accounts.)
Enable SSL/HTTPS on your CloudFront distribution; AWS Certificate Manager can be used to provision a no-cost certificate.
Session duration is defined as the number of hours that the JWT is valid for. After session expiration, cloudfront-auth will redirect the user to the configured provider to re-authenticate. RSA keys are used to sign and validate the JWT. If the files id_rsa
and id_rsa.pub
do not exist they will be automatically generated by the build. To disable all issued JWTs upload a new ZIP using the Lambda Console after deleting the id_rsa
and id_rsa.pub
files (a new key will be automatically generated).
https://my-cloudfront-site.example.com/_callback
./build.sh
in the downloaded directory. NPM will run to download dependencies and a RSA key will be generated.
Github
as the authorization method and enter the values for Client ID, Client Secret, Redirect URI, Session Duration and Organization
zip
file found in your distribution folder using the AWS Lambda console and jump to the configuration stephttps://my-cloudfront-site.example.com/_callback
./build.sh
in the downloaded directory. NPM will run to download dependencies and a RSA key will be generated.Google
as the authorization method and enter the values for Client ID, Client Secret, Redirect URI, Hosted Domain and Session Durationzip
file found in your distribution folder using the AWS Lambda console and jump to the configuration stepSettings -> Keys
and make a new key with your desired duration. Click save and copy the value. This will be your client_secret
Keys
, go to Reply URLs
and enter your Cloudfront hostname with your preferred path value for the authorization callback. Example: https://my-cloudfront-site.example.com/_callback./build.sh
in the downloaded directory. NPM will run to download dependencies and a RSA key will be generated.Microsoft
as the authorization method and enter the values for Tenant, Client ID (Application ID), Client Secret (previously created key), Redirect URI and Session Durationzip
file found in your distribution folder using the AWS Lambda console and jump to the configuration stepApplications
tab.Web
application typehttps://{cf-endpoint}.cloudfront.net
)https://{cf-endpoint}.cloudfront.net/_callback
)./build.sh
in the downloaded directory. NPM will run to download dependencies and a RSA key will be generated.OKTA
as the authorization method and enter the values for Base URL (Org URL), Client ID, Client Secret, Redirect URI, and Session Durationzip
file found in your distribution folder using the AWS Lambda console and jump to the configuration stephttps://my-cloudfront-site.example.com/_callback
./build.sh
in the downloaded directory. NPM will run to download dependencies and a RSA key will be generated.AUTH0
as the authorization method and enter the values for Base URL (Auth0 Domain), Client ID, Client Secret, Redirect URI, and Session Durationzip
file found in your distribution folder using the AWS Lambda console and jump to the configuration stephttps://my-cloudfront-site.example.com/_callback
./build.sh
in the downloaded directory. NPM will run to download dependencies and a RSA key will be generated.CENTRIFY
as the authorization method and enter the values for Base URL (Centrify Resource application URL), Client ID, Client Secret, Redirect URI, and Session Duration (which is available from the Tokens tab).zip
file found in your distribution folder using the AWS Lambda console and jump to the configuration stepApplications
tab.Native
application typehttps://{cf-endpoint}.cloudfront.net
)https://{cf-endpoint}.cloudfront.net/_callback
)./build.sh
in the downloaded directory. NPM will run to download dependencies and a RSA key will be generated.OKTA Native
as the authorization method and enter the values for Base URL (Org URL), Client ID, PKCE Code Verifier Length, Redirect URI, and Session Durationzip
file found in your distribution folder using the AWS Lambda console and jump to the configuration stepManual Deployment or AWS SAM Deployment
JSON array of email addresses
[ "foo@gmail.com", "bar@gmail.com" ]
Detailed instructions on testing your function can be found in the Wiki.
All contributions are welcome. Please create an issue in order open up communication with the community.
When implementing a new flow or using an already implemented flow, be sure to follow the same style used in build.js
. The config.json file should have an object for each request made. For example, openid.index.js
converts config.AUTH_REQUEST and config.TOKEN_REQUEST to querystrings for simplified requests (after adding dynamic variables such as state or nonce). For implementations that are not generic (most), endpoints are hardcoded in to the config (or discovery documents).
Be considerate of our limitations. The zipped function can be no more than 1MB in size and execution cannot take longer than 5 seconds, so we must pay close attention to the size of our dependencies and complexity of operations.
CloudFront是CDN (Content Delivery Network) 。 它从Amazon S3存储桶中检索数据并将其分发到多个数据中心位置。 它通过称为edge locations的数据中心网络提供数据。 当用户请求数据时,最近的边缘位置被路由,导致最低延迟,低网络流量,快速访问数据等。 AWS CloudFront如何提供内容? AWS CloudFront按以下步骤提供内容。
我正在为我正在开发的web应用程序试用AWS3和CloudFront。 在应用程序中,我允许用户上传文件到S3 bucket(使用AWS SDK)并通过CloudFront CDN使其可用,但问题是即使文件在S3 bucket中上传并准备就绪,也需要大约一到两分钟才能在CloudFront CDN url中可用,这正常吗?
如果我使用Cloudfront坐在Web服务器前面,而Web服务器本身就在ELB后面,那么下面的内容适用吗? > 我使用Route53为CF域创建域名记录并将SSL证书应用于该域以保护分发 如果CF不能提供来自缓存的内容,那么SSL连接将被转发到ELB(它将web服务器作为源服务器) 因此,我还需要在ELB上使用相同的域名(FQDN)(通过Route53 CNAME)并在那里申请相同的证书? 当C
背景:我在bigcorp.com的部门被卖掉了,现在我们在lilcorp.com。我们部署了一批设备,将在https://updates.bigcorp.com/,上寻找软件更新,但由于我们不再控制bigcorp.com,我们需要更新我们的设备来检查https://updates.lilcorp.com。bigcorp给了我们一个updates.bigcorp.com的证书,并有一个DNS CNA
我使用 EC2 源设置了 AWS 云前,但在我的设置中遇到了一些问题: 1.备用域名(CNAMEs):xyz.com。 2.SSL证书:由ACM创建。 3.自定义 SSL 客户端支持:支持服务器名称指示 (SNI) 的客户端。 4.原始域名是EC2公共DNS。 5.Origin协议策略:仅限HTTP。 6.最小源站 SSL 协议:SSLv3。 7.查看器协议策略:将 HTTP 重定向到 HTTPS
AWS是Amazon Web Services。 S3是他们的静态存储,可以配置为静态站点托管。 Cloudfront是他们的CDN(内容分发网络) 在AWS w / S3 + Cloudfront上托管静态页面的 Nuxt应用程序功能强大且价格低廉。 如果我们错过了一个步骤,请提交PR以更新此文档。 概览 我们将通过一些AWS服务托管超级便宜: S3 云数据"bucket"为我们的网站文件 可以