2010-08-28 32 views
14

Có thể đạt được SSO với OpenId tích hợp trên App Engine không? Tôi đã cố gắng tích hợp ứng dụng Marketplace và giúp người dùng đăng nhập khi đến từ Google Apps (bảng điều khiển quản trị hoặc điều hướng chung). Tôi thất bại thảm hại, sau đó bây giờ tôi thấy điều này:Đăng nhập một lần với Google Apps + App Engine

"Một ngoại lệ cho điều này là các ứng dụng làm lai OpenID/OAuth - danh sách trắng hiện không hoạt động với phương pháp này". (từ here)

Tôi giả sử rằng tôi phải triển khai OpenId bằng thư viện thay vì sử dụng thư viện tích hợp để đạt được SSO với Google Apps trong ứng dụng của tôi? Hoặc nếu có thể với OpenId tích hợp, có ví dụ nào ở đây cho thấy cách thực hiện điều này không?

+0

Bạn không nói cụ thể liệu bạn đã xác nhận rằng ứng dụng thị trường bạn đang tích hợp có sử dụng OpenID/OAuth lai hay ứng dụng thị trường nào. –

Trả lời

6

Sau đó Google đã đăng một bài viết về làm thế nào để làm điều đó bằng Python:

http://code.google.com/googleapps/marketplace/tutorial_python_gae.html

Bản tóm tắt là:

  • Bạn phải vào danh sách trắng "Vùng OpenID" của bạn (ứng dụng tên miền) trong XML của tệp kê khai Marketplace.
  • Điểm vào được sử dụng cho điều hướng chung của Google phải chứa miền Google Apps hiện tại.
  • Điểm vào trong ứng dụng của bạn chuyển hướng người dùng chuyển miền Google Apps thành federated_identity.

Ví dụ:

from google.appengine.api import users 

# [...] 

login_url = users.create_login_url(dest_url='http://my-app.appspot.com/', 
            _auth_domain=None, 
            federated_identity=google_apps_domain_name) 
self.redirect(login_url) 
1

Err, tôi chưa có đầy đủ thông tin về tính năng này, nhưng tôi sử dụng cả JanRain Engage (Stackoverflow sử dụng) với các ứng dụng GAE. Tôi nghĩ openid4java cũng có thể thực hiện công việc.

1

Did bạn đã biết this link?

UserService userService = UserServiceFactory.getUserService(); 

if (userService.isUserLoggedIn()) { 
    User user = userService.getCurrentUser(); 
    /* ...Do something with user.getFederatedIdentity(), which is the OpenID URL. */ 
} 
2

này đã làm việc cho tôi trong Java:

Set<String> attributesRequest = new HashSet<String>(); 
String loginRealm = "http://myapp.appspot.com"; //Important that it is exactly the same as in application-manifest.xml, watch out for trailing slashes. 
String destinationURL = req.getRequestURI() + "?" + req.getQueryString(); 
String federatedIdentity = null; 
String authDomain = req.getParameter("hd"); //hd is the default parameter name. Contains the google apps domain name of the user logging on. example.com for example. 
String loginUrl = userService.createLoginURL(destinationURL, federatedIdentity, authDomain, attributesRequest);  

Hãy chắc chắn bao gồm

<Edition id="free"> 
    <Name>Cloud App Studio</Name> 
    <Extension ref="navLink" /> 
    <Extension ref="realm" /> 
</Edition> 

trong ứng dụng manifest.xml. Đó là, nếu nó miễn phí. Phần quan trọng là bao gồm các ref để lĩnh vực.

+1

Cảm ơn Paul, điều này hoạt động tuyệt vời! Lưu ý cho người khác: đặt điều này trong servlet ánh xạ tới/_ah/login_required như đã đề cập ở đây: http://code.google.com/appengine/articles/openid.html – Stefan

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