DenOAuth — это легкое стороннее промежуточное ПО для аутентификации с открытым исходным кодом, созданное для Deno на основе js-client-oauth2. Библиотека DenOAuth совместима с Oak, Abc, Pogo и Opine. Этот модуль предназначен для простой реализации в любых веб-приложениях, созданных с помощью этих фреймворков Deno (с дальнейшим развитием). С помощью DenOAuth вы можете инициировать аутентификацию в своем приложении с помощью простого импорта и нескольких ключевых методов.
Прежде чем мы начнем…
Важно, чтобы мы рассмотрели основы Deno и OAuth 2.0, прежде чем погрузиться в библиотеку DenOAuth, поэтому давайте начнем, чтобы мы могли перейти к хорошему!
Дено
Deno — это среда выполнения для JavaScript и TypeScript, основанная на движке JavaScript V8 и языке программирования Rust. Он был создан Райаном Далем, первоначальным создателем Node.js, одной из самых популярных сред выполнения в мире, которая в 2018 году достигла более 1 миллиарда загрузок по всему миру.
Deno был разработан как альтернатива Node.js, подчеркивая высокую безопасность, производительность и обращаясь к нескольким аспектам Node, которые, по мнению самого Даля, он мог бы улучшить с помощью Deno.
ОАут 2.0
OAuth (открытая аутентификация) — это структура авторизации, которая предоставляет приложениям возможность безопасного назначенного доступа, как выразился Роб Соберс. OAuth обычно используется пользователями Интернета для предоставления веб-сайтам или приложениям доступа к информации, которая существует на другом веб-сайте или в приложении без предоставления ваших паролей. Эта последняя часть огромна с точки зрения онлайн-безопасности.
Например, всякий раз, когда вы даете веб-сайту разрешение на доступ к вашему профилю и публикацию в ленте социальных сетей — это OAuth.
OAuth работает, когда клиентское приложение сначала запрашивает токен доступа с сервера авторизации. После того, как пользователь дает разрешение клиентскому приложению на использование своих данных, сервер авторизации отправляет токен доступа клиентскому приложению, которое, в свою очередь, отправляет этот токен доступа в виде запроса к стороннему API, содержащему нужные данные пользователя. Как только API подтвердит, что токен доступа содержит правильные разрешения, он отправляет данные обратно в клиентское приложение.
Если это кажется сложным процессом или вы просто визуальный ученик, как и я, я рекомендую ознакомиться с этой статьей Такахико Кавасаки, где он предоставляет простое руководство по OAuth 2.0.
DenOAuth
DenOAuth предлагает стратегию аутентификации для LinkedIn, GitHub, Spotify, Google и Discord (подробнее в разработке), которые в настоящее время совместимы с Oak, Abc, Pogo и Opine. Каждая стратегия использует простой трехэтапный процесс реализации OAuth.
Для начала убедитесь, что вы импортировали DenOAuth в свое приложение. Мы будем использовать стратегию GitHub для этой демонстрации. Каждая стратегия строится немного по-своему, поэтому, если вы ищете стратегии LinkedIn или Google, вы можете найти некоторые примеры тех, которые реализованы в каждой из вышеупомянутых структур здесь.
import { GitHubClient } from ‘https://deno.land/x/[email protected]/mod.ts';
Процесс
Первое: инициализируйте новый объект для вашего клиента.
const GitHubObject = new GitHubClient({ clientId: ‘<your client id>’, clientSecret: “<your secret key>”, tokenUri: ‘https://github.com/login/oauth/access_token', redirect: “http://localhost:3000/auth/github/callback", // The redirect uri is added in the GitHub OAuth developer settings scope: “read:user” });
Здесь мы создаем новый экземпляр GitHubClient, передавая ваш идентификатор клиента, секретный ключ и URL-адрес перенаправления. clientId и clientSecret предоставляются поставщиком (в данном случае GitHub), а перенаправление назначается вами, разработчиком. Свойство redirect в объекте GitHubClient должно быть рабочей страницей вашего приложения, на которую GitHub может перенаправить.
Второе: вызовите метод createLink, чтобы перенаправить пользователя на ввод учетных данных для авторизации.
router.get('/gitHub', (ctx) => { ctx.response.body = { message: 'success', data: ctx.response.redirect(GitHubObject.code.createLink()) }; });
Когда пользователь нажимает кнопку для входа через GitHub на вашей странице входа, он сначала будет перенаправлен на страницу авторизации GitHub для ввода учетных данных для API, а затем перенаправлен обратно на URL-адрес обратного вызова (обычно домашняя страница вашего веб-приложения), который вы ввели в свой redirect при создании экземпляра объекта GitHubClient. Просто добавьте метод createLink в тело ответа вашего запроса на получение, и все готово.
Третье: вызовите наш метод processAuth, указав в качестве параметра текущий URL.
router.get('/auth/github/callback', async (ctx) => { // Exchange the authorization code for an access token and exchange token for profile const userProfile: any = await GitHubObject.code.processAuth(ctx.request.url); // userProfile is an object of information given by GitHub. You can destructure the object to grab specific information const { name } = userProfile; ctx.response.body = `Hello, ${name}!`; })
Как только пользователь будет перенаправлен обратно на URL-адрес обратного вызова после ввода действительных учетных данных, вы заметите, что в конце вашего URL-адреса добавлен значительный объем нового кода из объекта ответа. Этот URL-адрес — это то, что мы называем «текущий URL-адрес».
Метод processAuth извлекает дополнительный код из текущего URL-адреса и обменивает его на токен доступа. Затем processAuth обменяет токен на информацию о пользователе, предоставленную сторонним API.
И вот оно! Вся работа по созданию правильного URL-адреса авторизации и обмену токена доступа на нужные данные выполняется «под капотом», поэтому вы можете сэкономить время на построении остальной части вашего приложения. Надеюсь, вы найдете эту библиотеку полезной в своих усилиях по OAuth, и мы с нетерпением ждем возможности выпустить больше сторонних стратегий и фреймворков Deno в ближайшем будущем!
Вы можете найти больше информации о DenOAuth здесь.