18 мая 2012 г.

Windows Live SDK: Аутентификация пользователя на сайте

 

    Здравствуйте друзья! Сегодня я бы хотел вам рассказть о наборе инструментов, который позволяет разработчикам легко организовать взаимодействие их приложений с сервисами семейства Windows Live от компании Microsoft.

    Ни для кого не секрет, что сегодня использование внешних сервисов для аутентификации пользователей на сайтах приобрело огромную популярность в Интернете. Как правило, в качетсве внешних сервисов выступают социальные сети, такие как Facebook и Twitter. Согласитесь, это удобно, когда вам не нужно помнить свой логин и пароль на каждом сайте, а достаточно запомнить один пароль, например для Facebook. Поэтому большинство уважающих себя сайтов, считают за правило предоставить своим посетителям возможность быстрой регистрации и входа.

    Провайдеры внешних сервисов аутентификации (в первую очередь конечно социальные сети) предоставляют широкий набор средств (API) для использования их возможностей извне.

    Не осталась в стороне и компания Microsoft. И хотя сервисы Windows Live нельзя назвать социальной сетью, это достаточно распостраненная система аутентификации для всех, кто так или иначе взаидоействует с ресурсами компании Microsoft.

    В 2012 году Microsoft выпускает первые версии новой операционной системы Windows 8 и анонсирует новую концепцию разработки приложений для платформы Windows – Metro приложения написанные при помощи HTML и JavaScript.

    В связи с этим Майкрософт также выпускает новый пакет средств (SDK) для работы с сервисами Windows Live из Metro приложений при помощи JavaScript. Надо отметить, что сервисы Windows Live существует достаточно давно, и, конечно, раньше тоже существовали средства для работы с ними. Однако, назвать их удобными и понятными явно было нельзя. Поэтому новый SDK приятно всех удивил своей простотой и схожестью с похожимы интерфейсами Twitter и Facebook.

   Сегодня, я хочу вам показать каким образом можно интегрировать аутетификацию через Windows Live в ваш ASP.NET MVC сайт.

  Первым делом необходимо зарегистрировать ваше приложение в центре разработки Windows Live по следующей ссылке: https://manage.dev.live.com/Applications/Index

Необходимо ввести название приложения, адрес возврата ответа от сервиса аутентификации (доменное имя вашего сайта) и скопировать значение “Client ID”. Примеры форм находятся на скриншотах ниже:

 

 

 

 

 

 

 

 

  

   Создадим стандартный сайт шаблона ASP.NET MVC Framework и перейдем в представление Index.cshtml.

   Для использования Windows Live JavaScript SDK необходимо разместить на странице ссылку на следующий скрипт:

<script type="text/javascript" src="http://js.live.net/v5.0/wl.js"></script>

   Далее нам необходимо кнопка, при нажатии на которую пользователь бы начинал процедуру аутентификации через Windows Live Connect. Тут у вас есть выбор, можно создать свой элемент разметки и привязать функции входа к какому-либо событию этого элемента, или попросить Windows Live SDK создать для нас красивую “фирменную” кнопку входа. Мы поступим вторым способом. Для этого в разметку страницы необходимо добавить следующий фрагмент кода:

<p>   
    <div id="signin"></div>
</p>

<script type="text/javascript">
    WL.init({
        client_id: "ваш CLIENT ID",
        redirect_uri: "@(Request.Url.AbsoluteUri)",
        scope: ["wl.signin"],
        response_type: "token"
    });
   
    WL.ui({
        name: "signin",
        element: "signin"
    });
</script>

   В результате на странице будет отображена кнопка следующего вида:

  При нажатии на кнопку будет открываться диалоговое окно, где пользователь сможет ввести свой логин и пароль в сиcтеме Windows Live. На кнопке изображена надпись “Sign In”, когда пользователь неавторизированный, и “Sign Out”, когда пользователь уже прошел аутентификацию.

  Все что нам осталось -  узнать когда пользователь успешно пройдет атентификацию и мы сможем работать с его данными из сервиса Windows Live. Для этого определим JavaScript функцию, которая будет выполнена после того как пользователь успешно авторизируется:

<script type="text/javascript">
    WL.Event.subscribe("auth.login", onLogin);

    function onLogin() {
        WL.api({ path: "me", method: "GET" }).then(
            function (response) {
                $('#userName').text("Hello " + response.name + "!");
            }
        );
    }
</script>

  Теперь мы можем осуществлять запросы к сервисам Windows LIve. Для примера давате загрузим имена и почтовые ящики контактов из почты HotMail. Для этого необходимо сначала модифицировать функцию инициализации среды Windows Live SDK:

<script type="text/javascript">
    WL.init({
        client_id: "00000000480C037B",
        redirect_uri: "@(Request.Url.AbsoluteUri)",
        scope: ["wl.signin", "wl.basic"],
        response_type: "token"
    });
</script>

  Если вы заметили, я добавил еще одну перменную в поле “scope”. В этом поле хранится список ресурсов к которым вы хотите получить доступ. При аутентификации сервис конекта Windows Live покажет пользователю какую информацию запрашивает ваш сайт и спросит его дает ли он свое согласие на использование его персональных данных.

  После получения подтверждения пользователя мы можем еще раз обратиться к сервису Windows Live и запросить у него список контактов почты HotMail пользователя:

<p>
    <ul id="contacts"></ul>
</p>
<script type="text/javascript">
    $('#loadLiveFriends').click(function() {
        WL.api({
            path: "me/contacts",
            method: "GET"
        }).then(
                function (response) {
                    $.each(response.data, function(key, value) {
                        $('#contacts').append('<li>Name - ' + value.name + ‘ Email - ’ + value.email +'</li>');
                    });
                }
            );
    });
</script>

  Данная функцию выведет имя контакта и его почтовый ящик в список на странице. Список – это элемент разметки “ul” с идентификатором “contacts”.

  В данной статье мы рассмотрели пример использования элементарных функций Windows Live SDK для веб платформы. Были описаны функции для аутентификации пользователей и загрузки списка контактов. Полный список предоставляемых функций намного больше, вы можете найти их описание и примеры использования на новом портале MSDN: http://msdn.microsoft.com/en-us/library/live/