2012-12-01 4 views
2

Google AppEngine Java에서 연합 로그인을 구현하는 데 문제가 있습니다. https://developers.google.com/appengine/articles/openidApp Engine Java 연합 ID 로그인은 항상 Google 로그인으로 리디렉션됩니다.

사용자 서비스를 받고 현재 사용자를 확보 중입니다. 현재 사용자가 null이면 사용자 서비스에 내가 선택한 오픈 아이디 공급자와 함께 로그인 URL을 만들도록 요청할 것입니다 (결국 사용자는 선택할 수 있습니다). 여기서 코드

UserService userService = UserServiceFactory.getUserService(); 

User user = userService.getCurrentUser(); 

if(user == null) 
{ 
    userService.createLoginURL(request.getRequestURI(),null,"yahoo.com",null); 
    //do a redirect 
} 

있어서 UserService.createLoginURL(....) 세번째 파라미터 니펫, federatedIdentity은 (here 참조). 이 인수에 대해 지금까지 값 "yahoo.com", "http://open.login.yahooapis.com/openid20/www.yahoo.com/xrds", "https://openid.stackexchange.com/"을 사용했으며 항상 Google 계정의 로그인 페이지로 리디렉션되었습니다. 나는 또한 이러한 인수로 반환 된 URL이 매개 변수없이 생성 된 URL과 조금 다르다는 사실을 알고 있습니다.

나는 여기서 몇 가지 실수를하고 있다고 생각하지만 어디에 있는지 파악할 수 없다. 사용자가 각 공급자의 로그인 페이지로 리디렉션 될 수 있도록이 매개 변수에 정확히 무엇을 전달해야합니까?

확장 질문으로, 사용자가 인증되고 승인을 받으면 App Engine은 다음에 요청할 때 UserService.getCurrentUser()를 통해 해당 사용자를 자동으로 반환합니다. 나 맞아?

기록을 위해 응용 프로그램 설정에서 '인증 유형'을 '연합 로그인'으로 설정했습니다.

업데이트 12/5/12 : 나는 openid4java와 함께갔습니다. 직접적인 예제가 배포판에 샘플로 제공되어 앱 엔진에 매력처럼 작동합니다.

답변

2

이것은 아마도 듣고 싶지는 않지만 OAuth 2 용 OpenID를 버렸습니다. OpenID는 인증 용이고 OAuth는 승인 용이며 (this other question 참조) 실제로 실제 사람들은 둘 다 OAuth를 사용합니다.

우리는 Scribe와 함께 갔고 매우 만족합니다. 이것은 각자가 다르게 수행 할 때마다 자체 인증 솔루션을 롤링하고 아마도 공급자 목록을 제한한다는 것을 의미합니다.

+0

응답 해 주셔서 감사합니다. 나는 인증 만하려고하고 openId4Java가 잘 작동한다고 말할 것입니다. 그것은 모든 공급자를 사용할 수 있음을 의미합니다. openId4java를 사용하기로 결정하기 전에 질문을 게시했습니다. 나는 그것을했고 불평 할 수 없다! – Sundeep

+0

페이스 북, 트위터 등은 오픈 아이디 공급자가 아니지만 Oauth2 인증을 받았기 때문에 실생활에서 사람들은 두 가지 모두를 위해 Oauth를 사용하고 있다고 말할 수 있습니다. – Sundeep