2010-04-21 2 views
16

웹 응용 프로그램의 OpenId 로그인을 구현하려고합니다. OpenId를 통해 로그인하는 새로운 사용자가있을 때마다 나는 사용자에게 새로운 사용자를 만들고 데이터 중에 openid URL을 저장하므로 다음 번에 해당 사용자와 로그인하게됩니다.Google의 OpenID 구현 ID가 변경되는 이유는 무엇입니까?

내가 내 Gmail 오픈 ID로이 테스트를하고있어,하고 문제가 내가 이렇게 그 때마다입니다, 구글은 다른 오픈 ID URL이 전송, 즉 https://www.google.com/accounts/o8/id?id=SomethingThatChangesFromTimeToTime 물론

난 후 처리 여부 말할 수 아니에요입니다 이것은 새로운 사용자이거나 그렇지 않습니다. 나는 다소 당황 스럽다 : openid 식별자가 항상 같지 않아야 하는가?

+4

더 많은 물음표와 느낌표를 사용하십시오!?!? – fig

+2

나는 보통 그렇게하지 않는다. 그러나 나는이 행동에 정말 당황 스러웠다. OpenId의 장점은 매번 당신을 위해 당신을 할당 해주는 공급자에 의존하기보다, 자신을 식별 할 수있는 고유 한 URL을 가지는 것이라고 생각했습니다. – Andrea

+0

조차도 같은 문제가 있었지만, 더 파고 들자면 인증 요청을 위해 보낸 내 케이스의 도메인이 동일한 문자열이고 다른 브라우저에서 다른 값을 제공한다는 사실을 알게되었습니다. 나는 그것을 FF와 크롬으로 테스트했다. 내가 여기서 무엇을 놓치고 있는지 확실하지 않다. – awake416

답변

19

Google의 OpenID 식별자는 요청이 발생한 호스트 (정확하게는 제공자에게 전송 된 openid.realm 매개 변수)를 비롯한 여러 데이터의 해시 된 표현입니다. 따라서 호스트가 수시로 변경되는 경우 (포트 및 IP 주소 변경과 같은 경우) ID는 수시로 변경됩니다. StackOverflow도이 문제에 대한 해결 방법을 사용합니다. 이 게시물을 확인하십시오

이 구글에서 자주 묻는 질문 발췌 한 것입니다

Q : 오픈 ID 스펙은 openid.realm는 선택 사항이며, 있다고하면 그 제공되지 않는 경우 Google은 대신 openid.return_to URL을 사용해야합니다. 그게 효과가 있니?

A : 프로토콜이 성공적으로 완료된다는 의미에서 작동합니다. 그러나 return_to URL이 www.example.com/authenticate?style=openid-federated_login 인 경우 사용자에게 사이트에서 사용자에게 친숙하지 않은 특정 주소를 승인하고 신뢰하도록 사용자에게 요청하는 메시지가 표시됩니다. 또한 openid.realm 매개 변수를 생략하면 return_to URL을 변경할 수 없으며 암시 적으로 Google 계정 사용자의 영역과 URL 식별자도 변경됩니다.

+0

저는 같은 (로컬) 호스트에서 두 개의 인증을하고 있습니다. 그래서 저는 변화하는 것이 아무것도 없다고 생각합니다. 나는 다른 정체성 (openid.identity)을 얻는다. – Andrea

+0

앱과 Google 간의 통신을 기록하십시오. 주요 oid 프레임 워크가이를 지원합니다. 요청이 두 개의 조회에 대해 동일한 지 여부를 점검하십시오. – SztupY

+0

SztupY : "요청을 보낸 호스트 포함"은 엄격히 적용되지 않습니다. 여기서 변수는 openid.realm 매개 변수로, 요청이 어디서 왔는지에 관계가 없으며 응답이 전송되는 곳 (매우 다른 것일 수 있지만 종종 같은 것입니다)입니다. –