Helpex - Trao đổi & giúp đỡ Đăng nhập

Tái cấu trúc WSO2 API Manager Quản lý khóa Kiến trúc xung quanh ...

Trình quản lý API WSO2 là một giải pháp hoàn chỉnh để thiết kế và xuất bản API, tạo và quản lý cộng đồng nhà phát triển và để định tuyến lưu lượng truy cập API. Nó thúc đẩy các thành phần quản trị, bảo mật và quản trị sẵn sàng sản xuất từ ​​Xe buýt dịch vụ doanh nghiệp WSO2, Máy chủ nhận dạng WSO2 và Đăng ký quản trị WSO2. Ngoài ra, nó tận dụng Trình giám sát hoạt động kinh doanh WSO2 để phân tích dữ liệu lớn, cung cấp cho bạn cái nhìn sâu sắc tức thì về hành vi API.

Một trong những hạn chế chúng tôi gặp phải trong Trình quản lý API cho đến nay là sự tích hợp chặt chẽ với Máy chủ Nhận dạng WSO2 . Máy chủ nhận dạng WSO2 đóng vai trò là trình quản lý khóa, phát hành và xác thực mã thông báo OAuth.

Với kiến ​​trúc được tân trang (vẫn đang được thảo luận), chúng tôi dự định tạo tất cả các điểm tích hợp với trình quản lý khóa, có thể mở rộng - để bạn có thể mang vào máy chủ ủy quyền OAuth của riêng mình. Và cũng - chúng tôi sẽ gửi sản phẩm với các điểm mở rộng tiêu chuẩn. Các điểm mở rộng này được xây dựng xung quanh các cấu hình OAuth 2.0 tương ứng. Trong trường hợp máy chủ ủy quyền của bạn lệch khỏi tiêu chuẩn, bạn cần triển khai giao diện KeyManager và cắm vào triển khai của riêng bạn.

Tái cấu trúc WSO2 API Manager Quản lý khóa Kiến trúc xung quanh ... 

Nhà xuất bản API

Nhà phát triển API trước tiên đăng nhập vào Nhà xuất bản API và tạo API với tất cả các siêu dữ liệu liên quan và xuất bản nó lên API Store và API Gateway.

Nhà xuất bản API cũng sẽ xuất bản siêu dữ liệu API vào máy chủ ủy quyền bên ngoài thông qua điểm cuối Đăng ký bộ tài nguyên OAuth [1].

Yêu cầu mẫu:

{ 
"name": "Photo Album", 
"icon_uri": "http://www.example.com/icons/flower.png", 
"scopes": [ "http://photoz.example.com/dev/scopes/view", 
  "http://photoz.example.com/dev/scopes/all" ], 
"type": "http://www.example.com/rsets/photoalbum" 
} 

tên YÊU CẦU. Một chuỗi có thể đọc được của con người mô tả một tập hợp một hoặc nhiều tài nguyên. Tên này CÓ THỂ được sử dụng bởi máy chủ ủy quyền trong giao diện người dùng của chủ sở hữu tài nguyên cho chủ sở hữu tài nguyên.

icon_uri TÙY CHỌN. Một URI cho một biểu tượng đồ họa đại diện cho bộ tài nguyên. Biểu tượng được tham chiếu CÓ THỂ được sử dụng bởi máy chủ ủy quyền trong giao diện người dùng của chủ sở hữu tài nguyên cho chủ sở hữu tài nguyên.

phạm vi BẮT BUỘC. Một mảng cung cấp các tham chiếu URI của các mô tả phạm vi có sẵn cho tập tài nguyên này.

gõ TÙY CHỌN. Một chuỗi xác định duy nhất ngữ nghĩa của tập tài nguyên. Ví dụ: nếu bộ tài nguyên bao gồm một tài nguyên duy nhất là xác nhận quyền sở hữu sử dụng ngữ nghĩa khiếu nại được tiêu chuẩn hóa cho "địa chỉ email được xác minh", giá trị của thuộc tính này có thể là URI xác định cho khiếu nại này.

Trả lời mẫu:

HTTP/1.1 201 
Created Content-Type: application/json 
ETag: (matches "_rev" property in returned object) ... 

