2011-01-16 3 views
5

Я бы хотел, чтобы мои пользователи вошли на мой сайт, используя мою систему входа в систему или FB Connect или Google Login. Я бы не хотел использовать большие библиотеки (например, dotnetOpenAuth) только для этих двух вариантов. Итак, как мне это сделать?Войти с помощью FB Connect/Google OAuth в .NET

Дополнительный вопрос - как мне привязать пользователя FB/Google к моей внутренней пользовательской системе? Я бы хотел разрешить вход в систему с помощью обоих из них (например, я мог бы войти в систему с помощью FB, а затем войти в систему с Google и все равно быть привязан к тому же пользователю).

Я использую ASP.NET MVC 2

Спасибо!

ответ

15

Если вам не нравятся большие библиотеки, такие как DotnetOpenAuth, вам придется вручную реализовать протокол OpenID. Here are the specifications вам нужно будет соответствовать.

Это, как говорится, я бы рекомендовал вам использовать существующую библиотеку. DotnetOpenAuth - справочная библиотека для .NET.

Также небольшое примечание: OpenId и OAuth являются разными стандартами и предназначены для достижения разных целей: OpenId предназначен для аутентификации, а OAuth - для авторизации.

Что касается идентификации того же пользователя, который мог бы регистрироваться из разных поставщиков OpenID, вам потребуется что-то, чтобы идентифицировать их. Например, с DotnetOpenAuth при создании запроса аутентификации провайдера OpenID вы можете потребовать от FullName и 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 
    }); 
} 

и использовать эту информацию для идентификации пользователя в пределах ваших внутренней базы данных.

Так вот идея:

  1. Вы можете создать внутреннюю таблицу базы данных, которая будет содержать пользователей сайта. В начале эта таблица пуста.
  2. Пользователь приходит на ваш сайт и желает его использовать. Он еще не аутентифицирован, поэтому вы просите его о его верительных грамотах. Вы предоставляете ему возможность выбрать своего поставщика OpenId и подготовить запрос на аутентификацию и перенаправить его к своему провайдеру для аутентификации.
  3. Пользователь аутентифицируется у своего провайдера и перенаправляется обратно на ваш сайт. На данный момент вы знаете его заявленную идентификацию, и вы добавляете пользователя в таблицу своих пользователей. Теперь пользователь всегда может вернуться на ваш сайт и войти в систему.
  4. Вы можете предоставить возможность вашим зарегистрированным пользователям добавить еще одного поставщика OpenId (как это делает StackOverflow). Важная идея состоит в том, что пользователю необходимо пройти аутентификацию на вашем сайте, чтобы сделать это. Поэтому он мог бы ввести своего альтернативного провайдера OpenId и перенаправить его на этот провайдер для аутентификации. Как только он аутентифицируется, он перенаправляется обратно на ваш сайт и, поскольку он уже прошел проверку подлинности на вашем сайте, вы можете добавить в таблицу пользователей его альтернативный провайдер OpenId.
  5. Действия контроллера, которые будут обрабатывать перенаправление от провайдера OpenId, должны проверить, прошел ли пользователь уже на вашем сайте и если он не аутентифицировал его с использованием и передачи заявленного идентификатора. Если заявленная идентификация отсутствует в вашей внутренней таблице пользователей, ее необходимо добавить. Если пользователь уже прошел аутентификацию на вашем сайте, это означает, что он добавляет альтернативный провайдер OpenId к своему профилю, поэтому вы должны обновить таблицу своих пользователей и добавить к нему нового поставщика.
+0

Возможно, вы знаете небольшую реализацию системы входа в систему Google? – Roman

+0

@roman, лично я использую DotnetOpenAuth. –

+0

Спасибо. Я просто боялся, что это слишком сложно и на 100% надежнее. Это? :) – Roman

Смежные вопросы