1. 程式人生 > >使用 Application Load Balancer 內建的身份驗證功能簡化登入流程

使用 Application Load Balancer 內建的身份驗證功能簡化登入流程

今天,我很高興宣佈 Application Load Balancer (ALB) 提供內建的身份驗證功能。ALB 現在可以在使用者訪問應用程式時安全對其進行身份驗證,開發人員不必再編寫支援身份驗證的程式碼,也不必承擔從後端進行身份驗證的責任了。我們的團隊構建了一個非常精彩的演示示例,您可以利用該例項嘗試身份驗證功能。

身份安全性是現代應用程式的重要組成部分,隨著客戶不斷將關鍵任務型應用程式遷移到雲中,開發人員需要反覆編寫相同的身份驗證程式碼。企業想在雲應用程式中使用本地身份。Web 開發人員希望使用社交網路中的聯合身份來支援使用者登入。ALB 全新的身份驗證操作使用

Amazon Cognito 通過 Google、Facebook 和 Amazon 等社交身份提供商 (IdP) 提供身份驗證。此外,它還與符合 OpenID Connect 協議的所有 IdP 原生整合,跨應用程式提供安全身份驗證和單一登入體驗。

ALB 身份驗證如何運作?

身份驗證是一個很複雜的主題,讀者對該主題的瞭解程度可能各不相同。我希望通過介紹幾個關鍵概念,確保我們達成共識。如果您已經是身份驗證專家,只想瞭解 ALB 身份驗證的工作原理,可以跳轉到下一部分

  • 身份驗證用於驗證身份。
  • 授權用於驗證許可權,即某個身份可以執行的操作。
  • OpenID Connect (OIDC) 是基於 OAuth 2.0 協議構建的簡單身份或身份驗證層。OIDC 規範文件寫得非常好,閒暇時可以看看。
  • 身份提供商 (IdP) 管理身份資訊並提供身份驗證服務。ALB 支援符合 OIDC 的所有 IdP,您可以使用 Amazon Cognito 或 Auth0 等服務聚合來自不同 IdP(例如 Active Directory、LDAP、Google、Facebook、Amazon 或者在 AWS 中或本地部署的其他 IdP)的身份。

拋開術語來說,上述所有內容可以簡單理解為:使用者身份以及使用者可以執行哪些操作。做到安全有效地驗證身份很困難。傳統方法是:企業將名為

SAML 的協議與其 IdP 配合使用,以此來為內部使用者提供單一登入 (SSO) 體驗。SAML 中包含大量 XML,而現代應用程式已開始使用 OIDC 和 JSON 機制來共享宣告。開發人員可以將 ALB 中的 SAML 與 Amazon Cognito 的 SAML 支援結合使用。Web 應用程式或移動開發人員通常通過社交 IdP(例如 Facebook、Amazon 或 Google)使用聯合身份,而這些社交 IdP 正好也受 Amazon Cognito 支援。

ALB 身份驗證的工作方式是在偵聽器規則中定義身份驗證操作。ALB 的身份驗證操作將檢查傳入請求中是否存在會話 Cookie,如果有,則檢查其是否有效。如果會話 Cookie 已設定並且有效,則 ALB 會將該請求路由到設定了 X-AMZN-OIDC-* 標頭的目標組。標頭包含 JSON Web Token (JWT) 格式的身份資訊,後端可以使用該資訊來識別使用者。如果會話 Cookie 未設定或者無效,則 ALB 將遵照 OIDC 協議,向身份提供商發出 HTTP 302 重定向。該協議的內容量很大,相應文件對此進行了更全面的介紹,感興趣的讀者可以閱讀。

ALB 身份驗證演練

我有一個簡單的 Python Flask 應用程式位於 Amazon ECS 叢集中,該叢集在一些 AWS Fargate 容器中執行。這些容器位於 ALB 要路由到的目標組中。我需要確保應用程式使用者在訪問需要身份驗證的應用程式部分之前先登入。首先,我導航到控制檯中的 ALB 並編輯規則。

