使用 Amazon Cognito 身分集區,從 ASP.NET Core 應用程式存取 AWS 服務 - AWS Prescriptive Guidance

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Amazon Cognito 身分集區,從 ASP.NET Core 應用程式存取 AWS 服務

由比布蒂薩胡 (AWS) 創建

建立者:AWS

:Provironment PoC 或試驗

技術:網站和 Web 應用程式;安全性、身分識別、法規遵循

AWS 服務:Amazon Cognito

Summary

此模式討論如何設定 Amazon Cognito 使用者集區和身分集區,然後啟用 ASP.NET Core 應用程式在成功身分驗證後存取 AWS 資源。

Amazon Cognito 為您的 Web 和行動應用程式提供身分驗證、授權和使用者管理。 Amazon Cognito 的兩個主要元件是使用者集區和身分集區。

使用者集區是在 Amazon Cognito 中的使用者目錄。利用使用者集區,您的使用者可以透過 Amazon Cognito 登入您的 Web 或行動應用程式。您的使用者亦可透過社交身分供應商 (如 Google、Facebook、Amazon 或 Apple) 及 SAML 身分供應商進行登入。

Amazon Cognito 身分集區 (聯合身分) 可讓您為使用者建立唯一身分,並將其與身分供應商聯合。有了身份集區,您可以取得有權限限制的暫時 AWS 登入資料來存取其他 AWS 服務。在開始使用新的 Amazon Cognito 身分集區之前,您必須指派一個或多個 AWS Identity and Access Management (IAM) 角色,以決定應用程式使用者希望 AWS 資源的存取層級。身分集區定義兩種類型的身分:已驗證和未驗證。每種身分識別類型都可以在 IAM 中指派自己的角色。已驗證的身份隸屬於由公有登入供應商 (Amazon Cognito 使用者集區、Facebook、Google、SAML 或任何 OpenID Connect 供應商) 或開發供應商 (您自己的後端身份驗證程序) 驗證的使用者,而未驗證的身份通常隸屬於來賓使用者。當 Amazon Cognito 收到使用者請求時,該服務會判斷該請求是否已驗證或未驗證、判斷與該身分驗證類型相關聯的角色,然後使用附屬於該角色的政策來回應該請求。 

先決條件和限制

先決條件

  • 具有 Amazon Cognito 和 AWS Identito 和存取管理 (IAM) 許可的 AWS 帳戶

  • 存取您要使用的 AWS 資源

  • ASP.NET Core 2.0.0 或更新版本

Architecture

技術堆疊

  • Amazon Cognito

  • ASP.NET Core

目標架構

Tools

工具、開發套件和 AWS 服務

Code

附加的 .zip 檔案包含範例檔案,說明下列內容:

  • 如何檢索登錄用戶的訪問令牌

  • 如何交換 AWS 登入資料的存取權杖

  • 如何使用 AWS 登入資料存取 Amazon Simple Storage Service (Amazon S3) 服務

已驗證身分的 IAM 角色

{   "Version": "2012-10-17",   "Statement": [     {       "Effect": "Allow",       "Action": [         "mobileanalytics:PutEvents",         "cognito-sync:*",         "cognito-identity:*",         "s3:ListAllMyBuckets*"       ],       "Resource": [         "*"       ]     }   ] }

Epics

任務描述所需技能
建立使用者集區。

登入 AWS 管理主控台,開啟位於 https://console.aws.amazon.com/cognito/home 的 Amazon Cognito 主控台。選擇「管理使用者集區」。在頁面右上角,選擇「建立使用者集區」。為您的使用者集區命名,選擇「檢閱預設值」,然後選擇 Create pool (建立集區)。記下集區 ID。

開發人員
新增應用程式用戶端。

您可以建立一應用程式,以使用內建的網頁註冊和登入使用者。在用戶池頁面左側的導航欄上,選擇「常規設置」下的「應用程序客戶端」,然後選擇「添加應用程序客戶端」。為應用程式命名,然後選擇「建立應用程式用戶端」。記下應用程式用戶端識別碼和用戶端密碼 (選擇「顯示詳細資料」以查看用戶端密碼)。

開發人員
任務描述所需技能
建立 身分集區。

在 Amazon Cognito 主控台中,選擇「管理身分集區」,然後選擇 Create new identity pool (建立新的身分集區)。輸入身分集區的名稱。如果您想要啟用未驗證身分,請從「未驗證身分」部分選取該選項。在 [驗證提供者] 區段中,設定使用者集區識別碼和應用程式用戶端識別碼來設定 Cognito 身分識別集區,然後選擇 [建立集區]。

開發人員
為身分集區指派 IAM 角色。

您可以編輯已驗證和未驗證使用者的 IAM 角色,或保留預設值,然後選擇「允許」。對於此模式,我們將編輯已驗證的 IAM 角色,並提供 S3:列出所有 MyBucket 的存取權。如需範例程式碼,請參閱 < 使用的工具 > 一節中提供的 IAM 角色。

開發人員
複製身分集區 ID。

當您在上一個步驟中選擇「允許」時,會顯示「開始使用 Amazon Cognito」頁面。在此頁面上,您可以從「取得 AWS 登入資料」部分複製身分集區 ID,或選擇右上角的「編輯身分集區」,然後從顯示的畫面複製身分集區 ID。

開發人員
任務描述所需技能
克隆範例 ASP.NET Core Web 應用程式。

從 https://github.com/aws/aws-aspnet-cognito-identity-provider.git 複製範例 .NET 核心網路應用程式。導覽至範例資料夾,並打開解決方案。在這個項目中,您將配置 appsettings.json 文件,並添加一個新的頁面,該頁面將在成功登錄後呈現所有 S3 存儲桶。

開發人員
新增相依性。

將 NuGet 相依性加入至您的 ASP.NET 核心應用程式。

開發人員
將配置鍵和值添加到應用程序設置 .json。

在您的 appsettings.json 檔案中包含附加的應用程式設定 .json 檔案中的程式碼,然後取代預留位置與先前步驟的值。

開發人員
建立新使用者並登入。

在 Amazon Cognito 使用者集區中建立新使用者,並確認該使用者存在於使用者集區的「使用者和群組」下。

開發人員
創建一個名為 MyS3 桶新的剃刀頁面。

新增一個新的 ASP.NET 核心剃刀網頁到您的範例應用程式,並取代從附加的範例中的 [MyS3Bucket.cshtml] 和 [ 在 _layout.cshtml 頁面導航下添加新的 MyS3Bucket 頁面。

開發人員

Attachments

attachment.zip