Jeśli nie lubisz używać dużych bibliotek, takich jak DotnetOpenAuth, będziesz musiał ręcznie wdrożyć protokół OpenID. Here are the specifications musisz się dostosować.
Powiedziawszy to, polecam korzystanie z istniejącej biblioteki. DotnetOpenAuth
jest biblioteką odniesienia dla .NET.
Także mała uwaga: OpenId i OAuth są różnymi standardami i zostały zaprojektowane w celu osiągnięcia różnych rzeczy: OpenId
służy do uwierzytelniania, natomiast OAuth
służy do autoryzacji.
Jeśli chodzi o identyfikację tego samego użytkownika, który mógł logować się od różnych dostawców OpenID, to potrzebujesz czegoś, aby je zidentyfikować. Na przykład z DotnetOpenAuth podczas tworzenia żądania uwierzytelnienia do dostawcy OpenID można wymagać FullName oraz e-mail:
using (var openid = new OpenIdRelyingParty())
{
var request = openid.CreateRequest(Identifier.Parse(openid_identifier));
request.AddExtension(new ClaimsRequest
{
BirthDate = DemandLevel.NoRequest,
Email = DemandLevel.Require,
FullName = DemandLevel.Require
});
}
i wykorzystać te informacje do identyfikacji użytkownika w obrębie wewnętrznej bazie danych.
Więc oto pomysł:
- utworzyć wewnętrzny tabeli bazy danych, która będzie zawierała użytkowników witryny. Na początku ta tabela jest pusta.
- Użytkownik przychodzi do Twojej witryny i chce z niej korzystać. Nie jest jeszcze uwierzytelniony, więc pytasz go o jego referencje. Dajesz mu możliwość wyboru dostawcy OpenID i przygotowania żądania uwierzytelnienia oraz przekierowania go do swojego dostawcy w celu uwierzytelnienia.
- Użytkownik uwierzytelnia się u swojego dostawcy i jest przekierowywany z powrotem do Twojej witryny. W tym momencie znasz swoją twierdzoną tożsamość i dodajesz użytkownika do tabeli użytkowników. Teraz użytkownik może zawsze wrócić do swojej witryny i zalogować się.
- Możesz zapewnić swoim uwierzytelnionym użytkownikom możliwość dodania innego dostawcy OpenID (tak jak robi to StackOverflow). Ważną ideą jest to, że użytkownik musi już być uwierzytelniony w swojej witrynie, aby to zrobić. Aby mógł wejść do swojego alternatywnego dostawcy OpenID i zostać przekierowany do tego dostawcy w celu uwierzytelnienia. Po uwierzytelnieniu zostaje przekierowany z powrotem do Twojej witryny, a ponieważ był już uwierzytelniony w Twojej witrynie, możesz dodać do tabeli użytkowników jego alternatywnego dostawcę OpenId.
- Czynność kontrolera, która obsłuży przekierowanie od dostawcy OpenId, powinna sprawdzić, czy użytkownik jest już uwierzytelniony w witrynie, a jeśli nie, uwierzytelnić go za pomocą
FormsAuthentication.GetAuthCookie
i przekazać deklarowaną tożsamość. Jeśli deklarowana tożsamość nie istnieje w tabeli użytkowników wewnętrznych, musisz ją dodać. Jeśli użytkownik jest już uwierzytelniony w swojej witrynie, oznacza to, że dodaje alternatywnego dostawcę OpenId do swojego profilu, aby zaktualizować tabelę użytkowników i dodać do niej nowego dostawcę.
Być może znasz jakieś małe wdrożenie do systemu logowania Google? – Roman
@roman, osobiście używam DotnetOpenAuth. –
Dziękuję. Po prostu bałem się, że to zbyt skomplikowane i w 100% niezawodne. Czy to jest? :) – Roman