{ "status": "created", "_id": (id of created resource set), 
  "_rev": (ETag of created resource set) 
} 

Mục tiêu của việc xuất bản các tài nguyên lên máy chủ ủy quyền là làm cho nó nhận thức được các tài nguyên có sẵn và các phạm vi liên quan đến chúng. Quản trị viên danh tính có thể xây dựng mối quan hệ giữa các phạm vi này và vai trò doanh nghiệp. Về cơ bản, bạn có thể liên kết phạm vi với vai trò doanh nghiệp.

Lưu trữ API

Nhà phát triển ứng dụng đăng nhập vào API Store và khám phá các API mà anh ấy / cô ấy muốn cho ứng dụng của mình và đăng ký chúng - và cuối cùng tạo ra một ứng dụng. Mỗi ứng dụng được xác định duy nhất bởi id khách hàng của nó. Có hai cách để liên kết id khách hàng với ứng dụng được tạo trong API Store.

1. Nhà phát triển ứng dụng mang đến id khách hàng.

Nhà phát triển ứng dụng tạo id khách hàng ngoài băng tần với máy chủ ủy quyền và liên kết id khách hàng với ứng dụng anh ta vừa tạo trong Cửa hàng API. Trong trường hợp này, điểm cuối Đăng ký khách hàng động của Dịch vụ ủy quyền không được sử dụng (Không có bước 3 & 4).

2. Cửa hàng API gọi điểm cuối Đăng ký khách hàng động của Máy chủ ủy quyền bên ngoài.

Khi ứng dụng được tạo bởi nhà phát triển ứng dụng (bằng cách nhóm một nhóm API) - API Store sẽ gọi điểm cuối Đăng ký khách hàng động của máy chủ ủy quyền.

Yêu cầu mẫu (Bước 3):

POST /register HTTP/1.1 
Content-Type: application/json 
Accept: application/json 
Host: authz.server.com 

{ 
"client_name": "My Application”, 
"redirect_uris":[" https://client.org/callback","https://client.org/callback2 "], "token_endpoint_auth_method":"client_secret_basic", 
"grant_types": ["authorization_code" , "implicit"], 
"response_types": ["code" , "token"], 
"scope": ["sc1" , "sc2"], 
} 

client_name: Tên người có thể đọc được của khách hàng sẽ được trình bày cho người dùng trong khi ủy quyền. Nếu bị bỏ qua, máy chủ ủy quyền CÓ THỂ hiển thị giá trị "client_id" thô cho người dùng. Điều được khuyến nghị là khách hàng luôn gửi trường này.

client_uri: URL của một trang web cung cấp thông tin về khách hàng. Nếu có, máy chủ NÊN hiển thị URL này cho người dùng cuối theo cách có thể nhấp. Điều được khuyến nghị là khách hàng luôn gửi trường này.

logo_uri: URL tham chiếu logo cho khách hàng. Nếu có, máy chủ NÊN hiển thị hình ảnh này cho người dùng cuối trong quá trình phê duyệt. Giá trị của trường này PHẢI trỏ đến tệp hình ảnh hợp lệ.

scope: Danh sách các giá trị phạm vi được phân tách bằng dấu cách mà máy khách có thể sử dụng khi yêu cầu mã thông báo truy cập. Các ngữ nghĩa của các giá trị trong danh sách này là dịch vụ cụ thể. Nếu bị bỏ qua, một máy chủ ủy quyền CÓ THỂ đăng ký một máy khách với một phạm vi mặc định.

Grant_types: Mảng các loại cấp OAuth 2.0 mà khách hàng có thể sử dụng.

answer_types: Mảng các loại phản hồi OAuth 2.0 mà máy khách có thể sử dụng.

token_endpoint_auth_method: Phương thức xác thực được yêu cầu cho điểm cuối mã thông báo.

redirect_uris: Mảng các giá trị URI chuyển hướng để sử dụng trong các luồng dựa trên chuyển hướng như mã ủy quyền và các luồng ẩn.

Phản hồi mẫu (Bước 4):

HTTP/1.1 200 OK 
Content-Type: application/json 
Cache-Control: no-store 
Pragma: no-cache 

{ 
"client_id":"iuyiSgfgfhffgfh", 
"client_secret": "hkjhkiiu89hknhkjhuyjhk", 
"client_id_issued_at":2343276600, 
"client_secret_expires_at":2503286900, 
"redirect_uris":[" https://client.org/callback ", " https://client.org/callback2 "], 
"grant_types": "authorization_code", 
"token_endpoint_auth_method": "client_secret_basic"
} 

Ứng dụng khách OAuth

Điều này nằm ngoài phạm vi của Trình quản lý API. Ứng dụng khách có thể nói chuyện với máy chủ ủy quyền bên ngoài thông qua bất kỳ loại cấp nào mà nó hỗ trợ và nhận được mã thông báo truy cập [3]. Tham số phạm vi là tùy chọn trong tất cả các yêu cầu mã thông báo - khi bị khách hàng bỏ qua, máy chủ ủy quyền có thể liên kết phạm vi mặc định với mã thông báo truy cập. Nếu hoàn toàn không có phạm vi nào được sử dụng - thì API Gateway có thể thực hiện kiểm tra ủy quyền dựa trên các tham số khác được liên kết với ứng dụng khách OAuth, người dùng cuối, tài nguyên và hành động.

Nếu khách hàng gửi một tập hợp phạm vi với yêu cầu cấp OAuth, thì các phạm vi này sẽ chỉ có ý nghĩa với máy chủ ủy quyền nếu chúng tôi đã xuất bản siêu dữ liệu API vào máy chủ ủy quyền bên ngoài thông qua điểm cuối Đăng ký bộ tài nguyên OAuth - từ Nhà xuất bản API. Dựa trên vai trò của người dùng và phạm vi được liên kết với vai trò, máy chủ ủy quyền có thể phát hành mã thông báo truy cập, chỉ cho một tập hợp con các yêu cầu phạm vi của máy khách OAuth.

Thông tin xác thực khách hàng Cấp loại yêu cầu mẫu:

POST / mã thông báo HTTP / 1.1 

Máy chủ: server.example.com Ủy quyền: Basic Base64Encode (ID khách hàng: Bí mật khách hàng) Loại nội dung: application / x-www-form-urlencoding 

Grant_type = client_credentials 

Trả lời mẫu:

HTTP/1.1 200 OK 
Content-Type: application/json;charset=UTF-8 
Cache-Control: no-store Pragma: no-cache 

{ 
"access_token":"2YotnFZFEjr1zCsicMWpAA", 
"token_type":"example", 
"expires_in":3600, 
"example_parameter":"example_value" 
} 

Chủ sở hữu tài nguyên Mật khẩu loại cấp Yêu cầu mẫu:

POST /token HTTP/1.1 Host: server.example.com 
Authorization: Basic Base64Encode(Client ID:Client Secret) 
Content-Type: application/x-www-form-urlencoded 

grant_type=password&username=johndoe&password=A3ddj3w

Trả lời mẫu:

HTTP/1.1 200 OK 
Content-Type: application/json;charset=UTF-8 
Cache-Control: no-store Pragma: no-cache 

{ 
"access_token":"2YotnFZFEjr1zCsicMWpAA", 
"token_type":"example", "expires_in":3600, 
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA", 
"example_parameter":"example_value" 
} 

Cổng API

API Gateway sẽ chặn tất cả các thông báo chảy giữa ứng dụng khách OAuth và API - và trích xuất mã thông báo truy cập đi kèm trong tiêu đề Ủy quyền HTTP. Khi mã thông báo truy cập được trích xuất, API Gateway sẽ gọi điểm cuối Intropection [4] của máy chủ ủy quyền.

Yêu cầu mẫu:

POST /introspect HTTP/1.1
Host: authserver.example.com
Content-type: application/x-www-form-urlencoded
Accept: application/json
Authorization: Basic czZCaGRSa3F0Mzo3RmpmcDBaQnIxS3REUmJuZlZkbUl3

token=X3241Affw.4233-99JXJ

Trả lời mẫu:

{ 
"active": true, 
"client_id":"s6BhdRkqt3", 
"scope": "read write dolphin", 
"sub": "2309fj32kl", 
"user_id": "jdoe", 
"aud": "https://example.org/protected-resource/*", 
"iss": "https://authserver.example.com/" 
} 