我需要確保對 /account* 終端節點的所有訪問均經過身份驗證,因此,我新增一個新規則,其中包含匹配這些終端節點的條件。

現在,我要新增一條新規則,並在該規則中建立一個 Authenticate 操作。

我提供一些配置詳細資訊,讓 ALB 建立一個新的 Amazon Cognito 使用者池。


建立了 Amazon Cognito 池後,我可以在高階設定中進行一些其他配置。

我可以更改預設的 Cookie 名稱、調整超時、調整範圍,以及選擇適合未經身份驗證的請求的操作。

我可以選取“Deny”以便為所有未經身份驗證的請求提供 401,也可以選取“Allow”,指定哪些操作可以在未經身份驗證的情況下傳遞到應用程式。這對於單頁面應用程式 (SPA) 很有用。現在,我要選擇“Authenticate”,這將提示 IdP(本例中為 Amazon Cognito)對使用者進行身份驗證並重新載入現有的頁面。

現在,我要為目標組新增轉發操作並儲存該規則。

在 Facebook 端,我只需將 Amazon Cognito 使用者池域新增到白名單 OAuth 重定向 URL 即可。

對於其他身份驗證提供商,我將按照類似的步驟進行操作。

現在,當我導航到經過身份驗證的頁面時,Fargate 容器會收到 ALB 設定了 X-Amzn-Oidc-* 標頭的原始請求。我的應用程式可以使用這些標頭中的資訊(claims-data、identity、access-token)實施授權。

不必編寫一行程式碼來處理每個 IdP,即可實現上述所有操作。但是,為了確保請求未被篡改,驗證 JWT 標頭上的簽名對於實施應用程式來說仍然很重要。

其他資源

當然,我們今天展示的所有內容也可以在 API 和 AWS 命令列介面 (CLI) 中實現。有關該功能的其他資訊,請參閱相應文件

另外,請確保檢視演示示例

將身份驗證功能內建到 ALB 中後,開發人員可以集中精力構建應用程式,而不必為每個應用程式重建身份驗證,同時還可以確保 ALB 的擴充套件性、可用性和可靠性。我認為這項功能真的很棒,已經迫不及待想看到客戶使用它來構建什麼了。請在評論區或 Twitter 上發表您對這項功能的看法!

本篇作者

相關推薦

使用 Application Load Balancer 身份驗證功能簡化登入流程

今天,我很高興宣佈 Application Load Balancer (ALB) 提供內建的身份驗證功能。ALB 現在可以在使用者訪問應用程式時安全對其進行身份驗證,開發人員不必再編寫支援身份驗證的程式碼,也不必承擔從後端進行身份驗證的責任了。我們的團隊構建了一個非常精彩的演示示例,您可以

apache虛擬目錄的創身份驗證功能的開啟

test err mark 分享圖片 options ref lin conf 網頁 apache虛擬目錄的創建及身份驗證功能的開啟 實驗環境:服務端:centos6.5 IP192.168.10.10客戶端:win71.echo "test01" &g

thinkphp5分頁功能第二頁無法拿到引數

參考文件:https://blog.csdn.net/woaifen3344/article/details/55803816 核心: $userlist = model('User')->where("name like '%{$name}%'")->paginate(

thinkphp 如何使用驗證碼規則驗證

