Mạng xã hội nodejs

Các ứng dụng chạy trên các nền tảng do Google Cloud quản lý, chẳng hạn như App Engine, có thể tránh việc quản lý xác thực người dùng và quản lý phiên bằng cách sử dụng Proxy nhận biết phần mềm nhận dạng (IAP) để kiểm soát quyền truy cập vào chúng. IAP không chỉ có thể kiểm soát quyền truy cập vào ứng dụng mà còn cung cấp thông tin về người dùng được xác thực, bao gồm địa chỉ email và số nhận dạng liên tục cho ứng dụng dưới dạng tiêu đề HTTP mới

mục tiêu

  • Yêu cầu người dùng ứng dụng App Engine của bạn tự xác thực bằng cách sử dụng IAP

  • Truy cập danh tính của người dùng trong ứng dụng để hiển thị địa chỉ email được xác thực của người dùng hiện tại

chi phí

Hướng dẫn này sử dụng các thành phần có thể thanh toán sau của Google Cloud

  • Ứng dụng động cơ
  • IAP

Để tạo ước tính chi phí dựa trên mức sử dụng dự kiến ​​của bạn, hãy sử dụng công cụ tính giá. Người dùng Google Cloud mới có thể đủ điều kiện dùng thử miễn phí

Khi bạn hoàn thành hướng dẫn này, bạn có thể tránh tiếp tục thanh toán bằng cách xóa các tài nguyên bạn đã tạo. Để biết thêm thông tin, xem

Trước khi bắt đầu

  1. Đăng nhập vào tài khoản Google Cloud của bạn. Nếu bạn mới sử dụng Google Cloud, hãy tạo một tài khoản để đánh giá hiệu quả hoạt động của các sản phẩm của chúng tôi trong các tình huống thực tế. Khách hàng mới cũng nhận được 300 đô la tín dụng miễn phí để chạy, thử nghiệm và triển khai khối lượng công việc
  2. Trong bảng điều khiển Google Cloud, trên trang bộ chọn dự án, hãy chọn hoặc tạo một dự án Google Cloud

    Ghi chú. Nếu bạn không định giữ các tài nguyên mà bạn tạo trong quy trình này, hãy tạo một dự án thay vì chọn một dự án hiện có. Sau khi hoàn thành các bước này, bạn có thể xóa dự án, xóa tất cả các tài nguyên được liên kết với dự án

    Chuyển đến bộ chọn dự án

  3. Cài đặt và khởi tạo Google Cloud CLI
  4. Trong bảng điều khiển Google Cloud, trên trang bộ chọn dự án, hãy chọn hoặc tạo một dự án Google Cloud

    Ghi chú. Nếu bạn không định giữ các tài nguyên mà bạn tạo trong quy trình này, hãy tạo một dự án thay vì chọn một dự án hiện có. Sau khi hoàn thành các bước này, bạn có thể xóa dự án, xóa tất cả các tài nguyên được liên kết với dự án

    Chuyển đến bộ chọn dự án

  5. Cài đặt và khởi tạo Google Cloud CLI

Lý lịch

Hướng dẫn này sử dụng IAP để xác thực người dùng. Đây chỉ là một trong một số cách tiếp cận có thể. Để tìm hiểu thêm về các phương pháp khác nhau để xác thực người dùng, hãy xem phần

Ứng dụng Xin chào { "name": "iap-authentication", "description": "Minimal app to use authentication information from IAP.", "private": true, "license": "Apache-2.0", "author": "Google LLC", "repository": { "type": "git", "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git" }, "engines": { "node": ">=12.0.0" }, "scripts": { "start": "node app.js", "test": "mocha --exit test/*.test.js" }, "dependencies": { "express": "^4.17.1", "gcp-metadata": "^5.0.0", "google-auth-library": "^8.0.0" }, "devDependencies": { "mocha": "^9.0.0", "supertest": "^6.0.0" } } 2

Ứng dụng dành cho hướng dẫn này là một ứng dụng Hello world App Engine tối thiểu, với một tính năng không điển hình. thay vì "Xin chào thế giới", nó hiển thị "Xin chào

{
  "name": "iap-authentication",
  "description": "Minimal app to use authentication information from IAP.",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google LLC",
  "repository": {
    "type": "git",
    "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
  },
  "engines": {
    "node": ">=12.0.0"
  },
  "scripts": {
    "start": "node app.js",
    "test": "mocha --exit test/*.test.js"
  },
  "dependencies": {
    "express": "^4.17.1",
    "gcp-metadata": "^5.0.0",
    "google-auth-library": "^8.0.0"
  },
  "devDependencies": {
    "mocha": "^9.0.0",
    "supertest": "^6.0.0"
  }
}
2", trong đó
{
  "name": "iap-authentication",
  "description": "Minimal app to use authentication information from IAP.",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google LLC",
  "repository": {
    "type": "git",
    "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
  },
  "engines": {
    "node": ">=12.0.0"
  },
  "scripts": {
    "start": "node app.js",
    "test": "mocha --exit test/*.test.js"
  },
  "dependencies": {
    "express": "^4.17.1",
    "gcp-metadata": "^5.0.0",
    "google-auth-library": "^8.0.0"
  },
  "devDependencies": {
    "mocha": "^9.0.0",
    "supertest": "^6.0.0"
  }
}
2 là địa chỉ email của người dùng được xác thực

