溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

結(jié)合Authing怎樣實(shí)現(xiàn)AWS云上的身份認(rèn)證與授權(quán)

發(fā)布時(shí)間:2021-11-15 16:30:37 來(lái)源:億速云 閱讀:271 作者:柒染 欄目:云計(jì)算

這篇文章將為大家詳細(xì)講解有關(guān)結(jié)合Authing怎樣實(shí)現(xiàn)AWS云上的身份認(rèn)證與授權(quán),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

身份認(rèn)證與 Cognito 服務(wù)介紹

在 Web 或 App 開(kāi)發(fā)過(guò)程中,用戶的認(rèn)證和權(quán)限處理是非常重要的一個(gè)模塊,這里包括用戶注冊(cè)、登錄認(rèn)證及管理對(duì)應(yīng)的權(quán)限。除了用戶名密碼登錄外,通過(guò)第三方社交帳號(hào)登錄也是非常重要的需求,在國(guó)外主要是 Google、Facebook 或 Apple 登錄等,而在國(guó)內(nèi)則主要是微信、微博登錄等。

身份認(rèn)證與授權(quán)實(shí)現(xiàn)起來(lái)相應(yīng)復(fù)雜,因此在 AWS 云上提供了 Cognito 服務(wù),以幫助開(kāi)發(fā)者更快、更安全地接入用戶注冊(cè)/登錄和訪問(wèn)控制功能。Cognito 服務(wù)讓企業(yè)可以把更多的精力花在核心業(yè)務(wù)上,去關(guān)注創(chuàng)新、創(chuàng)收,而非過(guò)多關(guān)注身份認(rèn)證與授權(quán)相關(guān)的底層技術(shù)細(xì)節(jié)。

Cognito 服務(wù)構(gòu)成:

  • Cognito User Pool

即用戶池,為應(yīng)用程序提供注冊(cè)和登錄選項(xiàng)的用戶目錄。利用用戶池,用戶可以通過(guò) Cognito 登錄 Web 或 App。用戶還可以通過(guò)社交身份提供商(例如 Google、Facebook、Amazon 或 Apple)以及 SAML 身份提供商登錄。

  • Cognito Identity Pool

即身份池,或聯(lián)合身份,可以為用戶創(chuàng)建唯一身份,并將它們與身份提供商聯(lián)合。有了身份池,用戶便可以獲取權(quán)限受限的臨時(shí) AWS 憑證以訪問(wèn)其他 AWS 服務(wù)。身份池可以包括 Cognito User Pool 中的用戶,外部身份提供商(如 Google/Facebook)或基于 OpenID Connect/SAML 的身份提供商進(jìn)行身份驗(yàn)證的用戶。

Cognito 應(yīng)用場(chǎng)景:

目前 Cognito 被廣泛應(yīng)用在客戶創(chuàng)建的 Web 或 App 中,也應(yīng)用在許多 AWS Solutions 中。目前主要是兩個(gè)使用場(chǎng)景:

  • API Gateway 可以集成 Cognito User Pool 進(jìn)行用戶身份認(rèn)證與授權(quán),方便對(duì) API 進(jìn)行保護(hù)。

  • 結(jié)合 Cognito Identity Pool 來(lái)在 Web 或移動(dòng)端安全地獲取 AWS 臨時(shí)憑證,進(jìn)而訪問(wèn)其他 AWS 服務(wù)。

Cognito User Pool 在國(guó)內(nèi)區(qū)域的替代方案

目前 AWS 國(guó)內(nèi)區(qū)域上線了 Cognito Identity Pool,但 Cognito User Pool 暫未上線。因此我們?cè)谶@個(gè)博客里會(huì)探索如何在現(xiàn)階段找到 Cognito User Pool 的替代方案。我們的基本思路是找到一個(gè)基于 OpenID Connect 協(xié)議的認(rèn)證服務(wù),可以是第三方 SaaS(如 Authing,Auth0 等),或是自建(如基于開(kāi)源的 Keycloark 軟件等)。由于 Authing 是 AWS 在國(guó)內(nèi)的合作伙伴,我們?cè)谶@里會(huì)并以一個(gè)常見(jiàn)的網(wǎng)站為例,探討如何使用 Authing 來(lái)做為 Cognito User Pool 的替代方案,描述相關(guān)的技術(shù)原理,并介紹如何進(jìn)行部署。

1. 架構(gòu)設(shè)計(jì)

演示網(wǎng)站整體架構(gòu)如下:

  • 通過(guò) S3 進(jìn)行靜態(tài)網(wǎng)站托管, 并利用 Cloudfront 進(jìn)行靜態(tài)內(nèi)容加速和 HTTPS 證書(shū)掛載。

  • 通過(guò) Authing 進(jìn)行登錄認(rèn)證并獲取令牌,作為 User Pool 的替代方案。

  • 訪問(wèn) API Gateway 提供的 REST API。

  • 通過(guò) Cognito Identity Pool 獲取臨時(shí) AWS 憑證,訪問(wèn) AWS 資源(這里以 Polly 服務(wù)為例)。

結(jié)合Authing怎樣實(shí)現(xiàn)AWS云上的身份認(rèn)證與授權(quán)

演示網(wǎng)站目前已部署在 AWS 國(guó)內(nèi)區(qū)域, 鏈接如下:

https://authing.demo.cbuilder.tech/

進(jìn)行簡(jiǎn)單的用戶注冊(cè)后可以查看訪問(wèn)效果。

通過(guò) Authing 進(jìn)行登錄認(rèn)證并獲取令牌

結(jié)合Authing怎樣實(shí)現(xiàn)AWS云上的身份認(rèn)證與授權(quán)

