2009-07-08 8 views
6

Tôi đang tìm một số hướng dẫn về cách tốt nhất để xác thực với WebService của tôi. Ngay bây giờ, tôi có một WebService chuẩn trên .NET 3.5 và một trang web MVC nằm trên đầu trang của WebService này.Sử dụng OpenID với WebService: Cách tốt nhất để xác thực?

Trang web MVC sử dụng OpenID để xác thực người dùng và trong giai đoạn phát triển, chúng tôi chỉ đơn giản là chuyển Mã định danh OpenID được xác nhận quyền sở hữu của người dùng cho WebService để xác thực. Rõ ràng đây không phải là những gì chúng tôi sẽ phát hành cho khách hàng khi chúng tôi phát trực tiếp.

Vì vậy, câu hỏi của tôi là: Cách tốt nhất để xác thực với WebService là gì?

Một số API tôi đã chơi xung quanh bằng cách sử dụng Mã xác thực. Một ý tưởng khác mà chúng tôi đã có, khi kết nối với WebService, chuyển cho khách hàng một khóa mã hóa mà họ có thể sử dụng cho tất cả các lần chuyển.

Tôi đang suy nghĩ to ở đây và một lần nữa, mọi trợ giúp đều được đánh giá cao! Cảm ơn!

...

UPDATE: Ngay bây giờ tôi đã tạo ra một SoapAuthenticationHeader tùy chỉnh trong đó có một tài sản OpenIdURL. Điều này được sử dụng trên tất cả các cuộc gọi dịch vụ để xác thực người dùng. Vấn đề là hai lần:

  1. Nếu tin tặc biết OpenIdURL của người dùng, họ có thể dễ dàng truy cập vào WebService.
  2. OpenIdURL hiện được chuyển thành văn bản thuần túy.

Vì vậy, tôi có thể chuyển khóa mã hóa cho máy khách khi kết nối với WebService và yêu cầu khách hàng mã hóa OpenIdURL trong tiêu đề SoapAuthentication. Nhưng tôi không chắc chắn về cách đi tốt nhất về điều đó ...

+0

Khi bạn nói "dịch vụ web chuẩn" nghĩa là dịch vụ ASMX cũ hay bạn đang sử dụng WCF? –

+0

Điều này gần với những gì tôi mong đợi, nhưng nó sẽ là tuyệt vời nếu ai đó chỉ có thể giải thích điều này thêm một chút. http://stackoverflow.com/questions/544388/openid-authentication-and-api-access –

+0

Tôi đang sử dụng ASMX WebService chuẩn và MVC đang truy cập WebService dưới dạng tham chiếu dịch vụ (mà tôi nghĩ là WCF vỏ bánh?). –

Trả lời

3

Bạn có thể muốn có một cái nhìn tại OAuth:

http://oauth.net/

(Sử dụng http://oauth.net/code/ cho mã hóa.)

Vì nó được hướng cụ thể cho kịch bản này (Open ID là không, thực sự).

Có một câu hỏi về SA mà hỏi về cách tốt nhất để đảm bảo một dịch vụ web, và Open ID và OAuth đều thảo luận:

Web Service Authentication using OpenID

+0

Khi bạn nói "kịch bản này", bạn đang đề cập đến cái nào? Dịch vụ ASMX? –

+0

Cảm ơn, điều này đã chỉ cho tôi đi đúng hướng. Tôi muốn xem những gì cộng đồng còn lại phải chia sẻ, trước khi tôi đánh dấu câu trả lời này. Mặc dù tôi không nghĩ rằng mình cần tất cả chức năng mà OAuth cung cấp, trang Quy trình làm việc của giao thức cung cấp một số thông tin tuyệt vời về Mã thông báo yêu cầu và Mã truy cập. –

+0

@John Saunders: Tôi đang giới thiệu Open ID so với OAuth, không thực sự là ASMX so với dịch vụ web WS- *. ID mở không thực sự có ý nghĩa để sử dụng với API, trong khi OAuth là. – casperOne

0

dịch vụ web ASMX (mà Microsoft hiện nay coi là "cũ") không có khả năng sử dụng OpenID để xác thực. Họ chỉ có thể sử dụng những gì IIS cung cấp cho họ. Bạn có thể có thể thêm một SoapExtension mà sẽ làm xác thực OpenID cho họ, nhưng tôi sẽ không dành nhiều thời gian ở đó.

Tôi không biết đủ về OpenID để chắc chắn, nhưng tôi nghi ngờ nó có thể tích hợp với WCF thông qua bảo mật liên kết. Tôi chắc rằng người khác sẽ trả lời với chi tiết về điều đó.

+0

Lời xin lỗi của tôi. Ngay bây giờ tôi đã tạo ra một SoapAuthenticationHeader tùy chỉnh có một thuộc tính OpenIdURL. Điều này được sử dụng trên tất cả các cuộc gọi dịch vụ để xác thực người dùng. –

+0

Bạn có thể cập nhật câu hỏi của mình với thông tin đó không? Đặc biệt, nếu bạn đã có tiêu đề này, bạn đang tìm kiếm thêm gì? –

+0

Điều gì, "cũ"? Oh, Microsft ... ASMX WebServices thật tuyệt! :) –

0

Đây không phải là thực sự là một câu trả lời, nhưng tôi không thể để lại ý kiến ​​...

Bạn nói "Tôi có một WebService tiêu chuẩn trên .NET 3.5, và một trang web MVC mà ngồi trên đầu trang của WebService này ".

Tôi có thể thoát khỏi cơ sở ở đây, nhưng ngôn ngữ ngụ ý rằng cả hai đều ngồi trên cùng một máy chủ. Nếu vậy, tại sao bạn không thể chia sẻ cơ sở dữ liệu người dùng và mã thông báo cookie?

James

+0

Có thể hoặc không thể ngồi trên cùng một máy chủ. Sẽ có những trường hợp cả hai xảy ra. –