hoạt động YÊU CẦU. Chỉ báo Boolean về việc mã thông báo được trình bày có đang hoạt động hay không.

exp TÙY CHỌN. Dấu thời gian nguyên, được đo bằng số giây kể từ ngày 1 tháng 1 năm 1970 UTC, cho biết khi nào mã thông báo này sẽ hết hạn.

iat TÙY CHỌN. Dấu thời gian nguyên, được đo bằng số giây kể từ ngày 1 tháng 1 năm 1970 UTC, cho biết thời điểm ban đầu mã thông báo này được phát hành.

phạm vi TÙY CHỌN. Danh sách các chuỗi được phân tách bằng dấu cách biểu thị các phạm vi được liên kết với mã thông báo này.

client_id YÊU CẦU. Mã định danh khách hàng cho OAuth Client đã yêu cầu mã thông báo này.

TÙY CHỌN phụ. Mã định danh có thể đọc được bằng máy cục bộ theo AS của Chủ sở hữu tài nguyên đã ủy quyền mã thông báo này.

user_id YÊU CẦU. Mã định danh có thể đọc được cho người dùng đã ủy quyền mã thông báo này.

TÙY CHỌN aud. Mã định danh chuỗi dành riêng cho dịch vụ hoặc danh sách mã định danh chuỗi đại diện cho đối tượng dự định cho mã thông báo này.

TÙY CHỌN NGAY LẬP TỨC. Chuỗi đại diện cho công ty phát hành mã thông báo này.

token_type TÙY CHỌN. Loại mã thông báo như được xác định trong OAuth 2.0

Khi Cổng API nhận được phản hồi nội bộ mã thông báo từ máy chủ ủy quyền, nó sẽ kiểm tra xem ứng dụng khách (id khách hàng) đã đăng ký API tương ứng hay chưa và sau đó cũng sẽ xác thực phạm vi. API Gateway biết các phạm vi cần thiết cho API và phản hồi nội quan trả về các phạm vi được liên kết với mã thông báo truy cập.

Nếu mọi thứ đều ổn, API Gateway sẽ tạo JWT và gửi nó đến API xuôi dòng. JWT được tạo có thể tùy chọn bao gồm cả các thuộc tính người dùng. Trong trường hợp đó, API Gateway sẽ nói chuyện với điểm cuối UserInfo của máy chủ ủy quyền.

Ngoài ra - Cổng API cũng có thể chuyển mã thông báo truy cập - mà không cần xác thực mã thông báo truy cập và phạm vi liên quan của nó. Trong trường hợp đó, API Gateway sẽ chỉ thực hiện điều tiết và giám sát.

Điểm cuối an toàn

Trong kiến ​​trúc được tân trang lại được đề xuất này, Trình quản lý API WSO2 phải nói chuyện với các điểm cuối được trình bày bởi trình quản lý khóa.

  • Đăng ký tập tài nguyên
  • Điểm cuối đăng ký khách hàng năng động
  • Điểm cuối nội tâm
  • Điểm cuối của người dùng
Đối với ba điểm cuối đầu tiên, Trình quản lý API sẽ chỉ hoạt động như một hệ thống đáng tin cậy. Việc triển khai KeyManager tương ứng sẽ biết cách xác thực với các điểm cuối đó. Điểm cuối OpenID Connect UserInfo sẽ được gọi với mã thông báo truy cập do người dùng cung cấp, trong thời gian chạy. Điều này sẽ chỉ hoạt động nếu mã thông báo truy cập tương ứng có các đặc quyền để đọc hồ sơ của người dùng từ máy chủ ủy quyền.

Tài liệu tham khảo

[1]: http://tools.ietf.org/html/draft-hardjono-oauth-resource-reg-02

[2]: http://tools.ietf.org/html/draft-ietf-oauth-dyn-reg-19

[3]: http://tools.ietf.org/html/rfc6749

[4]: http://tools.ietf.org/html/draft-richer-oauth-introspection-06

4 hữu ích 0 bình luận 72k xem chia sẻ

Có thể bạn quan tâm

loading