Введение
onelogin — отличный поставщик услуг SSO (Single Sign-On), мы можем легко создавать программы SSO с помощью сервисов onelogin.
Как мы упоминали ранее, обычно существует два основных протокола для создания SSO: OpenID connect и SAML. Сегодня мы будем использовать конкретный пример, чтобы объяснить, как использовать поток аутентификации в OpenID connect для выполнения аутентификации SSO в onelogin.
Введение в OpenId Connect и процесс аутентификации
OpenID Connect построен на основе протокола OAuth 2.0. Это позволяет клиенту аутентифицировать пользователя на основе сервера авторизации или поставщика удостоверений (IdP) и получать основную информацию о пользователе.
OpenID Connect предоставляет RESTful HTTP API и использует Json в качестве формата доставки данных.
Мы можем легко использовать onelogin в качестве поставщика удостоверений (IdP) для аутентификации SSO.
Сегодня мы поговорим о том, как использовать onelogin для реализации потока аутентификации. Мы знаем, что OpenId Connect имеет множество режимов.
Представленный сегодня режим кода авторизации.
Шаги процесса кода авторизации следующие:
Клиент готов запросить аутентификацию запрос содержит необходимые параметры
Клиент отправляет запрос на сервер авторизации
Сервер авторизации аутентифицирует самых популярных пользователей
Служба авторизации унифицирована/авторизована конечным пользователем
Сервер авторизации отправляет конечного пользователя обратно клиенту с кодом авторизации
Клиент запрашивает ответ от конечной точки Token с кодом авторизации.
Клиент получает ответ, а тело ответа содержится в токене идентификатора и токене доступа.
Клиент проверяет токен идентификатора и получает некоторую идентификационную информацию пользователя.
Конфигурация onelogin работает
Если нам нужно использовать onelogin в нашем приложении, необходимо выполнить некоторую настройку. Давайте посмотрим поближе.
Для начала нам нужно зарегистрировать аккаунт в onelogin.
Регистрация в onelogin бесплатна и может быть настроена с 3 приложениями и 25 пользователями. Достаточно ли тестового использования.
О процессе регистрации говорить особо нечего. После регистрации мы можем создать приложение в onelogin.
Во вкладке приложений хотим использовать openid connect, затем ищем oidc:
Видно, что onelogin может поддерживать различные протоколы подключения OIDC. Поскольку это интерфейс onelogin, конечно, выберите соединение onelogin.
Введите название приложения и нажмите «Сохранить».
В столбце конфигурации введите URL-адрес перенаправления:http://localhost:3000/oauth/callback
Это URL-адрес для возврата к нашему собственному приложению после аутентификации.
Затем перейдите в столбец SSO, скопируйте идентификатор клиента и безопасность клиента и измените метод аутентификации на POST.
Если вы все еще хотите создавать новых пользователей или устанавливать разрешения для пользователей, вы можете самостоятельно изучить расширенные функции onelogin.
подключить onelogin с помощью приложения
Здесь мы выбираем пример официального сервера, предоставленного onelogin:GitHub.com/один логин/на…
Скачиваем программу и переименовываем .env.sample в .env
Измените переменные внутри, в основном OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, SUBDOMAIN и OIDC_REDIRECT_URI, которые устанавливаются при настройке onelogin:
SUBDOMAIN=flydean-dev
OIDC_CLIENT_ID=a3446600-f263-0138-3235-122333243433
OIDC_CLIENT_SECRET=**********
OIDC_REDIRECT_URI=http://localhost:3000/oauth/callback
Затем запустите npm install; npm start, чтобы запустить службу nodejs.
Официальный пример использует фреймворк nodejs+express и модуль Passport-OpenIdConnect для взаимодействия с onelogin.
Мы смотрим на процесс взаимодействия.
- открыть в браузереhttp://localhost:3000, войдите на главную страницу приложения:
- Нажав на логин, вы перейдете на авторизованную страницу входа onelogin:
Посмотрим на сетевой запрос:
Как видите, все предыдущие коды состояния — 302, перенаправление.
Перенаправление со страницы входа на localhost:3000 на:
https://flydean-dev.onelogin.com/oidc/2/auth?response_type=code&client_id=a3446600-f263-0138-3235-064d76eee9d3178911&redirect_uri=http://localhost:3000/oauth/callback&scope=openid profile&state=ohC1Fi0n0YTDELBtNmePDGvb
Как видите, это перенаправление добавляет параметры, которые необходимо добавить в протокол OIDC, например, respnse_type = Code представляет использование режима кода авторизации. Client_id — это наш настроенный идентификатор клиента. Redirect_uri также является ссылкой, возвращаемой конфигурацией.
Область представляет область проверки подлинности, а состояние — это уникальная метка, используемая для предотвращения очистки.
Затем перенаправить на:
https://flydean-dev.onelogin.com/trust/openid-connect/v2?client_id=a3446600-f263-0138-3235-064d76eee9d3178911&grant=cbec20f1-f1d8-4733-9a6f-e98471edfc13
На этом шаге onelogin проверяет параметры предыдущего шага, а затем снова переходит.
Затем перенаправить на:
https://flydean-dev.onelogin.com/login
Это страница входа для пользовательского доменного имени.
https://flydean-dev.onelogin.com/login2/?return=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmkiOiJodHRwczovL2ZseWRlYW4tZGV2Lm9uZWxvZ2luLmNvbS90cnVzdC9vcGVuaWQtY29ubmVjdC92Mj9jbGllbnRfaWQ9YTM0NDY2MDAtZjI2My0wMTM4LTMyMzUtMDY0ZDc2ZWVlOWQzMTc4OTExXHUwMDI2Z3JhbnQ9Y2JlYzIwZjEtZjFkOC00NzMzLTlhNmYtZTk4NDcxZWRmYzEzIiwibm90aWZpY2F0aW9uIjp7Im1lc3NhZ2UiOiJDb25uZWN0aW5nIHRvICoqT3BlbklkIENvbm5lY3QgKE9JREMpKioiLCJpY29uIjoiY29ubmVjdGlvbiIsInR5cGUiOiJpbmZvIn0sImlzcyI6Ik1PTk9SQUlMIiwiYXVkIjoiQUNDRVNTIiwiZXhwIjoxNjAyOTIwNjM0LCJwYXJhbXMiOnt9LCJtZXRob2QiOiJnZXQifQ.hoUjh18mehtBSCINkoGOSDwJFHDBBl_nn47RMSizPfw
Затем onelogin шифрует параметры и возвращает страницу, которую видят все.
- Введите наш логин и пароль
Нажмите «Продолжить».
- После успешной аутентификации перейдите на страницу с информацией о пользователе.
Мы видим, что он также испытал ряд внутренних вызовов переадресации:
Все, о чем нам нужно позаботиться, это следующий обратный вызов:
http://localhost:3000/oauth/callback?code=2PVdwgQkNip883hql_ub9w3Byug&state=ohC1Fi0n0YTDELBtNmePDGvb
Вы можете видеть, что в обратном вызове мы получаем код, который можно использовать в дальнейшем для взаимодействия с onelogin.
- Нажмите профиль, мы попытаемся получить информацию о пользователе из onelogin
Переходим по запрошенной ниже ссылке:
http://localhost:3000/users/profile
Этот шаг фактически запросит информацию о пользователе onelogin через код в фоновом режиме.
ключевые этапы процедуры
Эта официальная программа аутентификации построена с помощью nodejs и express, а структура аутентификации в основном использует паспорт и паспорт-openidconnect.
Давайте посмотрим на код ключа.
В конфигурации паспорта используется onelogin:
// Configure the OpenId Connect Strategy
// with credentials obtained from OneLogin
passport.use(new OneLoginStrategy({
issuer: baseUri,
clientID: process.env.OIDC_CLIENT_ID,
clientSecret: process.env.OIDC_CLIENT_SECRET,
authorizationURL: `${baseUri}/auth`,
userInfoURL: `${baseUri}/me`,
tokenURL: `${baseUri}/token`,
callbackURL: process.env.OIDC_REDIRECT_URI,
passReqToCallback: true
},
function(req, issuer, userId, profile, accessToken, refreshToken, params, cb) {
console.log('issuer:', issuer);
console.log('userId:', userId);
console.log('accessToken:', accessToken);
console.log('refreshToken:', refreshToken);
console.log('params:', params);
req.session.accessToken = accessToken;
return cb(null, profile);
}));
Как видно из приведенного выше кода, после получения accessToken он сохраняется в сеансе.
Используйте сеанс для хранения информации аутентификации:
app.use(session({
secret: 'secret squirrel',
resave: false,
saveUninitialized: true
}))
Логическая операция входа:
app.get('/login', passport.authenticate('openidconnect', {
successReturnToOrRedirect: "/",
scope: 'profile'
}));
Логическая операция обратного вызова:
app.get('/oauth/callback', passport.authenticate('openidconnect', {
callback: true,
successReturnToOrRedirect: '/users',
failureRedirect: '/'
}))
Получить операцию профиля пользователя:
router.get('/profile', function(req, res, next) {
request.get(
`https://${ process.env.SUBDOMAIN }.onelogin.com/oidc/2/me`,
{
'auth': {
'bearer': req.session.accessToken
}
},function(err, respose, body){
console.log('User Info')
console.log(body);
res.render('profile', {
title: 'Profile',
user: JSON.parse(body)
});
});
});
Используйте accessToken в сеансе, чтобы получить информацию о пользователе.
Суммировать
Построена простая программа SSO. Информация о accessToken получается через модуль паспорта и сохраняется в сеансе.
Модуль паспорта поддерживает множество стратегий, включая openID, Local, BrowserID, Facebook, Google, Twitter и т. д. Мы можем использовать его для адаптации к различным службам аутентификации.
Автор статьи: о программе flydean
Ссылка на эту статью:Woohoo. Флойд press.com/open ID-con you…
Источник этой статьи: блог flydean
Добро пожаловать на мой официальный аккаунт: самая популярная интерпретация, самая глубокая галантерея, самые краткие уроки и множество трюков, о которых вы не знаете, ждут вас!