2016-08-27 23 views
15

Tôi đang xem xét một dự án mới mà chúng tôi đang lên kế hoạch thực hiện API trước tiên, để chúng tôi có thể triển khai ứng dụng web và bản địa trên đầu trang hội nhập bên. Tất cả đều khá chuẩn.Kiểm tra API tự động của API được bảo vệ bởi OAuth2/OpenID Connect

Chúng tôi cũng muốn có một bộ đầy đủ các kiểm tra tự động cho API, cả hai để đảm bảo rằng nó hoạt động mà không có hồi quy, và để đảm bảo nó đáp ứng các yêu cầu. Một lần nữa, khá chuẩn, nhưng vì chúng tôi đang thử nghiệm API, chúng tôi sẽ sử dụng một ứng dụng khách HTTP trong mã và không phải là một trình duyệt web.

Chúng tôi đã xem xét oauth2/OpenID Connect để tạo điều kiện xác thực và ủy quyền cho API - về cơ bản để khách hàng có thể xác thực, nhận mã thông báo truy cập và sử dụng nó để truy cập tất cả các tài nguyên API.

Điều tôi đang cố gắng giải quyết là một cách hay để làm các thử nghiệm tự động hoạt động với phần oauth2 để có thể thực sự gọi API. Ý nghĩ đầu tiên là sử dụng các loại tài khoản "client_credentials" hoặc "password", cả hai có vẻ như chúng sẽ hoạt động cho những gì chúng ta muốn, nhưng chúng không được đề cập trong đặc tả OpenID Connect, và dĩ nhiên là "mật khẩu" "ít nhất là nó thường không được coi là một ý tưởng hay.

Đây có phải là cách tốt nhất để đạt được điều này hoặc có các phương pháp hay nhất khác cho tình huống này có thể được sử dụng với các luồng khác, nhưng không có trình duyệt web?

Chỉnh sửa: sau khi đọc (nhiều) hơn, tôi có một gói mới. Chạy thử nghiệm hoàn toàn ngoại tuyến, sử dụng triển khai riêng biệt với cơ sở dữ liệu riêng biệt và dữ liệu gieo trực tiếp vào cơ sở dữ liệu trước khi chạy thử nghiệm và sau đó sử dụng luồng OpenID Connect chuẩn, nhưng:

  • Khách hàng được đánh dấu cơ sở dữ liệu như cho mục đích thử nghiệm. Đây là một bit quan trọng, và chỉ có thể nếu khách hàng có thể được đăng ký trực tiếp vào cơ sở dữ liệu mà không phải trải qua logic nghiệp vụ.
  • nhắc = none
  • login_hint = tên người dùng để có được một thẻ truy cập cho
  • phạm vi chứa "thử nghiệm"

Hệ thống này sau đó có thể phát hiện sự kết hợp của sự kiện, và tự động xác nhận tên người dùng được cung cấp mà không cần phải đi qua một trình duyệt.

Điều này có vẻ hợp lý không? đây có phải là cách tốt hơn không?

+0

Bạn đã thử [công cụ chứng nhận OpenID Connect] (https://openid.net/certification/testing/) do OpenID Foundation cung cấp chưa? –

+0

Sự hiểu biết của tôi là điều này là để thử nghiệm các dịch vụ OpenID Connect, trong khi tôi quan tâm hơn đến việc kiểm tra các dịch vụ API khác sẽ được sản xuất và bảo vệ sau Thẻ truy cập kết nối OAuth2/OpenID, có nghĩa là để gọi chúng tôi cần một số cách để có được các Thẻ truy cập hợp lệ theo chương trình. – Graham

+0

Tôi không hiểu cách tạo người dùng thử nghiệm đặc biệt được bảo mật? Điều gì xảy ra nếu ai đó truy cập vào môi trường thử nghiệm của bạn hoặc tìm ra cách tạo người dùng thử nghiệm trên sản xuất? Nó không có vẻ như là giải pháp phù hợp với tôi. –

Trả lời

5

Vì bạn đang tìm cách kiểm tra API, việc bạn có được số access_token không thông qua trình duyệt hay thông qua một số cách khác. Vì vậy, có (ít nhất) hai giải pháp:

  1. Cách khác có thể là khoản trợ cấp client_credentials. Bạn sẽ phải đặt Máy chủ ủy quyền trả lại access_token rằng giống như một access_token sẽ được trả lại cho người dùng trong luồng OpenID Kết nối thông qua trình duyệt nhưng tùy thuộc vào triển khai AS của bạn.

  2. Bootstrap khách hàng của bạn sử dụng một dòng trình duyệt OpenID Connect thường xuyên để tạo ra một refresh_token cùng của một access_token và lưu trữ cả hai thẻ với khách hàng thử nghiệm của bạn cùng với client_idclient_secret lúc cấu hình.Sau đó, khách hàng thử nghiệm của bạn có thể truy cập API cho đến khi số access token hết hạn và sau đó nhận được access_token mới thông qua loại tài trợ refresh_token (tận dụng số client_idclient_secret).

OpenID Connect bản thân, xác thực người dùng và id_token không liên quan đến các API của bạn mà nên quan tâm đến chỉ access_token.

+0

Để xây dựng trên giải pháp 1: tạo một khách hàng thử nghiệm và thêm tất cả các yêu cầu cần thiết để vượt qua các yêu cầu ủy quyền cho điểm cuối. Nếu điều này kiểm tra xác nhận quyền sở hữu 'phụ', hãy thêm xác nhận quyền sở hữu cho ứng dụng khách thử nghiệm có tên 'phụ', thường được yêu cầu khi chỉ xác thực người dùng bằng oidc sẽ tạo ra phụ. – Ian

Các vấn đề liên quan