Bỏ qua để đến nội dung

Xác thực Website React

Generator Xác thực Website React thêm tính năng xác thực vào website React của bạn bằng cách sử dụng Amazon Cognito.

Generator này cấu hình hạ tầng CDK hoặc Terraform để tạo Cognito User Pool và Identity Pool liên quan, cũng như giao diện người dùng được lưu trữ để xử lý luồng đăng nhập của người dùng và tích hợp với website React của bạn.

Bạn có thể thêm xác thực vào website React của mình theo hai cách:

  1. Cài đặt Nx Console VSCode Plugin nếu bạn chưa cài đặt
  2. Mở Nx Console trong VSCode
  3. Nhấp Generate (UI) trong phần "Common Nx Commands"
  4. Tìm kiếm @aws/nx-plugin - ts#website#auth
  5. Điền các tham số bắt buộc
    • Nhấp Generate
    Tham sốKiểuMặc địnhMô tả
    project Bắt buộcstring-Thư mục gốc của website.
    cognitoDomain string-Tiền tố domain Cognito sẽ sử dụng. Nếu bỏ qua, giá trị sẽ được lấy từ npm scope và tên dự án website.
    allowSignup booleanCó cho phép tự đăng ký hay không
    iac inherit | cdk | terraforminheritNhà cung cấp IaC ưa thích. Mặc định giá trị này được kế thừa từ lựa chọn ban đầu của bạn.
    preferInstallDependencies booleantrueCó nên cài đặt các dependencies sau khi generator chạy hay không. Đặt thành false để hoãn việc cài đặt khi chạy nhiều generator liên tiếp (việc cài đặt vẫn sẽ chạy nếu cần thiết để các generator tiếp theo có thể tính toán Nx project graph); cài đặt một lần vào cuối.

    Bạn sẽ thấy các thay đổi sau trong website React của mình:

    • Thư mụcsrc
      • Thư mụccomponents
        • Thư mụcCognitoAuth
          • index.tsx Component xác thực chính
      • main.tsx Được cập nhật để tích hợp component CognitoAuth

    Vì generator này cung cấp infrastructure as code dựa trên iacProvider bạn đã chọn, nó sẽ tạo một dự án trong packages/common bao gồm các CDK constructs hoặc Terraform modules liên quan.

    Dự án infrastructure as code chung được cấu trúc như sau:

    • Thư mụcpackages/common/constructs
      • Thư mụcsrc
        • Thư mụcapp/ Constructs cho infrastructure cụ thể của một dự án/generator
        • Thư mụccore/ Constructs chung được tái sử dụng bởi các constructs trong app
        • index.ts Entry point xuất các constructs từ app
      • project.json Các build targets và cấu hình của dự án

    Bạn cũng sẽ thấy mã hạ tầng sau được tạo dựa trên iacProvider bạn đã chọn:

    • Thư mụcpackages/common/constructs/src
      • Thư mụccore
        • user-identity.ts Construct định nghĩa user pool và identity pool

    Generator này thêm một Amazon Cognito user pool (để đăng nhập) và một identity pool (để liên kết người dùng đã đăng nhập với thông tin xác thực IAM có phạm vi) vào kiến trúc static-website hiện có:

    Web BrowserCognito(User + Identity Pool)Scoped IAMCredentialsAuthenticatedAWS Resourceswaf Sign in IAM/Cognito

    User Pool được tạo trên gói tính năng Plus của Cognito với bảo vệ khỏi mối đe dọa được đặt ở chế độ AUDIT cho xác thực tiêu chuẩn. Ở chế độ kiểm toán, Cognito gán một mức độ rủi ro cho mỗi lần đăng nhập và ghi lại đánh giá vào CloudWatch mà không chặn người dùng.

    Sau khi bạn đã quan sát các đánh giá rủi ro cho người dùng của mình, bạn có thể chuyển sang chế độ thực thi đầy đủ chức năng để tự động phản hồi các hoạt động có rủi ro (ví dụ: yêu cầu MFA hoặc chặn đăng nhập):

    Đặt standardThreatProtectionMode thành StandardThreatProtectionMode.FULL_FUNCTION trong packages/common/constructs/src/core/user-identity.ts.

    Theo mặc định, User Pool được liên kết với AWS WAFv2 Web ACL sử dụng các nhóm quy tắc được quản lý AWSManagedRulesCommonRuleSetAWSManagedRulesKnownBadInputsRuleSet. Bạn có thể tắt tính năng này nếu muốn quản lý Web ACL của riêng mình hoặc không yêu cầu:

    new UserIdentity(this, 'Identity', { enableWaf: false });

    Bạn cần thêm hạ tầng user identity vào stack của mình, khai báo nó trước website:

    packages/infra/src/stacks/application-stack.ts
    import { Stack } from 'aws-cdk-lib';
    import { Construct } from 'constructs';
    import { MyWebsite, UserIdentity } from ':my-scope/common-constructs';
    export class ApplicationStack extends Stack {
    constructor(scope: Construct, id: string) {
    super(scope, id);
    new UserIdentity(this, 'Identity');
    new MyWebsite(this, 'MyWebsite');
    }
    }

    Construct UserIdentity tự động thêm Cấu hình Runtime cần thiết để đảm bảo rằng website của bạn có thể trỏ đến đúng Cognito User Pool cho xác thực.

    Cấp Quyền Truy cập cho Người dùng Đã xác thực

    Phần tiêu đề “Cấp Quyền Truy cập cho Người dùng Đã xác thực”

    Để cấp cho người dùng đã xác thực quyền thực hiện các hành động nhất định, chẳng hạn như cấp quyền gọi API, bạn có thể thêm các câu lệnh IAM policy vào vai trò đã xác thực của identity pool:

    packages/infra/src/stacks/application-stack.ts
    import { Stack } from 'aws-cdk-lib';
    import { Construct } from 'constructs';
    import { MyWebsite, UserIdentity, MyApi } from ':my-scope/common-constructs';
    export class ApplicationStack extends Stack {
    constructor(scope: Construct, id: string) {
    super(scope, id);
    const identity = new UserIdentity(this, 'Identity');
    const api = new MyApi(this, 'MyApi');
    api.grantInvokeAccess(identity.identityPool.authenticatedRole);
    new MyWebsite(this, 'MyWebsite');
    }
    }