2011-10-21 34 views
15

Tôi đang nghiên cứu các tùy chọn để sử dụng Shibboleth trong triển khai Django. Từ những gì tôi đã tìm thấy, mọi thứ trông hơi thưa thớt. Bất cứ ai có thể bình luận về những điều sau đây?Django và Shibboleth

  • Có ai đang sử dụng mô-đun django_shibboleth (xem http://code.arcs.org.au/gitorious/django/django-shibboleth/trees/1.1) không? Nếu vậy, bạn đã trải nghiệm những gì với mô-đun này?

  • Triển khai SAML 2 cho Django (ví dụ: django-saml2-sp) và Python nói chung (ví dụ: pysaml2) có vẻ hơi thử nghiệm và bao gồm ít tài liệu. Có ai biết về các giải pháp SAML 2 ổn định cho Django/Python không?

Cảm ơn bạn đã giúp đỡ!

+0

Bạn cần những tính năng nào? Bạn sẽ chỉ bao giờ xác thực đối với một IdP đơn lẻ hay bạn cần DS, WAYF, liên kết, giải pháp tạo tác, đăng xuất, v.v.? – JimB

+0

Câu hỏi tuyệt vời! Dự án đặc biệt này sẽ cần DS, WAYF, vv – user1007116

+0

Đặc biệt nếu bạn định sử dụng nhiều hơn các tính năng cơ bản của SAML, tôi sẽ gắn bó với phần đầu tiên của câu trả lời của tôi và đồng ý với @hrnt. Kết hợp SP shibboleth bản địa sẽ là con đường đáng tin cậy nhất. – JimB

Trả lời

3

Trong khi tôi không có kinh nghiệm với Django + Shibboleth, tôi có một số với "đồng bằng" Shibboleth.

Nếu Apache của bạn có cấu hình mod_shibboleth đúng cách, sau đó tích hợp nó với ứng dụng web là tương đối nhỏ. Kiểm tra các mô-đun django_shibboleth và bạn có thể thấy nó không chứa nhiều mã.

Cụ thể, nếu bạn có mod_shibboleth đang chạy, không sử dụng thư viện SAML 2 của bên thứ ba. Những người mang lại rất nhiều phức tạp không cần thiết.

9

Tôi khuyên bạn nên sử dụng Shibboleth Native SP (apache mod_shib). Nó cũng được thử nghiệm, có một cơ sở người dùng lớn và rất ổn định.

Tôi đã xem nhanh mô-đun django_shibboleth và có vẻ như nó phụ thuộc vào mod_shib và không thực hiện bất kỳ SAML nào trên chính nó. Về mặt này, mô-đun đó rất đơn giản và có thể hoạt động tốt.

Tôi chưa thấy bất kỳ triển khai SAML2 python hoàn chỉnh (hoặc chủ yếu là hoàn thành) nào và không có dự án đang hoạt động nào. Yêu cầu bảo mật và mật mã xml là một sự đau đớn trong python, và điều này có thể góp phần vào việc thiếu các thư viện.

[EDIT - Tôi sẽ recant một phần của] Thư viện pysaml2 có một số hoạt động phát triển, và trông khá hoàn chỉnh từ một cái nhìn lướt qua. Nó sử dụng nhị phân xmlsec1 trực tiếp cho chữ ký và mã hóa, và do đó không dựa vào bất kỳ ràng buộc lỗi thời nào. Đây có thể là đặt cược tốt nhất của bạn để sử dụng SAML2 trực tiếp trong python vào lúc này.

1

Mô-đun django-shibboleth có sẵn có thể được sử dụng để lấy các thuộc tính từ IdP và ánh xạ chúng tới người dùng trong hệ thống xác thực Django. Hầu hết công việc được thực hiện bởi chính Shibboleth, chỉ với một lượng nhỏ mã cần thiết cho việc lập bản đồ.

Bao bì có sẵn tại đây.

linuxsoft.cern.ch/internal/repos/ai6-stable/x86_64/os/Packages/django-shibsso-0.1-1.noarch.rpm

hoặc nguồn từ đây.

linuxsoft.cern.ch/internal/repos/ai6-stable/source/SRPMS/django-shibsso-0.1-1.src.rpm

Làm theo hướng dẫn Shibboleth lập Provider Shibboleth Dịch vụ địa phương của bạn (SP) để sử dụng với IdP.

Trong tệp http.conf hoặc cấu hình ứng dụng của riêng bạn trong conf.d, tạo mục nhập sau.

<Location /shibboleth> 
    AuthType shibboleth 
    ShibRequireSession On 
    ShibUseHeaders On 
    require valid-user 
</Location> 

Điều này sẽ dẫn đến URL đến/shibboleth được chuyển đến trang đăng nhập IdP. Sau khi đăng nhập thành công, một trang 404 sẽ được trả lại.

Thêm cấu hình, thay thế ứng dụng bằng tên ứng dụng của bạn.

<Location "/"> 
    SetHandler mod_python 
    PythonHandler django.core.handlers.modpython 
    SetEnv DJANGO_SETTINGS_MODULE app.settings 
    PythonDebug Off 
</Location> 

Điều này sẽ dẫn đến lỗi sau khi đăng nhập thông qua URL/shibboleth. URL hiện tại, Shibboleth.sso/ADFS, không khớp với bất kỳ thông tin nào trong số này.

Để giải quyết vấn đề này, bạn cần phải thêm phần sau vào cấu hình.

<Location /Shibboleth.sso> 
    SetHandler None 
</Location> 

/var/log/shibboleth/transaction.log sẽ cho bạn biết những thuộc tính nào được phát hành.

+0

Thay vì thiết lập 'SetHandler None' trên" /Shibboleth.sso ", sắp xếp lại cách Apache tải mô-đun cũng có thể trợ giúp. Tôi đã gặp phải tình huống tương tự với mod_passenger + mod_shib2. Ví dụ: nếu mod_shib2 được tải * sau * mod_passenger thì vị trí "/Shibboleth.sso" được xử lý bởi ứng dụng Hành khách (không phải hành vi mong muốn). Nếu mod_shib2 được tải * trước * mod_passenger - mọi thứ hoạt động như mong đợi. –