JSO — это простая и гибкая библиотека OAuth для javascript, которую можно использовать в веб-приложении или нативном мобильном приложении.
JSO предоставляется некоммерческой компанией UNINETT AS, работающей в интересах образовательных и исследовательских учреждений Норвегии.
dist/
fetch()
, которая берёт на себя всё необходимое для получения токена, а затем возвращает нужные вам данные API.Jquery.ajax()
-обёртка, если у вас загружен jquery и вы не хотите требовать или полифилить fetch.Установите с помощью npm:
npm install jso --save
Если вы используете webpack или подобное, рекомендуется импортировать нужные компоненты следующим образом:
import {JSO, Popup} from 'jso'
let config = {...}
let j = new JSO(config)
Чтобы загрузить javascript, вы можете использовать распространяемый модуль UMD:
<script type="text/javascript" src="dist/jso.js"></script>
<script type="text/javascript">
var config = {...}
var j = new jso.JSO(config)
</script>
Тот же пакет доступен через CDN:
<script type="text/javascript" src="https://unpkg.com/jso/dist/jso.js"></script>
Чтобы начать использовать JSO, необходимо инициализировать новый объект JSO с конфигурацией для провайдера OAuth 2.0:
let client = new JSO({
providerID: "google",
client_id: "541950296471.apps.googleusercontent.com",
redirect_uri: "http://localhost:8080/", // URL, куда вы будете перенаправлены обратно, и где вы выполняете функцию обратного вызова().
authorization: "https://accounts.google.com/o/oauth2/auth",
scopes: { request: ["https://www.googleapis.com/auth/userinfo.profile"]}
})
Параметры конструктора JSO:
providerID
: ДОПОЛНИТЕЛЬНО Это просто тег имени, который используется для префикса данных, хранящихся в браузере. Это может быть всё, что угодно :)
client_id
: ОБЯЗАТЕЛЬНО Идентификатор клиента, которому доверяет поставщик. Поскольку JSO использует поток предоставления неявных грантов, клиентский секрет не нужен.
authorization
: ОБЯЗАТЕЛЬНО Конечная точка URL-адреса сервера авторизации
redirect_uri
: ДОПОЛНИТЕЛЬНО (может потребоваться поставщику). URI, на который пользователь будет перенаправлен после завершения. Это должен быть тот же URL, на котором представлена страница.
scopes.require
: Контролирует, какие области требуются в запросе авторизации. Этот список используется при просмотре кэшированных токенов, чтобы узнать, хотим ли мы использовать какой-либо из существующих.
scopes.request
: Контролирует, какие области запрашиваются в запросе авторизации. Когда ни один из кэшированных токенов не будет использоваться, и будет запрошен новый, список scopes.request
будет включён в запрос авторизации.
default_lifetime
: Секунды с временем жизни по умолчанию для токена доступа. Если установлено значение false
, это означает постоянный. По умолчанию — 3600. Это имеет значение только в том случае, если expires_in не был отправлен с сервера, что должно происходить ВСЕГДА.
permanent_scope
: Область, указывающая на то, что срок действия токена доступа бесконечен. Хорошо протестированный)
response_type
: тип ответа по умолчанию для всех запросов авторизации. По умолчанию: token
. Может быть переопределён, например, для использования OpenID Connect.
debug
: по умолчанию установлено значение false
. Установите значение true
, чтобы включить ведение журнала отладки на консоль.
request
: дополнительные параметры запроса, добавленные к запросу. Полезно для добавления всех доступных параметров OpenID Connect.
На странице (обычно той же), куда пользователь отправляется после авторизации, обычно в конечной точке redirect_uri
, вам необходимо вызвать функцию callback()
в JSO, чтобы сообщить ей проверить параметры ответа:
client.callback()
Не забудьте запустить функцию callback()
рано и до того, как вы используете маршрутизатор и начнёте использовать объект jso для получения данных.
Чтобы получить токен, используйте функцию getToken
:
client.getToken(opts)
.then((token) => {
console.log("Я получил токен: ", token)
})
Вы также можете убедиться, что токен доступен на ранней стадии вашего приложения, чтобы все взаимодействие с пользователем и перенаправление происходили до полной загрузки приложения. Для этого сделайте вызов getToken
и дождитесь обратного вызова, прежде чем продолжить.
Помните, что ВСЕГДА вызывайте функцию callback()
, чтобы обработать ответ от сервера OAuth, перед использованием getToken()
, иначе вы окажетесь в цикле перенаправления.
Параметры для getToken(opts)
:
allowredir
: генерирует исключение, если getToken
подразумевает перенаправление пользователя. Обычно вы хотели бы использовать checkToken()
вместо этого.response_type
: переопределение для этого конкретного запроса.scopes.require
: переопределение для этого конкретного запроса.scopes.request
: переопределение для этого конкретного запроса.В качестве альтернативы getToken()
вы можете проверить, доступен ли токен с помощью checkToken()
.
let token = client.getToken(opts)
if (token !== null) {
console.log("Я получил токен: ", token)
}
Параметры для checkToken(opts)
:
scopes.require
: переопределение для этого конкретного запроса.Вы можете стереть все сохранённые токены, чтобы имитировать выход из системы:
client.wipeTokens()
JSO предоставляет простую оболочку вокруг Javascript Fetch API.
// Инициализация
let config = {...}
let client = new JSO(config)
client.callback()
// Когда ваше приложение хочет получить доступ к защищённым данным
let f = new Fetcher(client)
let url = 'https://some-api.httpjs.net/rest/me'
f.fetch(url, {})
.then((data) => {
return data.json()
})
.then((data) => {
console.log("Я получил защищённые данные JSON из API", data)
})
.catch((err) => {
console.error("Ошибка от fetcher", err)
})
Если вы хотите убедиться, что требуемый токен доступа получен раньше, чем вы захотите получить доступ к данным, вы можете использовать для этого getToken()
, и вам не нужно читать или обрабатывать ответ.
// Обеспечение получения токена.
// Перенаправит пользователя для аутентификации, если токен недоступен.
client.getToken({
scopes: {
request: ["profile", "restdata", "longterm", "email"]
require: ["profile", "restdata", "longterm"]
}
})
FetcherJQuery
— это альтернативный интерфейс, который использует jQuery.ajax()
вместо fetch()
. Рассмотрите FetcherJQuery
как бета-версию.
Обратите внимание, что этот класс принимает объект jQuery в качестве второго аргумента конструктора. Аргумент опций выборки предоставляется в качестве опций для jQuery.ajax()
.
Функция fetch()
возвращает Promise, который разрешает данные ответа.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )