khách hàng chỉ mang keycloak: tại sao họ tồn tại?


10

Tôi đang cố gắng xoay quanh khái niệm bearer-onlykhách hàng trong Keycloak.

Tôi hiểu khái niệm công khai và bí mật và khái niệm tài khoản dịch vụ và grant_type=client_credentialsnội dung. Nhưng với bearer-only, tôi bị mắc kẹt.

Googling chỉ tiết lộ những đoạn thảo luận nói:

Bạn không thể có được mã thông báo từ keycloak với bearer-onlykhách hàng.

Các tài liệu không rõ ràng là tốt. Tất cả những gì họ nói là:

Loại truy cập chỉ mang có nghĩa là ứng dụng chỉ cho phép các yêu cầu mã thông báo mang.

Ok, nếu ứng dụng của tôi chỉ cho phép các yêu cầu mã thông báo mang, tôi làm cách nào để có được mã thông báo này nếu tôi không thể lấy nó từ Keycloak bằng cách sử dụng bí mật id / client của khách hàng?

Và nếu bạn không thể có được mã thông báo, bạn có thể làm gì? Tại sao những khách hàng này tồn tại? Ai đó có thể vui lòng cung cấp một ví dụ về việc sử dụng loại khách hàng này?

Câu trả lời:


5

Theo hiểu biết của tôi, nó được sử dụng khi bạn có một số dịch vụ nội bộ. Hãy nói rằng bạn có ServiceAServiceB. Một người dùng gọi ServiceAtrong tay gọi ServiceB. ServiceBkhông bao giờ được gọi bởi người dùng trực tiếp, chỉ bởi các dịch vụ khác. ServiceAsẽ nhận được mã thông báo bằng thông tin đăng nhập của người dùng. Và sau đó sẽ sử dụng mã thông báo này để gọi ServiceB. ServiceBsẽ không bao giờ bắt đầu đăng nhập. Nó sẽ chỉ sử dụng mã thông báo để xác minh quyền.

Trong trường hợp này, ServiceA sẽ là confidentialvà ServiceB sẽ là bearer-onlykhách hàng.


1
Vì vậy, điều này có nghĩa là nếu khách hàng của tôi chỉ mang, thì tùy chọn duy nhất có sẵn cho tôi là thực hiện các yêu cầu xác minh cho Keycloak để đảm bảo mã thông báo từ đó ServiceAhợp lệ. Đúng? Nhưng nếu đây là trường hợp, tại sao gọi Keycloak cả? Nếu khách hàng của tôi có khóa Keycloak công khai, nó có thể xác minh nó bằng khóa này mà không cần gọi Keycloak.
kurtgn

Vì phạm vi mã thông báo. Dịch vụ A phải có phạm vi khác ngoài Dịch vụ B, vì vậy bạn cần Keycload để trao đổi mã thông báo
Julian Egner

@JulianEgner Điều này có ý nghĩa, ngoại trừ Token Exchange hiện đang ở trong Bản xem trước công nghệ, không được hỗ trợ đầy đủ và phải được bật rõ ràng với Biến Env. Có bearer-onlythực sự sẵn sàng chỉ để hỗ trợ trường hợp sử dụng này chưa sẵn sàng?
vô dụng

@irbull bạn đã lấy thông tin trao đổi mã thông báo ở đâu trong bản xem trước công nghệ?
Julian Egner

@JulianEgner Nó được liệt kê ở dưới cùng của tài liệu của họ. Được liệt kê trong keycloak.org/docs/latest/securing_apps/, nó nói "Trao đổi mã thông báo là bản xem trước công nghệ và không được hỗ trợ đầy đủ. Tính năng này bị tắt theo mặc định."
irbull

5

Ý nghĩa của kiểu truy cập chỉ mang

Loại truy cập chỉ mang có nghĩa là ứng dụng chỉ cho phép các yêu cầu mã thông báo mang. Nếu điều này được bật, ứng dụng này không thể tham gia đăng nhập trình duyệt.

Vì vậy, nếu bạn chọn ứng dụng khách của mình bearer-onlythì trong trường hợp đó, bộ điều hợp keycloak sẽ không cố gắng xác thực người dùng mà chỉ xác minh mã thông báo mang. Đó là lý do tại sao tài liệu keycloak cũng đề cập đến bearer-onlyứng dụng sẽ không cho phép đăng nhập từ trình duyệt.

Và nếu bạn không thể có được mã thông báo, bạn có thể làm gì? Tại sao những khách hàng này tồn tại?

Máy khách của bạn không thể được đặt là chỉ mang trên Máy chủ Keycloak. Bạn vẫn có thể sử dụng chỉ mang trên cấu hình bộ điều hợp. Keycloak không cho phép các máy khách "chỉ mang" (khi thiết lập máy khách của bạn trên máy chủ) để lấy mã thông báo từ máy chủ. Cố gắng thay đổi ứng dụng khách của bạn thành "bí mật" trên máy chủ và chỉ đặt người mang trên cấu hình bộ điều hợp của bạn (keycloak.json).

Vì vậy, nếu bạn hiểu tuyên bố trên thì nếu bạn có hai microservice đang nói chuyện với nhau trong trường hợp, người gọi sẽ confidentialvà callee sẽbearer-only

Và Keycloak cũng đã đề cập

Ứng dụng khách duy nhất là dịch vụ web không bao giờ bắt đầu đăng nhập. Nó thường được sử dụng để bảo vệ back-end.

Vì vậy, nếu bạn muốn sử dụng bất kỳ bộ chuyển đổi nào bạn có thể sử dụng bearer-onlytùy thuộc vào nhu cầu


1
cảm ơn Subodh vì lời giải thích của bạn Vì vậy, điều này có nghĩa là nếu khách hàng của tôi chỉ mang, thì tùy chọn duy nhất có sẵn cho tôi là thực hiện các yêu cầu xác minh cho Keycloak để đảm bảo mã thông báo hợp lệ. Đúng? Nhưng nếu đây là trường hợp, tại sao gọi Keycloak cả? Nếu khách hàng của tôi có khóa Keycloak công khai, nó có thể xác minh nó bằng khóa này mà không cần gọi Keycloak.
kurtgn

@kurtgn Nếu bạn đang sử dụng bất kỳ bộ chuyển đổi nào thì chỉ tôi sẽ đề nghị sử dụng ứng dụng khách bearer-onlykhác của bạnconfidential
Subodh Joshi

Không, tôi không sử dụng adapter, tôi đang mã hóa bằng Python, thereare không adapter python cụ thể cho Keycloak, vì vậy tôi phải sử dụng libs OIDC generic
kurtgn

Thư viện nào bạn đang sử dụng với Keycloak + Tích hợp Python?
Subodh Joshi


0

Câu trả lời ngắn: bạn không thể có được mã thông báo truy cập bằng ứng dụng khách chỉ mang, nhưng bạn có thể nhận được mã thông báo truy cập mà khách hàng chỉ có người mang có thể chấp nhận sử dụng ứng dụng khách khác.

Thêm chi tiết khách hàng chỉ mang theo đại diện hữu ích đại diện cho các ứng dụng phụ, như dịch vụ web, được gọi bởi ứng dụng trước và được bảo mật bởi máy chủ ủy quyền (= keycloak)

Ứng dụng dịch vụ Web / Cuối cùng không được người dùng gọi trực tiếp, vì vậy chúng không thể phát trong luồng tương tác của người dùng Oauth2.0. Đặt tài liệu "chỉ mang" thực tế này cho máy chủ keycloak, cho phép quản trị viên định cấu hình máy khách mà không cần các giá trị bắt buộc khác (ví dụ chuyển hướng uri mật) và cho phép thông báo lỗi hữu ích nếu ai đó cố lấy mã thông báo cho máy khách đó

Tuy nhiên, điều này không có nghĩa là bạn không thể định cấu hình các vai trò cụ thể cho ứng dụng khách này: vì vậy nó cần xuất hiện trong vương quốc keycloak.

Ngoài ra, ứng dụng khách chỉ mang không cần xác minh mã thông báo truy cập đã nhận, đặc biệt, nếu tính năng bộ điều hợp (được đề xuất) này "xác minh-mã thông báo" được kích hoạt, ứng dụng khách chỉ mang không cần xác minh rằng mã thông báo truy cập đã được cấp cho nó: ứng dụng khách chỉ mang không có thuộc tính đối tượng của mã thông báo truy cập: xem https://www.keycloak.org/docs/latest/server_admin/index.html#_audience

đối với đối tượng quản lý bằng keycloak, khách hàng chỉ mang theo cần phải được đăng ký trong vương quốc keycloak.

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.