Có thể thực hiện chức năng này bằng cách kiểm tra thông tin đã xác thực mà IAP thêm vào từng yêu cầu web mà nó chuyển đến ứng dụng của bạn. Có ba tiêu đề yêu cầu mới được thêm vào mỗi yêu cầu web đến ứng dụng của bạn. Hai tiêu đề đầu tiên là các chuỗi văn bản thuần túy mà bạn có thể sử dụng để xác định người dùng. Tiêu đề thứ ba là một đối tượng được ký bằng mật mã có cùng thông tin đó

  • {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    
    2. Địa chỉ email của người dùng xác định họ. Không lưu trữ thông tin cá nhân nếu ứng dụng của bạn có thể tránh được. Ứng dụng này không lưu trữ bất kỳ dữ liệu nào;

  • {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    
    3. ID người dùng do Google chỉ định này không hiển thị thông tin về người dùng, nhưng nó cho phép ứng dụng biết rằng người dùng đã đăng nhập chính là người dùng đã thấy trước đó

  • {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    
    4. Bạn có thể định cấu hình các ứng dụng Google Cloud để chấp nhận các yêu cầu web từ các ứng dụng đám mây khác, bỏ qua IAP, ngoài các yêu cầu web trên internet. Nếu một ứng dụng được định cấu hình như vậy, thì các yêu cầu như vậy có thể có các tiêu đề giả mạo. Thay vì sử dụng một trong các tiêu đề văn bản thuần túy đã đề cập trước đó, bạn có thể sử dụng và xác minh tiêu đề được ký bằng mật mã này để kiểm tra xem thông tin có được cung cấp bởi Google hay không. Cả địa chỉ email của người dùng và ID người dùng liên tục đều có sẵn như một phần của tiêu đề đã ký này

Nếu bạn chắc chắn rằng ứng dụng được định cấu hình để chỉ các yêu cầu web trên internet mới có thể truy cập ứng dụng và không ai có thể tắt dịch vụ IAP cho ứng dụng, thì việc truy xuất ID người dùng duy nhất chỉ cần một dòng mã

{
  "name": "iap-authentication",
  "description": "Minimal app to use authentication information from IAP.",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google LLC",
  "repository": {
    "type": "git",
    "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
  },
  "engines": {
    "node": ">=12.0.0"
  },
  "scripts": {
    "start": "node app.js",
    "test": "mocha --exit test/*.test.js"
  },
  "dependencies": {
    "express": "^4.17.1",
    "gcp-metadata": "^5.0.0",
    "google-auth-library": "^8.0.0"
  },
  "devDependencies": {
    "mocha": "^9.0.0",
    "supertest": "^6.0.0"
  }
}
5

Tuy nhiên, một ứng dụng có khả năng phục hồi sẽ có thể xảy ra sự cố, bao gồm các vấn đề về môi trường hoặc cấu hình không mong muốn, vì vậy, chúng tôi khuyên bạn nên tạo một chức năng sử dụng và xác minh tiêu đề được ký bằng mật mã. Chữ ký của tiêu đề đó không thể giả mạo và khi được xác minh, có thể được sử dụng để trả về nhận dạng

Tạo mã nguồn

  1. Sử dụng trình soạn thảo văn bản để tạo một tệp có tên

    {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    
    6 và dán đoạn mã sau vào đó

    xác thực-người dùng/ứng dụng. js

    Xem trên GitHub

    const express = require('express');
    const metadata = require('gcp-metadata');
    const {OAuth2Client} = require('google-auth-library');
    
    const app = express();
    const oAuth2Client = new OAuth2Client();
    
    // Cache externally fetched information for future invocations
    let aud;
    
    async function audience() {
      if (!aud && (await metadata.isAvailable())) {
        let project_number = await metadata.project('numeric-project-id');
        let project_id = await metadata.project('project-id');
    
        aud = '/projects/' + project_number + '/apps/' + project_id;
      }
    
      return aud;
    }
    
    async function validateAssertion(assertion) {
      if (!assertion) {
        return {};
      }
    
      // Check that the assertion's audience matches ours
      const aud = await audience();
    
      // Fetch the current certificates and verify the signature on the assertion
      const response = await oAuth2Client.getIapPublicKeys();
      const ticket = await oAuth2Client.verifySignedJwtWithCertsAsync(
        assertion,
        response.pubkeys,
        aud,
        ['https://cloud.google.com/iap']
      );
      const payload = ticket.getPayload();
    
      // Return the two relevant pieces of information
      return {
        email: payload.email,
        sub: payload.sub,
      };
    }
    
    app.get('/', async (req, res) => {
      const assertion = req.header('X-Goog-IAP-JWT-Assertion');
      let email = 'None';
      try {
        const info = await validateAssertion(assertion);
        email = info.email;
      } catch (error) {
        console.log(error);
      }
      res.status(200).send(`Hello ${email}`).end();
    });
    
    
    // Start the server
    const PORT = process.env.PORT || 8080;
    app.listen(PORT, () => {
      console.log(`App listening on port ${PORT}`);
      console.log('Press Ctrl+C to quit.');
    });
    

    Tệp

    {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    
    6 này được giải thích chi tiết trong phần sau của hướng dẫn này

  2. Tạo một tệp khác có tên là

    {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    
    8 và dán đoạn mã sau vào đó

    xác thực-người dùng/gói. json

    Xem trên GitHub

    {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    

    Tệp

    {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    
    8 liệt kê bất kỳ Nút nào. js phụ thuộc mà ứng dụng của bạn cần.
    {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    
    00 cung cấp chức năng kiểm tra và giải mã JWT

  3. Tạo một tệp có tên

    {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    
    01 và đặt văn bản sau vào đó

    xác thực-người dùng/ứng dụng. khoai mỡ

    Xem trên GitHub

    {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    
    0

    Tệp

    {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    
    01 cho App Engine biết mã của bạn yêu cầu môi trường ngôn ngữ nào

Hiểu mã

Phần này giải thích cách hoạt động của mã trong tệp

{
  "name": "iap-authentication",
  "description": "Minimal app to use authentication information from IAP.",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google LLC",
  "repository": {
    "type": "git",
    "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
  },
  "engines": {
    "node": ">=12.0.0"
  },
  "scripts": {
    "start": "node app.js",
    "test": "mocha --exit test/*.test.js"
  },
  "dependencies": {
    "express": "^4.17.1",
    "gcp-metadata": "^5.0.0",
    "google-auth-library": "^8.0.0"
  },
  "devDependencies": {
    "mocha": "^9.0.0",
    "supertest": "^6.0.0"
  }
}
6. Nếu bạn muốn chạy ứng dụng, bạn có thể bỏ qua phần

Đoạn mã sau nằm trong tệp

{
  "name": "iap-authentication",
  "description": "Minimal app to use authentication information from IAP.",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google LLC",
  "repository": {
    "type": "git",
    "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
  },
  "engines": {
    "node": ">=12.0.0"
  },
  "scripts": {
    "start": "node app.js",
    "test": "mocha --exit test/*.test.js"
  },
  "dependencies": {
    "express": "^4.17.1",
    "gcp-metadata": "^5.0.0",
    "google-auth-library": "^8.0.0"
  },
  "devDependencies": {
    "mocha": "^9.0.0",
    "supertest": "^6.0.0"
  }
}
6. Khi ứng dụng nhận được một
{
  "name": "iap-authentication",
  "description": "Minimal app to use authentication information from IAP.",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google LLC",
  "repository": {
    "type": "git",
    "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
  },
  "engines": {
    "node": ">=12.0.0"
  },
  "scripts": {
    "start": "node app.js",
    "test": "mocha --exit test/*.test.js"
  },
  "dependencies": {
    "express": "^4.17.1",
    "gcp-metadata": "^5.0.0",
    "google-auth-library": "^8.0.0"
  },
  "devDependencies": {
    "mocha": "^9.0.0",
    "supertest": "^6.0.0"
  }
}
05, trường hợp chuyển đổi cho
{
  "name": "iap-authentication",
  "description": "Minimal app to use authentication information from IAP.",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google LLC",
  "repository": {
    "type": "git",
    "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
  },
  "engines": {
    "node": ">=12.0.0"
  },
  "scripts": {
    "start": "node app.js",
    "test": "mocha --exit test/*.test.js"
  },
  "dependencies": {
    "express": "^4.17.1",
    "gcp-metadata": "^5.0.0",
    "google-auth-library": "^8.0.0"
  },
  "devDependencies": {
    "mocha": "^9.0.0",
    "supertest": "^6.0.0"
  }
}
06 được gọi

Hàm nhận giá trị tiêu đề xác nhận JWT mà IAP đã thêm từ yêu cầu đến và gọi một hàm để xác thực giá trị được ký bằng mật mã đó. Giá trị đầu tiên được trả về (địa chỉ email) sau đó được sử dụng trong một trang web tối thiểu mà nó tạo và trả về

xác thực-người dùng/ứng dụng. js

Xem trên GitHub

{
  "name": "iap-authentication",
  "description": "Minimal app to use authentication information from IAP.",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google LLC",
  "repository": {
    "type": "git",
    "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
  },
  "engines": {
    "node": ">=12.0.0"
  },
  "scripts": {
    "start": "node app.js",
    "test": "mocha --exit test/*.test.js"
  },
  "dependencies": {
    "express": "^4.17.1",
    "gcp-metadata": "^5.0.0",
    "google-auth-library": "^8.0.0"
  },
  "devDependencies": {
    "mocha": "^9.0.0",
    "supertest": "^6.0.0"
  }
}
8

Hàm

{
  "name": "iap-authentication",
  "description": "Minimal app to use authentication information from IAP.",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google LLC",
  "repository": {
    "type": "git",
    "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
  },
  "engines": {
    "node": ">=12.0.0"
  },
  "scripts": {
    "start": "node app.js",
    "test": "mocha --exit test/*.test.js"
  },
  "dependencies": {
    "express": "^4.17.1",
    "gcp-metadata": "^5.0.0",
    "google-auth-library": "^8.0.0"
  },
  "devDependencies": {
    "mocha": "^9.0.0",
    "supertest": "^6.0.0"
  }
}
07 sử dụng hàm
{
  "name": "iap-authentication",
  "description": "Minimal app to use authentication information from IAP.",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google LLC",
  "repository": {
    "type": "git",
    "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
  },
  "engines": {
    "node": ">=12.0.0"
  },
  "scripts": {
    "start": "node app.js",
    "test": "mocha --exit test/*.test.js"
  },
  "dependencies": {
    "express": "^4.17.1",
    "gcp-metadata": "^5.0.0",
    "google-auth-library": "^8.0.0"
  },
  "devDependencies": {
    "mocha": "^9.0.0",
    "supertest": "^6.0.0"
  }
}
08 từ
{
  "name": "iap-authentication",
  "description": "Minimal app to use authentication information from IAP.",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google LLC",
  "repository": {
    "type": "git",
    "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
  },
  "engines": {
    "node": ">=12.0.0"
  },
  "scripts": {
    "start": "node app.js",
    "test": "mocha --exit test/*.test.js"
  },
  "dependencies": {
    "express": "^4.17.1",
    "gcp-metadata": "^5.0.0",
    "google-auth-library": "^8.0.0"
  },
  "devDependencies": {
    "mocha": "^9.0.0",
    "supertest": "^6.0.0"
  }
}
09 để xác minh rằng xác nhận đã được ký hợp lệ và để trích xuất thông tin tải trọng từ xác nhận. Thông tin đó là địa chỉ email của người dùng được xác thực và ID duy nhất liên tục cho người dùng. Nếu xác nhận không thể được giải mã, chức năng này sẽ ném và in một thông báo để ghi lại lỗi

Việc xác thực xác nhận JWT yêu cầu biết chứng chỉ khóa công khai của thực thể đã ký xác nhận (trong trường hợp này là Google) và đối tượng mà xác nhận dành cho. Đối với ứng dụng App Engine, đối tượng là một chuỗi có thông tin nhận dạng dự án Google Cloud trong đó. Hàm này nhận các chứng chỉ đó và chuỗi đối tượng từ các hàm trước nó

xác thực-người dùng/ứng dụng. js

Xem trên GitHub

{
  "name": "iap-authentication",
  "description": "Minimal app to use authentication information from IAP.",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google LLC",
  "repository": {
    "type": "git",
    "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
  },
  "engines": {
    "node": ">=12.0.0"
  },
  "scripts": {
    "start": "node app.js",
    "test": "mocha --exit test/*.test.js"
  },
  "dependencies": {
    "express": "^4.17.1",
    "gcp-metadata": "^5.0.0",
    "google-auth-library": "^8.0.0"
  },
  "devDependencies": {
    "mocha": "^9.0.0",
    "supertest": "^6.0.0"
  }
}
2

Bạn có thể tra cứu tên và ID số của dự án Google Cloud và tự đặt chúng vào mã nguồn, nhưng hàm

{
  "name": "iap-authentication",
  "description": "Minimal app to use authentication information from IAP.",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google LLC",
  "repository": {
    "type": "git",
    "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
  },
  "engines": {
    "node": ">=12.0.0"
  },
  "scripts": {
    "start": "node app.js",
    "test": "mocha --exit test/*.test.js"
  },
  "dependencies": {
    "express": "^4.17.1",
    "gcp-metadata": "^5.0.0",
    "google-auth-library": "^8.0.0"
  },
  "devDependencies": {
    "mocha": "^9.0.0",
    "supertest": "^6.0.0"
  }
}
80 thực hiện điều đó cho bạn bằng cách truy vấn dịch vụ siêu dữ liệu tiêu chuẩn có sẵn cho mọi ứng dụng App Engine. Vì dịch vụ siêu dữ liệu nằm bên ngoài mã ứng dụng nên kết quả đó được lưu trong một biến toàn cầu được trả về mà không cần phải tra cứu siêu dữ liệu trong các lần gọi tiếp theo

xác thực-người dùng/ứng dụng. js

Xem trên GitHub

{
  "name": "iap-authentication",
  "description": "Minimal app to use authentication information from IAP.",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google LLC",
  "repository": {
    "type": "git",
    "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
  },
  "engines": {
    "node": ">=12.0.0"
  },
  "scripts": {
    "start": "node app.js",
    "test": "mocha --exit test/*.test.js"
  },
  "dependencies": {
    "express": "^4.17.1",
    "gcp-metadata": "^5.0.0",
    "google-auth-library": "^8.0.0"
  },
  "devDependencies": {
    "mocha": "^9.0.0",
    "supertest": "^6.0.0"
  }
}
4

Dịch vụ siêu dữ liệu của Máy ứng dụng (và các dịch vụ siêu dữ liệu tương tự cho các dịch vụ điện toán đám mây khác của Google) trông giống như một trang web và được truy vấn bởi các truy vấn web tiêu chuẩn. Tuy nhiên, dịch vụ siêu dữ liệu thực sự không phải là một trang web bên ngoài, mà là một tính năng nội bộ trả về thông tin được yêu cầu về ứng dụng đang chạy, vì vậy sẽ an toàn khi sử dụng yêu cầu

{
  "name": "iap-authentication",
  "description": "Minimal app to use authentication information from IAP.",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google LLC",
  "repository": {
    "type": "git",
    "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
  },
  "engines": {
    "node": ">=12.0.0"
  },
  "scripts": {
    "start": "node app.js",
    "test": "mocha --exit test/*.test.js"
  },
  "dependencies": {
    "express": "^4.17.1",
    "gcp-metadata": "^5.0.0",
    "google-auth-library": "^8.0.0"
  },
  "devDependencies": {
    "mocha": "^9.0.0",
    "supertest": "^6.0.0"
  }
}
81 thay vì yêu cầu
{
  "name": "iap-authentication",
  "description": "Minimal app to use authentication information from IAP.",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google LLC",
  "repository": {
    "type": "git",
    "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
  },
  "engines": {
    "node": ">=12.0.0"
  },
  "scripts": {
    "start": "node app.js",
    "test": "mocha --exit test/*.test.js"
  },
  "dependencies": {
    "express": "^4.17.1",
    "gcp-metadata": "^5.0.0",
    "google-auth-library": "^8.0.0"
  },
  "devDependencies": {
    "mocha": "^9.0.0",
    "supertest": "^6.0.0"
  }
}
82. Nó được sử dụng để lấy số nhận dạng Google Cloud hiện tại cần thiết để xác định đối tượng dự định của xác nhận JWT

xác thực-người dùng/ứng dụng. js

Xem trên GitHub

{
  "name": "iap-authentication",
  "description": "Minimal app to use authentication information from IAP.",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google LLC",
  "repository": {
    "type": "git",
    "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
  },
  "engines": {
    "node": ">=12.0.0"
  },
  "scripts": {
    "start": "node app.js",
    "test": "mocha --exit test/*.test.js"
  },
  "dependencies": {
    "express": "^4.17.1",
    "gcp-metadata": "^5.0.0",
    "google-auth-library": "^8.0.0"
  },
  "devDependencies": {
    "mocha": "^9.0.0",
    "supertest": "^6.0.0"
  }
}
7

Việc xác minh chữ ký điện tử yêu cầu chứng chỉ khóa công khai của người ký. Google cung cấp một trang web trả về tất cả các chứng chỉ khóa công khai hiện đang được sử dụng. Các kết quả này được lưu vào bộ nhớ đệm phòng trường hợp cần dùng lại trong cùng một phiên bản ứng dụng

Triển khai ứng dụng

Giờ đây, bạn có thể triển khai ứng dụng rồi bật IAP để yêu cầu người dùng xác thực trước khi họ có thể truy cập ứng dụng

  1. Trong cửa sổ đầu cuối của bạn, hãy chuyển đến thư mục chứa tệp

    {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    
    01 và triển khai ứng dụng lên App Engine

    {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    
    9
  2. Khi được nhắc, hãy chọn một khu vực lân cận

  3. Khi được hỏi liệu bạn có muốn tiếp tục hoạt động triển khai hay không, hãy nhập

    {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    
    84

    Trong vòng vài phút, ứng dụng của bạn sẽ xuất hiện trên internet

  4. xem ứng dụng

    {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    
    1

    Ở đầu ra, sao chép

    {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    
    85, địa chỉ web của ứng dụng

  5. Trong cửa sổ trình duyệt, dán

    {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    
    85 để mở ứng dụng

    Không có email nào được hiển thị vì bạn chưa sử dụng IAP nên không có thông tin người dùng nào được gửi đến ứng dụng

Bật IAP

Giờ đây, phiên bản Máy ứng dụng đã tồn tại, bạn có thể bảo vệ phiên bản đó bằng IAP

  1. Trong bảng điều khiển Google Cloud, truy cập trang Proxy nhận dạng nhận dạng

    Tới trang Proxy Nhận biết Nhận dạng

  2. Vì đây là lần đầu tiên bạn bật tùy chọn xác thực cho dự án này nên bạn sẽ thấy thông báo rằng bạn phải định cấu hình màn hình đồng ý OAuth trước khi có thể sử dụng IAP

    Nhấp vào Cấu hình màn hình đồng ý

  3. Trên tab Màn hình đồng ý OAuth của trang Thông tin xác thực, hãy hoàn thành các trường sau

    • Nếu tài khoản của bạn thuộc một tổ chức Google Workspace, hãy chọn Bên ngoài rồi nhấp vào Tạo. Để bắt đầu, ứng dụng sẽ chỉ khả dụng cho những người dùng mà bạn cho phép rõ ràng

    • Trong trường Tên ứng dụng, nhập

      {
        "name": "iap-authentication",
        "description": "Minimal app to use authentication information from IAP.",
        "private": true,
        "license": "Apache-2.0",
        "author": "Google LLC",
        "repository": {
          "type": "git",
          "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
        },
        "engines": {
          "node": ">=12.0.0"
        },
        "scripts": {
          "start": "node app.js",
          "test": "mocha --exit test/*.test.js"
        },
        "dependencies": {
          "express": "^4.17.1",
          "gcp-metadata": "^5.0.0",
          "google-auth-library": "^8.0.0"
        },
        "devDependencies": {
          "mocha": "^9.0.0",
          "supertest": "^6.0.0"
        }
      }
      
      87

    • Trong trường Email hỗ trợ, hãy nhập địa chỉ email của bạn

    • Trong trường Miền được ủy quyền, hãy nhập phần tên máy chủ của URL của ứng dụng, ví dụ:

      {
        "name": "iap-authentication",
        "description": "Minimal app to use authentication information from IAP.",
        "private": true,
        "license": "Apache-2.0",
        "author": "Google LLC",
        "repository": {
          "type": "git",
          "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
        },
        "engines": {
          "node": ">=12.0.0"
        },
        "scripts": {
          "start": "node app.js",
          "test": "mocha --exit test/*.test.js"
        },
        "dependencies": {
          "express": "^4.17.1",
          "gcp-metadata": "^5.0.0",
          "google-auth-library": "^8.0.0"
        },
        "devDependencies": {
          "mocha": "^9.0.0",
          "supertest": "^6.0.0"
        }
      }
      
      88. Nhấn phím
      {
        "name": "iap-authentication",
        "description": "Minimal app to use authentication information from IAP.",
        "private": true,
        "license": "Apache-2.0",
        "author": "Google LLC",
        "repository": {
          "type": "git",
          "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
        },
        "engines": {
          "node": ">=12.0.0"
        },
        "scripts": {
          "start": "node app.js",
          "test": "mocha --exit test/*.test.js"
        },
        "dependencies": {
          "express": "^4.17.1",
          "gcp-metadata": "^5.0.0",
          "google-auth-library": "^8.0.0"
        },
        "devDependencies": {
          "mocha": "^9.0.0",
          "supertest": "^6.0.0"
        }
      }
      
      89 sau khi nhập tên máy chủ vào trường

    • Trong trường Liên kết trang chủ ứng dụng, hãy nhập URL cho ứng dụng của bạn, ví dụ:

      {
        "name": "iap-authentication",
        "description": "Minimal app to use authentication information from IAP.",
        "private": true,
        "license": "Apache-2.0",
        "author": "Google LLC",
        "repository": {
          "type": "git",
          "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
        },
        "engines": {
          "node": ">=12.0.0"
        },
        "scripts": {
          "start": "node app.js",
          "test": "mocha --exit test/*.test.js"
        },
        "dependencies": {
          "express": "^4.17.1",
          "gcp-metadata": "^5.0.0",
          "google-auth-library": "^8.0.0"
        },
        "devDependencies": {
          "mocha": "^9.0.0",
          "supertest": "^6.0.0"
        }
      }
      
      20

    • Trong trường dòng Chính sách quyền riêng tư của ứng dụng, hãy sử dụng cùng một URL làm liên kết trang chủ cho mục đích thử nghiệm

  4. Nhấp vào để lưu. Khi được nhắc tạo thông tin xác thực, bạn có thể đóng cửa sổ

  5. Trong bảng điều khiển Google Cloud, truy cập trang Proxy nhận dạng nhận dạng

    Tới trang Proxy Nhận biết Nhận dạng

  6. Để làm mới trang, hãy nhấp vào Làm mới làm mới. Trang hiển thị danh sách các tài nguyên bạn có thể bảo vệ

  7. Trong cột IAP, nhấp để bật IAP cho ứng dụng

  8. Trong trình duyệt của bạn, hãy truy cập lại vào

    {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    
    85

  9. Thay vì trang web, có một màn hình đăng nhập để xác thực chính bạn. Khi bạn đăng nhập, bạn bị từ chối truy cập vì IAP không có danh sách người dùng để cho phép truy cập vào ứng dụng

Thêm người dùng được ủy quyền vào ứng dụng

  1. Trong bảng điều khiển Google Cloud, truy cập trang Proxy nhận dạng nhận dạng

    Tới trang Proxy Nhận biết Nhận dạng

  2. Chọn hộp kiểm cho ứng dụng App Engine, sau đó nhấp vào Thêm tiền gốc

  3. Nhập

    {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    
    22, sau đó chọn vai trò Người dùng ứng dụng web bảo mật IAP/IAP trên đám mây

  4. Nhấp vào để lưu

Giờ đây, bất kỳ người dùng nào mà Google có thể xác thực đều có thể truy cập ứng dụng. Nếu muốn, bạn có thể hạn chế quyền truy cập hơn nữa bằng cách chỉ thêm một hoặc nhiều người hoặc nhóm làm hiệu trưởng

  • Mọi địa chỉ email Gmail hoặc Google Workspace

  • Địa chỉ email của Nhóm Google

  • Một tên miền Google Workspace

Truy cập ứng dụng

  1. Trong trình duyệt của bạn, hãy truy cập

    {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    
    85

  2. Để làm mới trang, hãy nhấp vào Làm mới làm mới

  3. Trên màn hình đăng nhập, hãy đăng nhập bằng thông tin đăng nhập Google của bạn

    Trang hiển thị trang "Xin chào

    {
      "name": "iap-authentication",
      "description": "Minimal app to use authentication information from IAP.",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google LLC",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "scripts": {
        "start": "node app.js",
        "test": "mocha --exit test/*.test.js"
      },
      "dependencies": {
        "express": "^4.17.1",
        "gcp-metadata": "^5.0.0",
        "google-auth-library": "^8.0.0"
      },
      "devDependencies": {
        "mocha": "^9.0.0",
        "supertest": "^6.0.0"
      }
    }
    
    2" với địa chỉ email của bạn

    Nếu bạn vẫn thấy trang như trước, có thể đã xảy ra sự cố với trình duyệt không cập nhật đầy đủ các yêu cầu mới khi bạn đã bật IAP. Đóng tất cả cửa sổ trình duyệt, mở lại và thử lại

khái niệm xác thực

Có một số cách ứng dụng có thể xác thực người dùng của mình và hạn chế quyền truy cập chỉ đối với những người dùng được ủy quyền. Các phương thức xác thực phổ biến, giảm mức độ nỗ lực cho ứng dụng, được liệt kê trong các phần sau

Tùy chọn Ưu điểm Nhược điểm Xác thực ứng dụng
  • Ứng dụng có thể chạy trên mọi nền tảng, có hoặc không có kết nối internet
  • Người dùng không cần sử dụng bất kỳ dịch vụ nào khác để quản lý xác thực
  • Ứng dụng phải quản lý thông tin đăng nhập của người dùng một cách an toàn, bảo vệ chống tiết lộ thông tin
  • Ứng dụng phải duy trì dữ liệu phiên cho người dùng đã đăng nhập
  • Ứng dụng phải cung cấp đăng ký người dùng, thay đổi mật khẩu, khôi phục mật khẩu
OAuth2
  • Ứng dụng có thể chạy trên mọi nền tảng kết nối internet, kể cả máy trạm của nhà phát triển
  • Ứng dụng không cần đăng ký người dùng, thay đổi mật khẩu hoặc chức năng khôi phục mật khẩu
  • Rủi ro lộ thông tin người dùng được giao cho dịch vụ khác
  • Các biện pháp bảo mật đăng nhập mới được xử lý bên ngoài ứng dụng
  • Người dùng phải đăng ký với dịch vụ nhận dạng
  • Ứng dụng phải duy trì dữ liệu phiên cho người dùng đã đăng nhập
IAP
  • Ứng dụng không cần có bất kỳ mã nào để quản lý người dùng, xác thực hoặc trạng thái phiên
  • Ứng dụng không có thông tin xác thực người dùng có thể bị vi phạm
  • Ứng dụng chỉ có thể chạy trên các nền tảng được dịch vụ hỗ trợ. Cụ thể, một số dịch vụ Google Cloud hỗ trợ IAP, chẳng hạn như App Engine

Xác thực do ứng dụng quản lý

Với phương pháp này, ứng dụng sẽ tự quản lý mọi khía cạnh xác thực người dùng. Ứng dụng phải duy trì cơ sở dữ liệu riêng về thông tin đăng nhập của người dùng và quản lý phiên người dùng, đồng thời ứng dụng cần cung cấp các chức năng để quản lý tài khoản và mật khẩu người dùng, kiểm tra thông tin đăng nhập của người dùng cũng như phát hành, kiểm tra và cập nhật phiên người dùng với mỗi lần đăng nhập được xác thực. Sơ đồ sau minh họa phương thức xác thực do ứng dụng quản lý

Như thể hiện trong sơ đồ, sau khi người dùng đăng nhập, ứng dụng sẽ tạo và duy trì thông tin về phiên của người dùng. Khi người dùng đưa ra yêu cầu đối với ứng dụng, yêu cầu phải bao gồm thông tin phiên mà ứng dụng chịu trách nhiệm xác minh

Ưu điểm chính của phương pháp này là nó độc lập và nằm dưới sự kiểm soát của ứng dụng. Ứng dụng thậm chí không cần phải có sẵn trên internet. Nhược điểm chính là ứng dụng hiện chịu trách nhiệm cung cấp tất cả chức năng quản lý tài khoản và bảo vệ tất cả dữ liệu thông tin xác thực nhạy cảm

Xác thực bên ngoài với OAuth2

Một giải pháp thay thế tốt để xử lý mọi thứ trong ứng dụng là sử dụng dịch vụ nhận dạng bên ngoài, chẳng hạn như Google, dịch vụ này xử lý tất cả thông tin và chức năng của tài khoản người dùng và chịu trách nhiệm bảo vệ thông tin xác thực nhạy cảm. Khi người dùng cố gắng đăng nhập vào ứng dụng, yêu cầu sẽ được chuyển hướng đến dịch vụ nhận dạng, dịch vụ này sẽ xác thực người dùng và sau đó chuyển hướng yêu cầu trở lại ứng dụng với thông tin xác thực cần thiết được cung cấp. Để biết thêm thông tin, hãy xem Sử dụng OAuth 2. 0 cho ứng dụng máy chủ web

Sơ đồ sau minh họa xác thực bên ngoài bằng phương thức OAuth2

Quy trình trong sơ đồ bắt đầu khi người dùng gửi yêu cầu truy cập ứng dụng. Thay vì phản hồi trực tiếp, ứng dụng sẽ chuyển hướng trình duyệt của người dùng đến nền tảng nhận dạng của Google, nền tảng này sẽ hiển thị một trang để đăng nhập vào Google. Sau khi đăng nhập thành công, trình duyệt của người dùng được chuyển hướng trở lại ứng dụng. Yêu cầu này bao gồm thông tin mà ứng dụng có thể sử dụng để tra cứu thông tin về người dùng hiện đã được xác thực và ứng dụng hiện phản hồi cho người dùng

Phương pháp này có nhiều ưu điểm cho ứng dụng. Nó ủy thác tất cả chức năng quản lý tài khoản và rủi ro cho dịch vụ bên ngoài, dịch vụ này có thể cải thiện khả năng đăng nhập và bảo mật tài khoản mà không cần phải thay đổi ứng dụng. Tuy nhiên, như được hiển thị trong sơ đồ trước, ứng dụng phải có quyền truy cập internet để sử dụng phương pháp này. Ứng dụng này cũng chịu trách nhiệm quản lý các phiên sau khi người dùng được xác thực

Proxy nhận biết danh tính

Cách tiếp cận thứ ba mà hướng dẫn này trình bày là sử dụng IAP để xử lý tất cả xác thực và quản lý phiên với bất kỳ thay đổi nào đối với ứng dụng. IAP chặn tất cả các yêu cầu web đối với ứng dụng của bạn, chặn bất kỳ yêu cầu nào chưa được xác thực và chuyển những yêu cầu khác qua dữ liệu nhận dạng người dùng được thêm vào từng yêu cầu

Việc xử lý yêu cầu được hiển thị trong sơ đồ sau

Yêu cầu từ người dùng bị chặn bởi IAP, chặn các yêu cầu không được xác thực. Các yêu cầu đã xác thực được chuyển đến ứng dụng, miễn là người dùng đã xác thực nằm trong danh sách người dùng được phép. Các yêu cầu được chuyển qua IAP có các tiêu đề được thêm vào để xác định người dùng đã thực hiện yêu cầu

Ứng dụng không còn cần xử lý bất kỳ tài khoản người dùng hoặc thông tin phiên nào. Bất kỳ hoạt động nào cần biết mã định danh duy nhất cho người dùng đều có thể lấy mã đó trực tiếp từ mỗi yêu cầu web đến. Tuy nhiên, điều này chỉ có thể được sử dụng cho các dịch vụ điện toán hỗ trợ IAP, chẳng hạn như Máy ứng dụng và bộ cân bằng tải. Bạn không thể sử dụng IAP trên máy phát triển cục bộ

Dọn dẹp

Để tránh phát sinh phí đối với tài khoản Google Cloud của bạn đối với các tài nguyên được sử dụng trong hướng dẫn này, hãy xóa dự án chứa tài nguyên hoặc giữ lại dự án và xóa từng tài nguyên

    thận trọng. Xóa một dự án có các hiệu ứng sau
    • Mọi thứ trong dự án đều bị xóa. Nếu bạn đã sử dụng một dự án hiện có cho hướng dẫn này, khi bạn xóa nó, bạn cũng xóa mọi công việc khác mà bạn đã thực hiện trong dự án
    • ID dự án tùy chỉnh bị mất. Khi bạn tạo dự án này, bạn có thể đã tạo ID dự án tùy chỉnh mà bạn muốn sử dụng trong tương lai. Để giữ nguyên các URL sử dụng ID dự án, chẳng hạn như URL
      {
        "name": "iap-authentication",
        "description": "Minimal app to use authentication information from IAP.",
        "private": true,
        "license": "Apache-2.0",
        "author": "Google LLC",
        "repository": {
          "type": "git",
          "url": "https://github.com/GoogleCloudPlatform/getting-started-nodejs.git"
        },
        "engines": {
          "node": ">=12.0.0"
        },
        "scripts": {
          "start": "node app.js",
          "test": "mocha --exit test/*.test.js"
        },
        "dependencies": {
          "express": "^4.17.1",
          "gcp-metadata": "^5.0.0",
          "google-auth-library": "^8.0.0"
        },
        "devDependencies": {
          "mocha": "^9.0.0",
          "supertest": "^6.0.0"
        }
      }
      
      25, hãy xóa các tài nguyên đã chọn bên trong dự án thay vì xóa toàn bộ dự án

    Nếu bạn dự định khám phá nhiều hướng dẫn và bắt đầu nhanh, thì việc sử dụng lại dự án có thể giúp bạn tránh vượt quá giới hạn hạn mức dự án