2016-10-29 19 views
9

API REST C# của tôi được gọi từ ứng dụng web AngularJS. Tôi bảo mật API Web bằng cách xác thực người dùng và đảm bảo người dùng là một phần của một nhóm cửa sổ cụ thể.Hiển thị an toàn API C# REST cho ngôn ngữ kịch bản như Python

Bây giờ khách hàng muốn tùy chọn gọi API từ tập lệnh (Python). Làm thế nào để tôi thực hiện điều này? Tôi có nên nhờ họ chuyển tên người dùng và mật khẩu như một phần của cuộc gọi json không?

+0

Tại sao không sử dụng cơ chế xác thực giống như đối với web? –

+0

Tôi đang sử dụng cookie và ủy quyền từ một máy chủ khác dự kiến ​​từ trình duyệt. Nó chỉ là không khả thi –

+2

Không có gì mà thư viện http python không thể xử lý. Nhưng nếu bạn muốn đơn giản hơn, xác thực cơ bản HTTP và openid/OAuth là khá phổ biến đối với API auth –

Trả lời

3

Sử dụng chính xác phương pháp xác thực bạn hiện đang sử dụng.

Dưới đây là ví dụ abasic sử dụng python (chưa được kiểm tra):

from requests.auth import HTTPBasicAuth 
s = requests.Session() 

# Make the initial authentication request from a session object 
s.get('https://omg.wtf/user', auth=HTTPBasicAuth('user', 'pass')) 

# All subsequent requests from that session will include any cookies set in the initial response 
r = s.get('http://omg.wtf/911') 
print(r.text) 
+0

Có thể chuyển hướng đến tập lệnh python và đặt cookie không? –

+0

chuyển hướng là gì? cookie được lưu trữ trong s = requests.Session() bạn luôn có thể thực hiện các yêu cầu mới bằng cách sử dụng cookie/phiên. –

+0

Mã ban đầu của Tweak @ SeanThorburn để yêu cầu ban đầu cũng được tạo từ đối tượng phiên. Đối tượng đó sẽ nhớ bất kỳ cookie nào được đặt trong phản hồi ban đầu và gửi các giá trị cookie đó trong các yêu cầu tiếp theo. –

4

Nếu bạn có thể làm tăng thêm tiêu đề bằng Python dễ dàng, tôi sẽ đề nghị bạn nên sử dụng xác thực token. Microsoft không cung cấp loại xác thực này trực tiếp, nhưng thông qua dự án OWIN. Nó không phải là khó sử dụng, nhưng bạn sẽ cần phải tìm hiểu cách thức các công cụ đầu tiên. Có một hướng dẫn rất tốt và toàn diện here.

Về cơ bản bạn nhận được mã thông báo (có hiệu lực trong một khoảng thời gian) bằng cách cung cấp tên người dùng/mật khẩu. Mã thông báo này được mã hóa/ký tên có nghĩa là chương trình phụ trợ của bạn sẽ tin cậy mà không cần xác thực tên người dùng/mật khẩu trên mỗi yêu cầu (điều này rất tốn kém). Sau đó, bạn cần thêm mã thông báo này vào tiêu đề Authorization bearer token hoặc thông tin tương tự cho mỗi yêu cầu. Ngoài ra, tôi nghĩ bạn có thể có mã thông báo trong cookie để duy trì tính nhất quán ngược nếu bạn muốn.

Tôi khuyên bạn nên sử dụng cùng một cơ chế trong Góc là tốt, vì bạn có thể dễ dàng thêm bộ chặn ở đó và tránh cookie và các rắc rối tiềm ẩn của CSRF với chúng.

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