2010-06-29 37 views
30

Tôi đang làm việc trên dự án django mạng nội bộ (không sử dụng GAE) cho một công ty sử dụng Google Apps để đăng nhập. Vì vậy, tôi muốn người dùng của mình có thể đăng nhập vào dự án django của tôi bằng cách sử dụng thông tin đăng nhập tài khoản google của họ. OpenID có vẻ phù hợp, mặc dù có lẽ Oauth cũng có thể hoạt động?Thư viện openid/oauth nào để kết nối dự án django với Tài khoản Google Apps?

Tôi thấy rất nhiều các thư viện có tên tương tự trên mạng để kết nối hệ thống xác thực django của hệ thống đăng nhập bên ngoài:

Dưới đây là những gì tôi muốn thực hiện với tích hợp: Yêu cầu người dùng đăng nhập bằng tài khoản google của họ thay vì hệ thống django gốc. Giữ mô hình quyền của django cho những thứ như hệ thống quản trị. Vì vậy, tôi nghĩ điều đó có nghĩa là tự động tạo hồ sơ người dùng mới trong django lần đầu tiên một tài khoản mới mà chúng tôi chưa từng thấy trước khi đăng nhập.

Có ai có kinh nghiệm sử dụng bất kỳ dự án nào trong số những dự án này khuyên tôi làm việc tốt nhất không? Hoặc chỉ là lời khuyên về hoạt động/chức năng nhất nếu bạn đã thử chúng? Cảm ơn!

+0

Google không hỗ trợ OpenID của họ và hầu hết các câu trả lời không còn hoạt động (hoặc sẽ ngừng hoạt động vào tháng 4 năm 2015). Xem câu hỏi này: http://stackoverflow.com/questions/27040648/which-django-openid-library-works-with-new-google-openid –

Trả lời

17

Cuối cùng tôi đã làm việc này, vì vậy tôi sẽ trả lời câu hỏi của riêng tôi kể từ khi câu trả lời trước đây là hữu ích nhưng đừng nói toàn bộ câu chuyện.

django-openid-auth thực sự khá dễ thiết lập và sử dụng. Tệp README rất rõ ràng. Nếu bạn chỉ muốn sử dụng tài khoản google chuẩn (tức là địa chỉ @ gmail.com) sau đó bạn cấu hình nó trong settings.py với:

OPENID_SSO_SERVER_URL = 'https://www.google.com/accounts/o8/id' 

Nhưng nếu bạn muốn sử dụng một tài khoản "google apps", tức là tổ chức gmail tại miền của công ty bạn, sau đó nó phức tạp hơn. Tôi nhận được chi tiết của tôi từ this question. Để sử dụng tài khoản ứng dụng google của bạn, hãy định cấu hình settings.py của bạn thành:

OPENID_SSO_SERVER_URL = 'https://www.google.com/accounts/o8/site-xrds?hd=example.com' 
# replace example.com with your hosted google apps domain 

Trong tương lai, điều này có thể chỉ hoạt động nhưng ngày nay có thể không. Vấn đề là trong python-openid mà django-openid-auth dựa vào. Việc xây dựng tiêu chuẩn của python-openid không hiểu một số phần mở rộng giao thức mà Google đang sử dụng. (Tại sao google cần phải mở rộng giao thức? Đào qua http://groups.google.com/group/google-federated-login-api/web/openid-discovery-for-hosted-domains và báo cáo lại. Chúc may mắn.) Vì vậy, bạn cần thay vì sử dụng bản vá của adieu cho python-openid, có sẵn tại đây: http://github.com/adieu/python-openid

Cài đặt này trên con trăn mở của bạn. Bây giờ nó sẽ hoạt động.

Hãy cẩn thận với cài đặt OPENID_USE_AS_ADMIN_LOGIN vì nó yêu cầu bạn phải có tài khoản người dùng openid là 'nhân viên' hoặc 'superuser' để sử dụng quản trị không diễn ra theo mặc định. Vì vậy, bạn sẽ cần phải thực hiện quy trình 2 bước để bật openid, đăng nhập bằng openid để tạo tài khoản bằng django, sau đó sử dụng tài khoản quản trị cũ để đánh dấu tài khoản openid của riêng bạn là superuser và sau đó vô hiệu hóa quản trị viên không mở truy cập.

Một điều nữa: quản trị viên miền của bạn có thể cần bật đăng nhập mở cho miền của bạn trước khi điều này có hiệu quả. Kiểm soát tại http://www.google.com/a/cpanel/example.com/SetupIdp

+1

Bạn đã tiết kiệm được 2 ngày + giá trị công việc cho tôi. Chăm sóc bia? –

3

Tôi đã sử dụng django-openid-auth. Hoạt động tốt, có thể tạo tài khoản người dùng khi ký lần đầu. Bạn cũng có thể liên kết đăng nhập openid với tài khoản người dùng trong bảng quản trị django.

0

Tôi thích rằng Django socialregistration cho phép tôi cắm Tài khoản Google, Facebook, Yahoo và bất kỳ trang web OpenID nào khác khá dễ dàng. Bạn chỉ cần cung cấp cho các nhà cung cấp như một liên kết như sau:

<a href="/socialregistration/openid/redirect/?openid_provider={{ 'http://yahoo.com'|urlencode }}"><img src="{{MEDIA_URL}}/images/yahoo.png"/></a>

0

Họ đều là gần như giống hệt nhau. Tôi thích django-authopenid. Nó có tài liệu tuyệt vời và cực kỳ dễ sử dụng. Nó sẽ làm chính xác những gì bạn muốn và làm điều đó tốt hơn so với django-openid (đó là người duy nhất tôi đã thử).

HTH

1

Tôi biết đây là câu trả lời trễ, nhưng tôi đang làm những việc tương tự và tôi vừa phát hiện ra django-socialregistration. mà về cơ bản không OAuth, OpenID, Facebook Connect, vv Không giống như một số các tùy chọn khác, nó dường như được tích cực phát triển và sử dụng bởi rất nhiều dự án.

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