Использование потока аутентификации OpenId Connect в onelogin

задняя часть Безопасность

Введение

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.

Мы смотрим на процесс взаимодействия.

  1. открыть в браузереhttp://localhost:3000, войдите на главную страницу приложения:

  1. Нажав на логин, вы перейдете на авторизованную страницу входа 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 шифрует параметры и возвращает страницу, которую видят все.

  1. Введите наш логин и пароль

Нажмите «Продолжить».

  1. После успешной аутентификации перейдите на страницу с информацией о пользователе.

Мы видим, что он также испытал ряд внутренних вызовов переадресации:

Все, о чем нам нужно позаботиться, это следующий обратный вызов:

http://localhost:3000/oauth/callback?code=2PVdwgQkNip883hql_ub9w3Byug&state=ohC1Fi0n0YTDELBtNmePDGvb

Вы можете видеть, что в обратном вызове мы получаем код, который можно использовать в дальнейшем для взаимодействия с onelogin.

  1. Нажмите профиль, мы попытаемся получить информацию о пользователе из 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

Добро пожаловать на мой официальный аккаунт: самая популярная интерпретация, самая глубокая галантерея, самые краткие уроки и множество трюков, о которых вы не знаете, ждут вас!