Authing 基于 OIDC 和 OAuth 2.0 對(duì)用戶進(jìn)行身份驗(yàn)證,并授予用用戶訪問(wèn)對(duì)應(yīng)的應(yīng)用的權(quán)限,使用場(chǎng)景如上圖所示。

  1. 在第一步中,用戶通過(guò) Authing 用戶池請(qǐng)求登錄,并在成功進(jìn)行身份驗(yàn)證后,從服務(wù)器獲取到 code。

  2. 接下來(lái),應(yīng)用程序通過(guò)身份池帶著 code 請(qǐng)求 token。

  3. 最后,用戶可以使用 token 來(lái)請(qǐng)求訪問(wèn)各種應(yīng)用資源。

上圖介紹了OIDC Authorization Code Flow來(lái)獲取Token, 用戶也可以通過(guò)OIDC Implicit Flow 來(lái)獲取Token。本示例使用的是Implicit Flow, 關(guān)于這兩種流程的對(duì)比可以參考這個(gè)鏈接 。

訪問(wèn) API Gateway 提供的受保護(hù)的 REST API

通過(guò) Authing 登錄認(rèn)證后,可獲取令牌(即 id token)。通過(guò)發(fā)送 HTTP 請(qǐng)求時(shí)在 header 攜帶令牌,即可訪問(wèn)受保護(hù)的 REST API。

結(jié)合Authing怎樣實(shí)現(xiàn)AWS云上的身份認(rèn)證與授權(quán)

通過(guò)與 Identity Pool 集成安全訪問(wèn) AWS 服務(wù)

通過(guò) Authing 登錄認(rèn)證后,可獲取令牌(即 id token)。通過(guò)與 Identity Pool 集成來(lái)獲取臨時(shí)憑證,進(jìn)而安全地訪問(wèn) AWS 資源

結(jié)合Authing怎樣實(shí)現(xiàn)AWS云上的身份認(rèn)證與授權(quán)

2. 方案部署

演示網(wǎng)站的前端和后端代碼均已發(fā)布在 Github:

https://github.com/linjungz/aws-authing-demo

可參照相關(guān)代碼進(jìn)行部署和測(cè)試

2.1 Authing 帳號(hào)開(kāi)通與 OIDC 應(yīng)用配置

首先需要先在 Authing 中創(chuàng)建 OIDC 應(yīng)用,具體可以參考Authing 相關(guān)的幫助文檔。這個(gè)演示環(huán)境使用的是 Implicit Flow,并使用 RS256 算法進(jìn)行 id token 簽名,可參考如下進(jìn)行回調(diào) URL、授權(quán)模式、返回類型等設(shè)置:

結(jié)合Authing怎樣實(shí)現(xiàn)AWS云上的身份認(rèn)證與授權(quán)

2.2 通過(guò) SAM 部署 API Gateway 與 Lambda

由于 id token 使用 RS256 算法進(jìn)行加密,因此需要在 Lambda Authorizer 中設(shè)置相應(yīng)密鑰,以便進(jìn)行 token 驗(yàn)證。具體可以參考示例代碼app.js中的相關(guān)注釋 。

演示環(huán)境中 API Gateway 及相關(guān) Lambda 已經(jīng)描述在一個(gè) AWS SAM 模板(template.yaml)中,通過(guò) SAM 可以直接進(jìn)行自動(dòng)部署:

$ sam build
$ sam deploy --guided
2.3 Authing 與 Identity Pool 集成的配置
  • 配置 OIDC Provider

  • Provider URL : 即為 Authing 應(yīng)用對(duì)應(yīng)的 issuer, 比如本示例使用的 issuer 為:https://aws-oidc-demo-implicitflow.authing.cn/oauth/oidc。

  • Audience: 即為 Authing 應(yīng)用對(duì)應(yīng)的 App ID。

創(chuàng)建成功后如下所示: 結(jié)合Authing怎樣實(shí)現(xiàn)AWS云上的身份認(rèn)證與授權(quán)

具體配置可參考AWS 相關(guān)官方文檔。

  • 配置 Cognito Identity Pool

指定 Authing 做為 Authenticated Provider : 結(jié)合Authing怎樣實(shí)現(xiàn)AWS云上的身份認(rèn)證與授權(quán)

同時(shí),Cognito Identity Pool 會(huì)分別創(chuàng)建兩個(gè) IAM Role(針對(duì)認(rèn)證用戶和匿名用戶),需要對(duì)認(rèn)證用戶的 IAM Role 進(jìn)行權(quán)限設(shè)定,示例網(wǎng)站使用了 Polly 服務(wù),因此需要添加訪問(wèn) Polly 的權(quán)限。

2.4 部署靜態(tài)網(wǎng)站做為前端演示

前端演示頁(yè)面 可以上傳到 S3 桶,并開(kāi)啟 S3 靜態(tài)網(wǎng)站托管功能,注意需要在前面增加 Cloudfront 并添加 HTTPS 證書(shū); 或者可以選擇部署在一臺(tái) EC2 上。

從上述示例代碼可以看到,通過(guò)將 Authing 與 AWS 相關(guān)服務(wù)進(jìn)行集成,可以快速建立一個(gè)托管的用戶池,并對(duì) AWS 的相關(guān)資源(如 API 網(wǎng)關(guān),S3, IoT, AI 等服務(wù))實(shí)現(xiàn)安全的調(diào)用,實(shí)現(xiàn)類似于 Cognito User Pool 服務(wù)的功能。

關(guān)于結(jié)合Authing怎樣實(shí)現(xiàn)AWS云上的身份認(rèn)證與授權(quán)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI