2015-01-28 13 views
5

Tôi đã vật lộn với cách đơn giản hóa xác thực WebAPI/Identity cho WebAPI hiện tại/tương lai của chúng tôi. Tôi mới ở đây, nhưng tôi sẽ giải thích nó là tốt nhất có thể. Chúng tôi bắt đầu với một WebAPI duy nhất và thiết lập ASP.Net Identity để xử lý xác thực và như vậy. Sau đó, chúng tôi thiết lập khác, và chẳng mấy chốc nó sẽ là 30.Xác thực nhiều WebAPI bằng một lớp Xác thực danh tính duy nhất

What we currently have

Vấn đề ở đây là rõ ràng - cho mỗi WebAPI mới chúng ta phải cắm vào một lớp MS nhận dạng ủy quyền. Trong một số trường hợp, chỉ có một WebAPI đơn lẻ sẽ hoạt động, nhưng trong trường hợp này đây là các sản phẩm hoàn toàn riêng biệt (cộng với thiết kế xấu của nó).

Vì vậy, chúng tôi muốn bắn cho một cái gì đó như thế này:

What we've been asked to do

Nhưng tôi có một thời gian khó khăn để tìm hiểu làm thế nào mỗi WebAPI sẽ nhận được thông tin tài khoản để tôi có thể kiểm tra vai trò và như vậy.

Tôi đã đọc nhiều bài đăng về xác thực WebAPI như: thisthisthis nhưng có vẻ như mọi thứ tôi tìm thấy phải đảm bảo rằng SINGLE WebAPI và chúng tôi biết cách thực hiện điều đó. Nó giống như những gì chúng ta cần là một cách tiếp cận SSO cho WebAPI của chúng ta. Nó gần như có vẻ như chúng ta cần một cái gì đó giống như cách tiếp cận bên ngoài xác thực (như Facebook, Twitter, vv) nhưng sử dụng DB phụ trợ riêng của chúng tôi - Tôi chỉ không biết thuật ngữ thích hợp.

Vì vậy, tôi chuyển sang các chuyên gia để được giúp đỡ trong việc tôi đứng đầu đúng hướng:

  • Có thực tế phổ biến để có mỗi WebAPI có nó là của riêng lớp xác thực/uỷ quyền mà mỗi điểm với cùng DB ?
  • Khái niệm lớp auth đơn có được tích hợp sẵn vào WebAPI/Identity hoặc tôi có phải làm điều đó từ đầu không?
  • Có phải là Authentication Filter những gì chúng tôi nên sử dụng không?

Tôi có thể tấn công tất cả lại với nhau đằng sau hậu trường, nhưng có cảm giác như có một câu trả lời rõ ràng rằng tôi đang thiếu.

Có cách nào tích hợp để thiết lập một "ủy thác" giữa mỗi WebAPI và một API xác thực để làm một cái gì đó như thế này:

Trust flow

Đây là hướng chúng tôi hiện đang hướng:

Current Direction

Nếu tôi chỉ có thể có được sự thúc đẩy chung về đúng hướng, tôi sẽ vui mừng như cú đấm. Tôi chỉ không muốn phát minh lại bánh xe.

Oh, và trước khi tôi quên, chúng ta đang sử dụng asp.net 4.5, WebAPI 2, nhận dạng 2, trên IIS

Cảm ơn bạn cho bất kỳ con trỏ.

Trả lời

2

Điều bạn đang tìm kiếm là Danh tính được liên kết cho trang web của riêng bạn và là điều mà Thinktecture's Identity Server nhắm đến để giải quyết. documentation có lẽ là nơi tốt nhất để bắt đầu

+0

Vâng, tôi cũng đã đọc về điều đó hôm nay nhưng đã để nó ra khỏi yêu cầu của tôi ở trên. Tôi ủng hộ vì tôi đọc một số bình luận từ những người khác nói rằng bạn không muốn làm điều đó như thế. BAO GIỜ - dựa trên điểm số và khuyến nghị SO của bạn, có vẻ như tôi cần nghiên cứu và tự nghiên cứu nó. Đó là bài tập về nhà của tôi cho tối nay! Cảm ơn Russ – PRB

+0

@PRB - không phải lo lắng. Danh tính liên kết, Nhận dạng dựa trên xác nhận quyền sở hữu, WS-Federation, SAML, STS vv có thể là một lĩnh vực để điều hướng. Tôi đã thấy IdentityServer được sử dụng thành công để cung cấp nhận dạng dựa trên xác nhận quyền sở hữu cho một số apis web. Tôi sẽ không gọi bản thân mình là một chuyên gia bảo mật để chỉ có thể khuyên bạn nên nghiên cứu và rút ra kết luận của riêng bạn. Tôi cũng khuyên bạn nên tải xuống bản PDF của Xác nhận quyền sở hữu dựa trên Nhận dạng và Kiểm soát quyền truy cập - https://msdn.microsoft.com/en-us/library/ff423674.aspx –

1

Không đưa ra câu trả lời quá đơn giản nhưng không phải bạn chỉ xây dựng một API như một fasad xung quanh những người khác. API cấp cao nhất xử lý tất cả ủy quyền và sau đó chuyển tiếp các cuộc gọi đến các API khác của bạn.Tôi không phải là một kiến ​​trúc sư nhưng đó là những gì tôi sẽ làm.

+0

Có, bạn là chính xác. Cách tiếp cận đó là những gì chúng tôi đã nghĩ đến trong "tất cả trong một WebAPI" được đề cập ở trên, nhưng Facade đó sẽ phải có kiến ​​thức về mọi phương thức trong mọi WebAPI. Và nếu chúng ta muốn đứng lên một máy chủ tối giản chỉ với một vài thiết lập WebAPIs, nó sẽ yêu cầu thay đổi mã. Tôi hy vọng điều đó có ý nghĩa, nhưng tôi muốn cảm ơn bạn vì đã nêu lên điều đó, vì tôi không rõ ràng trong tuyên bố ban đầu của tôi. ;) – PRB

+0

Một điều khác mà tôi có thể không rõ ràng là mỗi WebAPI hiện có hàng trăm điểm cuối để thiết lập mặt tiền cho tất cả chúng sẽ là một cam kết (trừ khi tôi thiếu thuyền) và sẽ tồi tệ hơn khi chúng tôi thêm các API mới. Trừ khi có một cách để vượt qua chúng một cách mù quáng? [thở dài] Không chắc chắn ở đó. Nhưng điều đó thực sự nghiêng về phía một bộ lọc xác thực tại thời điểm đó - nó không quan tâm những gì bạn đang yêu cầu, nó chỉ là công việc và chuyển yêu cầu xuống dòng. ** Cảm ơn! ** – PRB

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