2010-04-21 19 views
16

Próbuję zaimplementować logowanie OpenId dla aplikacji internetowej. Ilekroć nowy użytkownik loguje się przez OpenId, tworzę nowego użytkownika na sustem, a pomiędzy danymi przechowuję jego otwarty adres URL, aby następnym razem logować się z tym użytkownikiem.Dlaczego zmienia się identyfikator wdrożenia Google OpenID?

Jestem testowania to z moim Gmail OpenID, a problemem jest to, że za każdym razem to zrobić, Google wysyła inny OpenID URL, czyli https://www.google.com/accounts/o8/id?id=SomethingThatChangesFromTimeToTime

Oczywiście, że to nie jestem w stanie powiedzieć wheter to jest nowy użytkownik lub nie. Jestem trochę zdziwiony: czy identyfikator Openida nie powinien pozostać taki sam?

+4

Spróbuj użyć większej liczby znaków zapytania i wykrzykników!?!? – fig

+2

Zwykle tego nie robię, ale byłem naprawdę zdumiony tym zachowaniem. Spodziewałem się, że zaletą OpenId będzie posiadanie niepowtarzalnego adresu URL umożliwiającego identyfikację, a nie poleganie na dostawcy, który każdemu przydzieli go za Ciebie. – Andrea

+0

nawet ja miałem ten sam problem, ale przy dalszym kopaniu dowiedziałem się, że domena w moim przypadku wysłana na żądanie uwierzytelnienia jest tym samym ciągiem znaków, wciąż dając różne wartości w różnych przeglądarkach. Testowałem go w FF i chrome. nie jestem pewien, czego tu brakuje. – awake416

Odpowiedz

19

Identyfikator Google OpenID jest mniej więcej hashem reprezentującym wiele danych, w tym host, z którego pochodzi żądanie (dokładniej parametr openid.realm wysłany do dostawcy). Więc jeśli twój komputer zmienia się od czasu do czasu (np. Zmiany portu i adresu IP), identyfikator również będzie się zmieniać od czasu do czasu. StackOverflow również stosuje obejście tego problemu. Sprawdź te posty:

Oto FAQ wyciąg z google:

Q: OpenID Spec mówi, że openid.realm jest opcjonalny i jeśli niedostarczony, Google zamiast tego powinien użyć adresu URL openid.return_to. Czy to będzie działało?

O: Będzie działać w tym sensie, że protokół zakończy się pomyślnie. Ale jeśli Twój adres URL to return_to jest podobny do www.example.com/authenticate?style=openid-federated_login, prosisz nas, abyśmy poprosili użytkowników o zatwierdzenie konkretnego adresu w Twojej witrynie i zaufanie do niego, które nie jest przyjazne dla użytkownika. Ponadto jeśli pominiesz parametr openid.realm, nigdy nie będzie można zmienić adresu URL: spowoduje to również niejawną zmianę dziedziny i identyfikatorów adresów URL użytkowników konta Google.

+0

Po prostu wykonuję dwa uwierzytelnienia z tego samego (lokalnego) hosta, kilka sekund dalej od siebie. Sądzę, że nic się nie zmienia; jednak uzyskuję różne tożsamości (openid.identity). – Andrea

+0

rejestrowanie komunikacji między aplikacją a Google. Obsługują to duże ramy oid. Sprawdź, czy żądanie jest takie samo dla obu zapytań, czy nie. – SztupY

+0

SztupY: "w tym host, z którego otrzymano żądanie" nie jest ściśle zgodne z prawdą. Zmienna jest tutaj parametrem openid.realm, który nie jest związany z miejscem, z którego pochodzi żądanie, ale raczej z miejscem, do którego zostanie wysłana odpowiedź (co może być zupełnie inną sprawą, ale często jest tym samym). –

Powiązane problemy