看了手冊,一臉矇蔽,完全不知道手冊寫的什麼: 不廢話 直接寫案例 第一步 驗證器中的驗證規則如下: namespace app\index\validate; use think\Validate; class User extends Validate { protected $ru

django 分頁功能

匯入分頁的包       from django.core.paginator import Paginator 1.類方法 Page.has_next()  如果有下一頁,則返回True。 Page.has_previous()&

JSP之 application config……八大物件

JSP常用的內建物件作用和說明 一、 application 該物件代表 Web 應用本身,整個 Web 應用共享同一個 application 物件,該物件主要用於在多個 JSP 頁面或 Servlet 之間共享變數。application 通過 setA

page、request、session、application四個物件

<% pageContext.setAttribute("name", "雷鍬", pageContext.PAGE_SCOPE); pageContext.setAttribute(

[轉帖]Windows 埠轉發功能

如何在Windows中使用netsh命令進行埠轉發 https://www.freebuf.com/articles/system/176889.html 早上自己做了下實驗,的確可以。linux下 ssh可以做埠轉發,windows 下面的netsh也是可以

Troubleshoot Unhealthy Application Load Balancer Health Checks in ECS

The command should return "200 OK" (or, if you're using an Application Load Balancer and have updated your Matcher setting, your preferred resp

Application Load Balancer Marked Unhealthy When Using “Evaluate Target Health”

Query your Application Load Balancer's domain name using your preferred method, such as dig or nslookup. Note the output from your query.

Create an Application Load Balancer and Auto Register ECS Tasks

Amazon Web Services is Hiring. Amazon Web Services (AWS) is a dynamic, growing business unit within Amazon.com. We are currently hiring So

Trace an Application Load Balancer Request using X

Amazon Web Services is Hiring. Amazon Web Services (AWS) is a dynamic, growing business unit within Amazon.com. We are currently hiring So

New – AWS Application Load Balancer

We launched Elastic Load Balancing (ELB) for AWS in the spring of 2009 (see New Features for Amazon EC2: Elastic Load Balancing, Auto Scaling, and

通過 spring 容器的 profile 功能實現開發環境、測試環境、生產環境配置自動切換

軟體開發的一般流程為工程師開發 -> 測試 -> 上線,因此就涉及到三個不同的環境,開發環境、測試環境以及生產環境,通常這三個環境會有很多配置引數不同,例如資料來源、檔案路徑、url等,如果每次上線一個新版本時都手動修改配置會十分繁瑣,容易出錯。spring 為我

SQL Server中伺服器身份驗證及使用者登入

安裝過程中,SQL Server 資料庫引擎設定為“Windows 身份驗證模式”或“SQL Server 和 Windows 身份驗證模式”。 安裝完成後,您可以隨時更改身份驗證模式。 如果在安裝過程中選擇了“Windows 身份驗證模式”,則 sa 登入名將被禁用

SQL Server 2014 windows身份驗證和sa登入失敗,且忘記密碼的解決辦法

【1】 停止SQL Server 服務 和 SQL Server Agent 服務【2】 以管理員身份開啟命令列,單使用者模式啟動服務。(在單使用者模式下啟動 SQL Server 可使計算機本地 Administrators 組的任何成員作為 sysadmin 固定伺服器角

如何使用thinkphp 5驗證功能及自定義驗證方法

一個獨立的系統,僅僅只在前臺進行表單驗證是遠遠不夠的,在處理 PHP 表單時提交時需重視安全性,我們需對 HTML 表單資料進行適當的驗證對於防範黑客很重要。 使用ThinkPHP 5框架做專案時,

Python class的屬性訪問控制和函數重寫實現高級功能以及@property

back 實例 溫習 error: blog sta rac bubuko 訪問 一、類屬性的訪問控制 Python Class確實是博大精深,我們還是來溫習一下屬性的訪問控制作為開(fu)場(xi)。 首先_varname是可以訪問的,__varname是不能直接訪問(原

【Python包】re.sub功能

之前要用到正則替換,所以就用到了sub這個功能,看著doc裡寫的雲裡霧裡的,就自己做了做實驗 re.sub(pattern, repl, string, count=0, flags=0) 先說功能 Return the string obtained by replaci

C++函式——sort 函式:實現陣列的排序功能

使用該函式,只需引用標頭檔案: #include<algoritnm> 語法描述為:  // 引數begin,end 表示一個範圍,分別為待排序陣列的首地址和尾地址 // 排列的陣列中包括左邊的 begin 但不包括右邊的 end