2009-06-19 17 views
7

Firma, w której pracuję, chce opublikować wewnętrzną stronę internetową na zewnątrz, ale także chce ją w łatwy sposób zidentyfikować. Niektóre funkcje będą widoczne dla wszystkich odwiedzających, ale większość musi być widoczna dla uwierzytelnionych użytkowników. (A niektóre funkcje są ograniczone do użytkowników admin.) Podczas gdy zarząd rozważa wdrożenie naszego własnego systemu uwierzytelniania, zasugerowałem, aby użyć już istniejącej technologii, która jest już dostępna i która utrzymuje zarządzanie nazwami użytkowników/hasłami z dala od nas. (Ponieważ jesteśmy tylko amatorami, gdy mówimy o bezpieczeństwie.) Uwierzytelnianie musi być bardzo dobre.)Wdrażanie OpenID: identyfikacja użytkowników

Zacząłem od OpenID od Google i sprawdziłem bibliotekę, którą udostępniają. Wygląda na łatwy w użyciu i mogę uzyskać tokeny, które informują mnie, że użytkownik jest uwierzytelniony. Ale jak mogę zidentyfikować tego użytkownika, aby móc powiązać informacje z naszego profilu z jego identyfikatorem/tokenem?

Wiem, że brakuje mi czegoś, aby zachować prostotę: potrzebuję tylko przykładu, który pokazuje, w jaki sposób uwierzytelnić użytkownika za pomocą Google, a następnie odzyskać pewien token, którego mogę użyć do połączenia z tym użytkownikiem na zawsze. (Nie ma tokena sesji). Token ten może być następnie użyty do wypełnienia jego profilu przez użytkownika.

+1

Jestem zdezorientowany, gdy mówisz o "Google" tutaj. Wygląda na to, że kiedy mówisz "OpenID z Google", masz na myśli "bibliotekę DotNetOpenAuth prowadzoną przez Andrew Arnotta i hostowaną w Google Code." Ale nie jestem pewien, co masz na myśli, mówiąc "Uwierzytelnij gościa w Google". Czy chcesz, aby Twoi użytkownicy mieli tylko konta Google, a nie OpenIDs od innych dostawców? Jeśli potrzebujesz tylko "jakiegoś tokena", nie brzmi to tak, jakbyś potrzebował swojego adresu w Gmailu lub czegokolwiek. – keturn

+0

Właściwie, na razie chcę tylko zachować prostotę i wspierać tylko Google OpenID. Projekt wciąż jest sprawdzianem koncepcji i próbuję przekonać zarząd do korzystania z OpenID zamiast konieczności implementacji naszego własnego systemu uwierzytelniania. Z drugiej strony OpenID jest otwartym standardem, więc nie powinno być trudno używać go również dla innych dostawców ... –

Odpowiedz

4

Ponieważ Twoje tagi sugerują, że jesteś językiem C#, polecam DotNetOpenAuth. Jest on bezpłatny i zawiera próbki, które pokażą, jak zdobyć token (w terminologii OpenID nazywa się to Claimed Identifier), którego można użyć do rozróżnienia użytkowników.

Aby uzyskać żądany identyfikator (stały identyfikator, którego szukasz), jeśli używasz formantu OpenIdTextBox lub OpenIdLogin po prostu obsłuż jego zdarzenie LoggedIn i uzyskaj właściwość e.ClaimedIdentifier. Jeśli robisz to programowo (bez kontroli), metoda OpenIdRelyingParty.GetResponse() zwraca interfejs IAuthenticationResponse, który ma właściwość ClaimedIdentifier.

Następnie można zaimplementować rolę ASP.NET RoleProvider (całkiem banalnie, naprawdę), która pozwoli niektórym identyfikatorom OpenID Claimed Identyfikatory należeć do roli administratora, dzięki czemu standardowe techniki autoryzacji ASP.NET będą stopniowo blokować osoby na podstawie ich sposobu Jestem uwierzytelniony.

+0

Czy zdajesz sobie sprawę, że łączysz się z tą samą witryną, o której mowa w moim pytaniu? I tak, wiem, że to trywialne, ale jakoś nie udało mi się odkryć, w jaki sposób mogę uzyskać stały identyfikator lub cokolwiek, aby połączyć konto OpenID z moją własną bazą danych użytkowników. –

+0

Whoops. :) Przepraszam, nie sprawdziłem tego linku ... założyłem, że był to rodzajowy serwis openid.net. Zaktualizowałem swoją odpowiedź, aby podać więcej szczegółów na temat uzyskiwania stałego identyfikatora, którego potrzebujesz. –

+0

Dzięki! Dokładnie to, czego mi brakowało. :-) –