Идентификация пользователей — одна из важнейших функций решения ECM. В sensenet ECM мы пытаемся поддерживать широкий спектр возможностей в этой области, поэтому мы сделали это намного проще, расширив нашу аутентификацию веб-токена: теперь можно интегрировать стороннюю службу аутентификации, например, Вход через Google в ваше решение Sensenet ECM.
OAuth 2.0 — это стандартный отраслевой протокол авторизации. В Sensenet ECM мы используем его как расширение нашей аутентификации JWT, чтобы пользователи могли аутентифицировать с помощью известных сервисов (таких как Google или Facebook). Преимущество заключается в том, что пользователи могут входить в приложение sensnet ECM одним щелчком мыши, без ручной регистрации. Этот пост дает вам представление о том, как OAuth реализован на стороне сервера, показывает, как его поддерживают клиентские библиотеки sensnet, и быстро демонстрирует, как вы можете встроить его в свое приложение.
В первой версии мы реализовали толькоGoogle Sing-in, но вы можете добавить другие службы (например, Facebook), следуя инструкциям и ссылкам в этом сообщении. Если вы это сделаете, рассмотрите возможность поделиться этим с сообществом, чтобы другие тоже могли его использовать!
Как это работает
Когда на сайт приходят новые пользователи, они смогут войти в систему, нажав кнопку Google (или аналогичный пользовательский интерфейс, реализованный разработчиком). Рабочий процесс следующий:
- Пользователь входит в стороннюю службу.
- Пользователь авторизует приложение с помощью службы (например, позволяет приложению получать доступ к основным данным пользователя, таким как имя и адрес электронной почты). Обычно это нажатие кнопки во всплывающем окне Google или Facebook.
- Клиент получает токен от службы.
- Клиент отправляет токен на сервер ECM sensenet, где соответствующий провайдер OAuth проверяет токен (обратите внимание, что таким образом невозможно отправить недействительный или просроченный токен, поскольку он проверяется с помощью 3-го партийная служба).
- Если токен был проверен, мы загружаем или создаем соответствующий пользовательский контент в репозитории контента. Элементы пользовательского контента подключаются к сторонней службе путем сохранения уникального идентификатора пользователя в отдельном поле, зависящем от поставщика (например, GoogleUserId).
- 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.
- Установите 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