Giao tiếp OAuth v2 giữa xác thực và máy chủ tài nguyên


81

Tôi đang gặp một số khó khăn khi hiểu cách hoạt động của OAUTH-v2.

Các OAuth phiên bản 2 đặc tả lần đọc:

  1. Truy cập tài nguyên được bảo vệ

    Máy khách truy cập các tài nguyên được bảo vệ bằng cách xuất trình
    mã thông báo truy cập cho máy chủ tài nguyên. Máy chủ tài nguyên PHẢI xác thực
    mã thông báo truy cập và đảm bảo rằng nó chưa hết hạn và phạm vi của nó bao gồm
    tài nguyên được yêu cầu. Các phương pháp được máy chủ tài nguyên sử dụng để
    xác thực mã thông báo truy cập (cũng như bất kỳ phản hồi lỗi nào) nằm ngoài phạm vi của đặc điểm kỹ thuật này , nhưng thường liên quan đến sự tương tác hoặc phối hợp giữa máy chủ tài nguyên và
    máy chủ ủy quyền
    .

Sự tương tác này giữa máy chủ tài nguyên và máy chủ ủy quyền hoạt động như thế nào trong thực tế?

  • Làm cách nào để máy chủ tài nguyên xác định rằng mã thông báo truy cập mà nó nhận được là hợp lệ?
  • Làm cách nào để máy chủ tài nguyên trích xuất phạm vi được phép từ mã thông báo để xem liệu có nên cấp quyền truy cập cho một tài nguyên cụ thể hay không? Phạm vi có được mã hóa trong mã thông báo truy cập hay máy chủ tài nguyên trước tiên phải liên hệ với máy chủ ủy quyền?
  • Sự tin cậy giữa máy chủ tài nguyên và máy chủ ủy quyền được thiết lập như thế nào?

Thuộc tính mã thông báo truy cập và các phương pháp được sử dụng để truy cập tài nguyên được bảo vệ nằm ngoài phạm vi của đặc điểm kỹ thuật này và được xác định bởi thông số kỹ thuật đồng hành.

Ai đó có thể đưa ra ví dụ cho các thuộc tính mã thông báo?


1
Đây thực sự là một quetsion mà tôi đang tìm kiếm từ vài ngày nay
Uttam

Câu trả lời:


79

Lý do điều này nằm ngoài phạm vi của đặc tả là có rất nhiều cách để thực hiện kết nối này giữa hai thực thể. Câu hỏi chính là việc triển khai của bạn phức tạp đến mức nào.

Ví dụ: bạn có một máy chủ quản lý xác thực và truy cập và một tập hợp các dịch vụ riêng biệt, mỗi dịch vụ có các máy chủ riêng phục vụ các lệnh gọi API? Hoặc, bạn chỉ có một hộp với một máy chủ web xử lý cả xác thực / ủy quyền và lệnh gọi API?

Trong trường hợp là một hộp đơn lẻ, không cần nhiều vì thực thể phát hành mã thông báo giống như đối tượng xác thực chúng. Bạn có thể triển khai mã thông báo để sử dụng khóa bảng cơ sở dữ liệu và tra cứu bản ghi trong cơ sở dữ liệu (hoặc bộ nhớ đệm trong bộ nhớ) theo mọi yêu cầu hoặc bạn có thể mã hóa phạm vi, id người dùng và thông tin khác trực tiếp vào mã thông báo và mã hóa nó bằng đối xứng hoặc bất đối xứng thuật toán.

Mọi thứ trở nên phức tạp hơn một chút khi xử lý môi trường phân tán, nhưng không nhiều. Bạn vẫn phát hành mã thông báo tại máy chủ ủy quyền, nhưng máy chủ tài nguyên cần một cách để xác thực chúng. Nó có thể làm điều đó bằng cách cung cấp một API nội bộ cho máy chủ tài nguyên để yêu cầu máy chủ ủy quyền "giải quyết" mã thông báo (có thể nhanh chóng trong môi trường cục bộ) hoặc cả hai có thể thiết lập cặp khóa công khai / riêng tư hoặc bí mật đối xứng và sử dụng nó để mã hóa mọi thứ mà máy chủ tài nguyên cần vào mã thông báo.

Mã thông báo tự chứa dài hơn nhưng cung cấp hiệu suất tốt hơn nhiều cho mỗi yêu cầu. Tuy nhiên, chúng đi kèm với một cái giá - bạn không thể thực sự thu hồi chúng khi chúng vẫn còn giá trị (chưa hết hạn). Vì lý do này, mã thông báo tự chứa sẽ tồn tại rất ngắn (bất cứ điều gì được chấp nhận để bạn để quyền truy cập sau khi nó bị thu hồi - ví dụ: nhiều trang web sử dụng một giờ), với mã thông báo làm mới tốt trong một năm hoặc hơn để nhận mã thông báo mới.


Có đúng là nếu thực thể phát hành và xác thực mã thông báo không có IP trắng / công khai tĩnh thì việc nhà cung cấp dịch vụ gọi lại cho khách hàng / chủ sở hữu tài nguyên không thể được thực hiện thông qua (các) HTTP, do đó yêu cầu một số triển khai phức tạp hơn?
Denys S.

Các cuộc gọi lại không được thực hiện bởi nhà cung cấp dịch vụ mà bởi trình duyệt của người dùng. Không chắc chắn chính xác những gì bạn đang yêu cầu.
Eran Hammer

Điều gì sẽ xảy ra nếu bạn thêm một số apis mà máy chủ tài nguyên sử dụng (apis thuộc về bạn). Sau đó, bạn có nên sử dụng xác thực oath2 (client_credentials) để thiết lập một giao tiếp máy với máy an toàn với máy chủ tài nguyên không? Trong trường hợp đó, điều đó có nghĩa là tất cả các apis phải chia sẻ cùng một cặp khóa với máy chủ auth?
Dionisis K,

4

Một ví dụ về API máy chủ cấp quyền cho tài nguyên là một tại Trang web dành cho nhà phát triển của Google .
Tuy nhiên, nó không chỉ định định dạng của mã thông báo truy cập, nhưng phản hồi có vẻ khá hữu ích.


OIDC và id_tokens là một cái gì đó khác với mã thông báo truy cập mờ.
machete
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.