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


Tôi đang gặp một số khó khăn khi hiểu OAUTH-v2 hoạt động như thế nào.

Các Thông số kỹ thuật phiên bản OAuth 2 lần đọc:

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

    Khách hàng truy cập được bảo vệ   tài nguyên bằng cách trình bày quyền truy cập
      mã thông báo cho máy chủ tài nguyên. Các   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 nó không   đã 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 sử dụng bởi máy chủ tài nguyên
      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) là vượt ra ngoài   phạm vi của đặc điểm kỹ thuật này, nhưng   nói chung là liên quan đến sự tương tác hoặc   sự phối hợp giữa tài nguyên   máy chủ và ủy quyền
      máy chủ
    .

Sự tương tác 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ế?

  • Máy chủ tài nguyên như thế nào xác định rằng mã thông báo truy cập nhận được là hợp lệ?
  • Làm thế nào để trích xuất máy chủ tài nguyên được cho phép phạm vi từ mã thông báo để xem liệu quyền truy cập có nên được cấp cho một tài nguyên cụ thể không? Phạm vi đượ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à   phương pháp được sử dụng để truy cập được bảo vệ   tài nguyên là vượt ra ngoài phạm vi của điều này   đặc điểm kỹ thuật và được xác định bởi   thông số kỹ thuật đồng hành.

Ai đó có thể đưa ra các ví dụ cho các thuộc tính token?


76
2018-06-06 16:28


gốc




Các câu trả lời:


Lý do điều này nằm ngoài phạm vi của đặc tả là phạm vi rộng của các 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à triển khai phức tạp của bạn như thế 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ụ rời rạc với mỗi máy chủ riêng của mình phục vụ các cuộc gọi API không? Hoặc, bạn có chỉ một hộp với một máy chủ web xử lý cả xác thực / ủy quyền và các cuộc gọi API?

Trong trường hợp của một hộp duy nhất, không cần nhiều vì thẻ thực thể phát hành giống với mã xác thực chúng. Bạn có thể triển khai thẻ để 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ớ cache) trên 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 cách sử dụng đối xứng hoặc không đối xứng thuật toán.

Mọi thứ trở nên phức tạp hơn một chút khi giao dịch với 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 các mã đó. Nó có thể làm điều đó bằng cách tạo một API bên trong có sẵn 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 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 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.

Thẻ tự chứa dài hơn nhưng cung cấp hiệu suất tốt hơn cho mỗi yêu cầu. Tuy nhiên, họ đi kèm với một mức giá - bạn có thể không thực sự thu hồi chúng trong khi chúng vẫn còn hiệu lực (không hết hạn). Vì lý do này, các thẻ tự chứa phải rất ngắn (mọi thứ có thể chấp nhận để bạn mở quyền truy cập sau khi 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 trở lên để nhận mã thông báo mới.


77
2018-06-20 18:39



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 cộng tĩnh thì các callback của nhà cung cấp dịch vụ cho chủ sở hữu máy chủ / 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 nhà cung cấp dịch vụ thực hiện mà do trình duyệt của người dùng thực hiện. 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ó thể sử dụng xác thực oath2 (client_credentials) thiết lập giao tiếp giữa máy và máy 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


Một ví dụ về API máy chủ ủy quyền tài nguyên là một ví dụ Trang web Google Developers.
Nó không xác định định dạng của mã thông báo truy cập mặc dù, nhưng phản ứng có vẻ khá phổ biến hữu ích.


4
2017-12-20 07:59



OIDC và id_tokens là một cái gì đó khác với mã thông báo truy cập bị lỗi. - machete