Идентификация пользователей — одна из важнейших функций решения ECM. В sensenet ECM мы пытаемся поддерживать широкий спектр возможностей в этой области, поэтому мы сделали это намного проще, расширив нашу аутентификацию веб-токена: теперь можно интегрировать стороннюю службу аутентификации, например, Вход через Google в ваше решение Sensenet ECM.

OAuth 2.0 — это стандартный отраслевой протокол авторизации. В Sensenet ECM мы используем его как расширение нашей аутентификации JWT, чтобы пользователи могли аутентифицировать с помощью известных сервисов (таких как Google или Facebook). Преимущество заключается в том, что пользователи могут входить в приложение sensnet ECM одним щелчком мыши, без ручной регистрации. Этот пост дает вам представление о том, как OAuth реализован на стороне сервера, показывает, как его поддерживают клиентские библиотеки sensnet, и быстро демонстрирует, как вы можете встроить его в свое приложение.

В первой версии мы реализовали толькоGoogle Sing-in, но вы можете добавить другие службы (например, Facebook), следуя инструкциям и ссылкам в этом сообщении. Если вы это сделаете, рассмотрите возможность поделиться этим с сообществом, чтобы другие тоже могли его использовать!

Как это работает

Когда на сайт приходят новые пользователи, они смогут войти в систему, нажав кнопку Google (или аналогичный пользовательский интерфейс, реализованный разработчиком). Рабочий процесс следующий:

  1. Пользователь входит в стороннюю службу.
  2. Пользователь авторизует приложение с помощью службы (например, позволяет приложению получать доступ к основным данным пользователя, таким как имя и адрес электронной почты). Обычно это нажатие кнопки во всплывающем окне Google или Facebook.
  3. Клиент получает токен от службы.
  4. Клиент отправляет токен на сервер ECM sensenet, где соответствующий провайдер OAuth проверяет токен (обратите внимание, что таким образом невозможно отправить недействительный или просроченный токен, поскольку он проверяется с помощью 3-го партийная служба).
  5. Если токен был проверен, мы загружаем или создаем соответствующий пользовательский контент в репозитории контента. Элементы пользовательского контента подключаются к сторонней службе путем сохранения уникального идентификатора пользователя в отдельном поле, зависящем от поставщика (например, GoogleUserId).
  6. Sensenet ECM собирает токен JWT для клиента и считает, что пользователь правильно выполнил вход.

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

Поставщик Sensenet ECM OAuth — это небольшой подключаемый модуль .Net, предназначенный для проверки токена с помощью определенного сервиса. Из коробки мы предлагаем только поставщика Google OAuth, который доступен в виде пакета NuGet.

В будущем мы добавим больше возможностей (например, вход через Facebook), но вы также сможете интегрировать любую стороннюю службу.

Если вы используете sn-client-js и/или sn-redux, вам не нужно заниматься отправкой токенов OAuth на сервер, они сделают это за вас.

sn-клиент-js

Мы добавили поддержку провайдера OAuth в версии 3.0.0. Это означает, что вы можете реализовать и добавить своего собственного провайдера OAuth на стороне клиента — так же, как мы это сделали в sn-client-auth-google.

sn-клиент-авторизация-google 1.0.0

Это наш первый официальный провайдер OAuth на стороне клиента. Требуется sensnet ECM ^7.0.0 с настроенной JWT-аутентификацией, установленным SN7 OAuth provider и проектом Google API Console. Вы можете использовать его с официальной Библиотекой платформы Google или без нее или с любым сторонним компонентом, который может получить id_token.

Мы сосредоточились на том, чтобы эта библиотека была простой и удобной в использовании, надеюсь, вы сможете интегрировать ее в течение нескольких минут — после проверки примера в readme.

sn-редукс

Поскольку нужный провайдер был готов как на бэкенде, так и в sn-client-js, необходимо было добавить действие для обработки входа (и регистрации) с учетной записью Google и в sn-redux. Однако процесс после входа в систему такой же: создается новый эпик под названием userLoginGoogleEpic. Этот новый эпик подписан на новое действие запроса на вход в систему, но независимо от успеха результата он отправляет те же действия, которые используются в простом процессе входа в систему.

Пример

Давайте продемонстрируем, как легко вы можете добавить вышеперечисленное в свое приложение, выполнив шаги, которые были сделаны при добавлении аутентификации Google в нашу демонстрацию DMS.

  1. Установите sn-client-auth-google с помощью npm и импортируйте AddGoogleAuth
npm i --save-dev sn-client-auth-google 
import { AddGoogleAuth } from 'sn-client-auth-google';

2. Активируйте аутентификацию Google на объекте репозитория с помощью ClientId вашего приложения/сайта.

...
AddGoogleAuth(repository, {
   ClientId: 'yourclientid'
})
...

3. Создайте свою пользовательскую кнопку или компонент ссылки, импортируйте Actions из sn-redux, и теперь у вас есть доступ к функции UserLoginGoogle, и вы можете отправить ее в обработчик событий, где это необходимо.

...
import { Actions } from 'sn-redux'
...

class myButton extends React.Component<{login: Function},{}>{
    ...
    handleButtonClick(e){
        this.props.login
    }
    ...
    render(){
       return <div onClick={e => this.handleButtonClick(e)}>Sign in with Google</div>
    }
}
...
export default connect({}, {
    login: Actions.UserLoginGoogle
})(myButton)

Следующие шаги

Поскольку это только первая итерация, мы намеренно сделали этот релиз очень маленьким. Например:

  • мы не синхронизируем пользовательские свойства, такие как аватар пользователя
  • поставщик Google на сервере проверяет токен с помощью общедоступного http Google API, что означает, что сервер должен иметь доступ к этому API. В будущем это может быть изменено на проверку локального токена с помощью Google SDK.
  • Варианты входа в Facebook, Microsoft и GitHub пока недоступны

Чувствуете ли вы в себе силы помочь сообществу расширить платформу своими идеями? Пожалуйста, свяжитесь с нами, участвуйте в беседе и помогите нам создавать инструменты на благо других разработчиков!

Есть отзыв об этом посте? Сообщите @sensenet в Твиттере.

Нужна помощь или нашли ошибку? "Связаться с нами".

Первоначально опубликовано на сайте community.sensenet.com 20 декабря 2017 г.

Фото автора Federico Beccari на Unsplash