Antipattern: Đặt thời gian hết hạn cho mã thông báo OAuth

Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu Apigee X.
thông tin

Apigee Edge cung cấp khung OAuth 2.0 để bảo mật các API. OAuth2 là một trong những lược đồ xác thực và uỷ quyền dựa trên mã thông báo, theo tiêu chuẩn mở phổ biến nhất. OAuth cho phép các ứng dụng truy cập vào API thay cho người dùng mà không yêu cầu người dùng tiết lộ tên người dùng và mật khẩu của họ.

Apigee Edge cho phép nhà phát triển tạo mã truy cập và/hoặc mã làm mới bằng cách triển khai một trong bốn loại cấp OAuth2 – thông tin đăng nhập của ứng dụng, mật khẩu, ngầm địnhmã uỷ quyền – bằng cách sử dụng chính sách OAuthv2. Các ứng dụng sử dụng mã truy cập để sử dụng các API bảo mật. Mỗi mã truy cập đều có thời gian hết hạn riêng, bạn có thể đặt thời gian này trong chính sách OAuthv2.

Mã làm mới được cấp cùng với mã truy cập (không bắt buộc) đối với một số loại cấp quyền. Mã làm mới được dùng để lấy mã truy cập mới, hợp lệ sau khi mã truy cập ban đầu hết hạn hoặc bị thu hồi. Bạn cũng có thể đặt thời gian hết hạn cho mã làm mới trong chính sách OAuthv2.

Antipattern này có liên quan đến antipattern đặt thời gian hết hạn dài cho mã thông báo OAuth.

Antipattern

Việc không đặt thời gian hết hạn cho mã làm mới trong chính sách OAuthv2 sẽ dẫn đến việc tích luỹ mã thông báo OAuth và tăng mức sử dụng dung lượng ổ đĩa trên các nút Cassandra.

Ví dụ sau đây về chính sách OAuthV2 cho thấy một cấu hình bị thiếu cho <RefreshTokenExpiresIn>:

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <!--<RefreshTokenExpiresIn> is missing -->
    <SupportedGrantTypes>
      <GrantType>password</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

Trong ví dụ trên:

  • Mã truy cập được đặt với thời gian hết hạn tương đối ngắn là 30 phút.
  • Bạn chưa đặt thời gian hết hạn cho mã làm mới.
  • Mã làm mới vẫn tồn tại vĩnh viễn trong kho dữ liệu (Cassandra), gây ra tình trạng tích luỹ dữ liệu.
  • Mã làm mới được tạo mà không có thời gian hết hạn có thể được dùng vô thời hạn để tạo mã truy cập.
  • Nếu lưu lượng truy cập vào API này là 10 yêu cầu mỗi giây, thì API này có thể tạo ra tới 864.000 mã thông báo trong một ngày.

Tác động

  • Nếu mã làm mới được tạo mà không có thời gian hết hạn, thì sẽ có 2 hậu quả chính:
    • Bạn có thể sử dụng mã làm mới bất cứ lúc nào trong tương lai (có thể là trong nhiều năm) để lấy mã truy cập. Điều này có thể ảnh hưởng đến khả năng bảo mật.
    • Hàng chứa mã làm mới trong Cassandra sẽ không bao giờ bị xoá. Điều này sẽ khiến dữ liệu tích luỹ trong Cassandra.
  • Nếu bạn không sử dụng mã làm mới để lấy mã truy cập mới, mà thay vào đó tạo mã làm mới và mã truy cập mới, thì mã làm mới cũ sẽ vẫn còn trong Cassandra. Do đó, mã làm mới sẽ tiếp tục tích luỹ trong Cassandra, làm tăng thêm tình trạng phình to, tăng mức sử dụng ổ đĩa và tăng số lượng thao tác nén, đồng thời cuối cùng sẽ gây ra độ trễ đọc/ghi trong Cassandra.

Phương pháp hay nhất

Sử dụng thời gian hết hạn thấp phù hợp cho cả mã làm mới và mã truy cập. Xem phương pháp hay nhất để đặt thời gian hết hạn của mã làm mới và mã truy cập. Đảm bảo bạn chỉ định cấu hình hết hạn cho cả mã truy cập và mã làm mới trong chính sách. Hãy tham khảo tài liệu về chính sách OauthV2 để biết thêm thông tin chi tiết về cấu hình chính sách.

Các phương pháp hay nhất dành riêng cho khách hàng sử dụng Edge cho Đám mây riêng

Phần này mô tả các phương pháp hay nhất dành riêng cho khách hàng sử dụng Edge cho Đám mây riêng.

Chỉ định thời gian hết hạn mặc định của mã làm mới

Theo mặc định, nếu bạn không chỉ định thời gian hết hạn của mã làm mới trong cấu hình chính sách, Edge sẽ tạo mã làm mới mà không có thời gian hết hạn. Bạn có thể ghi đè hành vi này bằng quy trình sau:

  1. Trên một nút trình xử lý thông báo, hãy chỉnh sửa hoặc tạo tệp ghi đè cấu hình $APIGEE_ROOT/customer/application/message-processor.properties. Đảm bảo rằng người dùng apigee có thể đọc được tệp này.
  2. Thêm dòng sau vào tệp:
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
    Thao tác này sẽ đặt thời gian hết hạn của mã làm mới mặc định thành 1 giờ nếu không có thời gian hết hạn nào được chỉ định trong chính sách. Bạn có thể thay đổi giá trị mặc định này dựa trên nhu cầu kinh doanh của mình.
  3. Khởi động lại dịch vụ Message processor (Trình xử lý tin nhắn):
    apigee-service edge-message-processor restart
  4. Lặp lại các bước trên trong tất cả các nút xử lý thông báo, từng nút một.

Các phương pháp hay nhất trong Cassandra

Hãy thử nâng cấp lên phiên bản Apigee mới nhất được cung cấp công khai. Apigee tiếp tục phát hành các bản sửa lỗi và cải tiến để không ngừng cải thiện và tối ưu hoá việc quản lý mã thông báo trong Apigee. Trong Apigee, mã truy cập và mã làm mới được lưu trữ trong Cassandra trong không gian khoá "kms". Bạn phải đảm bảo rằng chiến lược nén của không gian khoá này được đặt thành LeveledCompactionStrategy. Bạn nên kiểm tra để đảm bảo rằng các chỉ mục sau không xuất hiện:
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_organization_name_idx#f0f0f0 và
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_status_idx

Bạn cũng có thể giảm gc_grace_seconds trong bảng kms.oauth_20_access_tokens từ 10 ngày mặc định xuống một giá trị thấp hơn (chẳng hạn như 3 ngày) để đảm bảo các dấu hiệu đánh dấu được tạo do mã thông báo bị xoá sẽ được xoá khỏi kho dữ liệu nhanh hơn.

Tài liệu đọc thêm