Can anyone help me with what is wrong with the below code in the link GitHub
oauth2-provider server with passport-oauth2 consumer
After I login with http://localhost:8082
and reach my callback URL:
http://localhost:8081/auth/provider/callback
, it throws an error
var express = require('express')
, passport = require('passport')
, util = require('util')
, TwitterStrategy = require('passport-twitter').Strategy;
var TWITTER_CONSUMER_KEY = "--insert-twitter-consumer-key-here--";
var TWITTER_CONSUMER_SECRET = "--insert-twitter-consumer-secret-here--";
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(obj, done) {
done(null, obj);
});
passport.use(new TwitterStrategy({
consumerKey: TWITTER_CONSUMER_KEY,
consumerSecret: TWITTER_CONSUMER_SECRET,
callbackURL: "http://127.0.0.1:3000/auth/twitter/callback"
},
function(token, tokenSecret, profile, done) {
// asynchronous verification, for effect...
process.nextTick(function () {
return done(null, profile);
});
}
));
var app = express.createServer();
// configure Express
app.configure(function() {
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.logger());
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.session({ secret: 'keyboard cat' }));
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.get('/', function(req, res){
res.render('index', { user: req.user });
});
app.get('/account', ensureAuthenticated, function(req, res){
res.render('account', { user: req.user });
});
app.get('/login', function(req, res){
res.render('login', { user: req.user });
});
app.get('/auth/twitter',
passport.authenticate('twitter'),
function(req, res){
// The request will be redirected to Twitter for authentication, so this
// function will not be called.
});
app.get('/auth/twitter/callback',
passport.authenticate('twitter', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('/');
});
app.get('/logout', function(req, res){
req.logout();
res.redirect('/');
});
app.listen(3000);
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) { return next(); }
res.redirect('/login')
}
InternalOAuthError: Failed to obtain access token
How can I resolve this issue?
Can anyone help me with what is wrong with the below code in the link GitHub
oauth2-provider server with passport-oauth2 consumer
After I login with http://localhost:8082
and reach my callback URL:
http://localhost:8081/auth/provider/callback
, it throws an error
var express = require('express')
, passport = require('passport')
, util = require('util')
, TwitterStrategy = require('passport-twitter').Strategy;
var TWITTER_CONSUMER_KEY = "--insert-twitter-consumer-key-here--";
var TWITTER_CONSUMER_SECRET = "--insert-twitter-consumer-secret-here--";
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(obj, done) {
done(null, obj);
});
passport.use(new TwitterStrategy({
consumerKey: TWITTER_CONSUMER_KEY,
consumerSecret: TWITTER_CONSUMER_SECRET,
callbackURL: "http://127.0.0.1:3000/auth/twitter/callback"
},
function(token, tokenSecret, profile, done) {
// asynchronous verification, for effect...
process.nextTick(function () {
return done(null, profile);
});
}
));
var app = express.createServer();
// configure Express
app.configure(function() {
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.logger());
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.session({ secret: 'keyboard cat' }));
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.get('/', function(req, res){
res.render('index', { user: req.user });
});
app.get('/account', ensureAuthenticated, function(req, res){
res.render('account', { user: req.user });
});
app.get('/login', function(req, res){
res.render('login', { user: req.user });
});
app.get('/auth/twitter',
passport.authenticate('twitter'),
function(req, res){
// The request will be redirected to Twitter for authentication, so this
// function will not be called.
});
app.get('/auth/twitter/callback',
passport.authenticate('twitter', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('/');
});
app.get('/logout', function(req, res){
req.logout();
res.redirect('/');
});
app.listen(3000);
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) { return next(); }
res.redirect('/login')
}
InternalOAuthError: Failed to obtain access token
How can I resolve this issue?
Содержание
- 1 Что вызывает ошибку при проверке токена доступа на Facebook?
- 1.1 Решение 1. Обновление локальных данных Messenger (из-за ошибки в Messenger)
- 1.2 Решение 2. Проверка токена с истекшим сроком доступа (для разработчиков)
Сообщение «Ошибка проверки токена доступа»Происходит при использовании Facebook / Messenger в основном двумя группами пользователей; один из них — постоянный пользователь, обращающийся к мессенджеру, а другой — разработчик, который разрешает вход в Facebook через API
Ошибка проверки токена доступа — Messenger
Сообщение об ошибке в основном относится к процессу безопасности, который Facebook реализует при доступе к его платформе. Если какой-либо из шагов не завершен, недействителен или истек срок действия, вы получите сообщение об ошибке. Поскольку в двух случаях пользователи могут столкнуться с этой ошибкой, мы перечислили два решения.
Что вызывает ошибку при проверке токена доступа на Facebook?
Как упоминалось ранее, сообщение об ошибке ‘ошибка при проверке токена доступа’Не похож на другие обычные сообщения об ошибках, с которыми сталкивается конечный пользователь. Причины этой ошибки:
- Сессия в мессенджере против вашей учетной записи как-то недействительным или имеет истекший.
- Маркер доступа Facebook, который вы используете с API, истекший. Это происходит во многих случаях в среде разработки приложения, потому что токен доступа действителен только в течение ограниченного времени, прежде чем его нужно будет снова получить (для разработчиков).
- Пользователь имеет поменял пароль или вышел из всех подключенных устройств из-за проблем безопасности.
- Facebook намеренно вышел из вас посыльный по соображениям безопасности.
Что касается решения, указанного ниже для разработчиков, мы предполагаем, что вы знаете основы вызова API, который вы делаете с использованием токенов доступа. Если вы новичок в среде разработки, мы рекомендуем прочитать некоторые подробные материалы по кодированию, чтобы получить представление о токенах доступа.
Решение 1. Обновление локальных данных Messenger (из-за ошибки в Messenger)
Обычные пользователи могут увидеть это сообщение об ошибке при попытке войти в мессенджер или при переключении между различными учетными записями. Это не более, чем просто ошибка в вашем устройстве Android. Ваш смартфон отслеживает все токены доступа, связанные с Messenger. Если какой-либо из них станет недействительным или не обновится автоматически, вы можете получить сообщение об ошибке.
Здесь мы обновим данные вашего приложения Messenger. Убедитесь, что у вас есть имя пользователя и пароль, потому что вас могут попросить ввести его.
- На вашем устройстве Android откройте настройки и перейдите к Диспетчер приложений.
- Поиск записи посыльный и открой его.
Messenger — менеджер приложений для Android
- Однажды в настройках приложения выберите Очистить данные и очистите данные приложения и кеш.
Очистка данных — Messenger
- Закройте приложение настроек и перезапустите мессенджер после первого закрытия приложения. Теперь попробуйте войти в систему и посмотреть, исправлено ли сообщение об ошибке.
Решение 2. Проверка токена с истекшим сроком доступа (для разработчиков)
Токены доступа — это элементы, используемые приложениями, которые выполняют запросы API от имени пользователя. В основном токен доступа представляет собой авторизацию определенного приложения, поэтому он может авторизовать логин или получить доступ к некоторой информации пользователя.
Руководство Facebook по просроченным токенам
Если вы используете API Facebook и получаете доступ к токенам по самой простой причине (например, используете Facebook для проверки процесса регистрации в вашем приложении), убедитесь, что он не истек. Обычно срок действия токенов Facebook истекает через 2 часа после их запроса с сервера Facebook. Вы можете проверить официальную документацию по How-To: Обрабатывать токены доступа с истекшим сроком действия самим Facebook.
Удалить разрешения автономного доступа в разработке приложений
Замечания: В некоторых случаях в среде разработки пользователи имеют Удалить offline_accesРазрешение включено. В некоторых случаях срок действия токена истекает, даже если срок его действия не истек. Убедитесь, что вы отключили эти параметры.
Вы также можете попробовать получить разрешение на offline_access Таким образом, вы можете получить токен, который не истекает и вызывает проблемы.
Если вы столкнулись с ошибкой «истек CSRF-токен» — читайте нашу статью. Из неё вы узнаете, как работает CSRF-token защита, и что делать, если CSRF токен истек.
Что такое CSRF
CSRF (англ. cross-site request forgery) — это межсайтовая подделка запроса. Это атака, которой может подвергаться любой веб-ресурс или веб-приложение. В первую очередь это касается сайтов, которые используют cookies, сертификаты авторизации и браузерную аутентификацию. В результате атаки страдают клиенты и репутация ресурса.
Вредоносный скрипт прячется в коде сайта или обычной ссылке. С помощью него мошенник получает доступ к конфиденциальной информации: платежным реквизитам, логину и паролю, личной переписке. После того как данные “в кармане”, хакер может изменить пароль, указать свой номер телефона или email, перевести деньги на свой счёт и многое другое.
Как работает CSRF-атака
Злоумышленник может использовать фишинговую ссылку — это наиболее распространенный способ обмана. В этом случае атака работает по следующей схеме:
- Злоумышленник создаёт поддельную страницу, очень похожую на оригинальную, и встраивает её в сайт. В коде ссылка может выглядеть так: <a href=“вредоносная ссылка”>Unsubscribe here</a>.
- Пользователь переходит с одной страницы сайта на другую (например, на страницу оплаты) и вместо реальной страницы попадает на поддельную.
- Пользователь совершает действие на странице, например, оплачивает товар или вводит данные авторизации.
- Информация или денежные средства вместо оригинального сервера уходят на сервер мошенника.
CSRF-атаки случаются из-за того, что без специальных настроек сервер не может с точностью в 100% определить, кто именно выполняет действия со стороны пользователя. Он не может проверить, действительно ли на кнопку “оплатить” нажал тот пользователь, который изначально открыл страницу с оплатой. Хакеры активно используют этот люфт в безопасности HTTP-запросов и применяют вредоносные скрипты. Однако от атаки можно защититься с помощью CSRF-токенов.
Что такое CSRF-token и как он работает
В общем понимании токен — это механизм, который позволяет идентифицировать пользователя или конкретную сессию для безопасного обмена информацией и доступа к информационным ресурсам. Токены помогают проверить личность пользователя (например, клиента, который онлайн получает доступ к банковскому счёту). Их используют как вместо пароля, так и вместе с ним. Токен — это в каком-то смысле электронный ключ.
CSRF-token — это максимально простой и результативный способ защиты сайта от CSRF-мошенников. Он работает так: сервер создаёт случайный ключ (он же токен) и отправляет его браузеру клиента. Когда браузер запрашивает у сервера информацию, сервер, прежде чем дать ответ, требует показать ключ и проверяет его достоверность. Если токен совпадает, сессия продолжается, а если нет — прерывается. Токен действителен только одну сессию — с новой сессией он обновляется.
Чтобы получить ответ от сервера, используются разные методы запроса. Условно они делятся на две категории: те, которые не изменяют состояние сервера (GET, TRACE, HEAD), и те, которые изменяют (PUT, PATCH, POST и DELETE). Последние имеют большую CSRF-уязвимость и поэтому должны быть защищены в первую очередь.
При создании и использовании токена должны соблюдаться следующие условия:
-
нахождение в скрытом параметре;
-
генерация с помощью генератора псевдослучайных чисел;
-
ограниченное время жизни (одна сессия);
-
уникальность для каждой транзакции;
-
устойчивый к подбору размер (в битах);
-
невозможно переиспользовать.
Типы токенов
Существует три основных типа токенов по способу генерации:
- Synchronizer Tokens или Anti-CSRF (токены синхронизации). В этом случае инициатором ключа выступает сервер — на нём хранится исходная шифровка. Когда браузер обращается к серверу и предъявляет ему ключ, сервер сравнивает его с исходником и в зависимости от результата продолжает или прерывает сессию.
- Double Submit Cookie (двойная отправка куки). При этом способе токен нигде не хранится. Когда браузер обращается к серверу впервые за сессию, сервер генерирует и передаёт ему ключ в двух формах: через куки и в одном из параметров ответа. При следующих обращениях браузера сервер дважды проверяет правильность ключа — в параметрах и в куках.
- Encrypted Token (зашифрованный токен). Этот способ предполагает, что ключом шифруется какая-то часть информации о клиенте, которая содержится в браузере. При первом запросе браузера сервер получает информацию о пользователе, зашифровывает её и передаёт браузеру токен. При следующем взаимодействии сервер расшифровывает токен и сверяет информацию.
Помимо токенов, для защиты используется флаг Same-Site (большинство браузеров его поддерживает). Он работает напрямую для cookies и позволяет помечать куки конкретного домена. Сервер проверяет, содержатся ли нужные пометки в куках страницы, с которых происходит оплата или вносятся изменения. Если пометок нет — сессия прекращается.
Также в качестве меры защиты на страницах сайта настраивают форму с капчей. Это особенно актуально для страниц смены пароля или совершения денежных транзакций.
«Истек срок действия токена» или «CSRF-значение недопустимо»: что это значит и что делать
Даже при авторизации на сайтах, для которых настроена защита от атак, можно встретить следующие варианты сообщения об ошибке: «Недопустимое CSRF-значение»/«CSRF-токены не совпадают» или «Token expired» (в переводе — срок действия токена истек). Сообщение может отображаться как на английском, так и на русском. Пример ошибки при авторизации на сайте REG.RU:
Обычно ошибка возникает по двум основным причинам:
-
сервер некорректно сгенерировал токен;
-
срок токена истек — пользователь долго не совершал никаких действий на странице.
В обоих случаях исправить проблему поможет перезагрузка страницы — вы запустите новую сессию, а значит, сервер и браузер договорятся о новом рабочем токене. Для этого нажмите на значок обновления страницы:
Иногда ошибка возникает из-за расширений защиты конфиденциальности или плагинов блокировки рекламы (например, Ghostery, UBlock Origin, Blur), которые настроены у пользователя. В этом случае можно отключить расширение. Также можно добавить сайт, на котором появилось сообщение, в список доверенных сайтов.
На примере сайта reg.ru покажем, что для этого нужно:
в Google Chrome
- Откройте настройки Chrome:
- В списке слева выберите Конфиденциальность и безопасность, а затем Файлы cookie и другие данные сайтов.
- Внизу страницы откройте Сайты, которые всегда могут использовать файлы cookie и кликните Добавить.
- Введите «[*.]www.reg.ru» и нажмите Добавить.
- Нажмите Все файлы cookie и данные сайта и удалите все записи, которые связаны с сайтом reg.ru.
- Перезагрузите браузер и выполните операцию повторно.
в Яндекс.Браузер
- Откройте настройки браузера Яндекс:
- Перейдите на Сайты — Расширенные.
- Кликните Настройки… для первого параметра в списке. Затем на вкладке «Разрешена» введите www.reg.ru и кликните Добавить.
- Добавьте адрес сайта для всех параметров списка по аналогии.
в Safari
- Откройте настройки Safari комбинацией Cmd + , (⌘,).
- Перейдите на вкладку Конфиденциальность и проверьте, что в пункте «Файлы cookie и данные веб-сайтов» не выбрано «Блокировать все файлы cookie». Если это так, снимите настройки.
- Кликните Управление данными веб-сайтов и удалите все записи, которые относятся к www.reg.ru.
- Перезагрузите браузер и выполните операцию повторно.
В некоторых случаях сгенерировать верный токен мешают локальные настройки куки в браузере. Чтобы сессия прошла успешно, достаточно вернуть дефолтные настройки.
Заключение
Успешная атака CSRF позволяет хакеру действовать на сайте от имени другого зарегистрированного посетителя. Чтобы мошенник не добрался до конфиденциальных данных, для сайта нужно настроить один из типов CSRF-токенов. Токены позволяют серверу и браузеру безопасно обмениваться информацией в течение сессии. Однако даже на безопасных сайтах можно столкнуться с ошибкой «токен CSRF истек». В этом нет ничего страшного. Чтобы возобновить подключение, достаточно обновить страницу браузера.
Прежде, чем ответить на вопрос: «Что такое «ошибка токена»?», нужно понять, что такое токен. Так вот, токен (также может быть в виде аппаратного токена, USB-ключа, криптографического токена) в виде компактного устройства предназначен для того, чтобы обеспечить информационную безопасность пользователя, также чтобы можно было идентифицировать его владельца. Как правило, токен является физическим устройством, которое используется для того, чтобы упростить аутентификацию. Поэтому, если произошла ошибка токена, то это вопрос серьёзный и требует непростого подхода. Чтобы исправить такую ошибку, нужно обратиться к специалистам.
Как посмотреть ошибки автосинхронизации
При настройке автосинхронизации для приложений на базе SAML могут возникать следующие ошибки:
-
Ошибки этапа настройки
-
Ошибки выполнения автосинхронизации
-
Ошибки на уровне ресурсов
Ниже описано, как их устранить.
Примечание. Если вам не удается устранить ошибку с помощью инструкций из этой статьи, обратитесь в службу поддержки.
Ошибки этапа настройки
Ошибка кода авторизации
Такая ошибка может появиться, если код авторизации не удалось заменить на токен обновления. Причиной может послужить неправильный код авторизации или длительный промежуток времени с момента авторизации до нажатия кнопки Сохранить изменения. Чтобы устранить эту ошибку, повторите авторизацию и сохраните изменения.
Сообщение об ошибке | Решение |
---|---|
Не удалось сгенерировать токен авторизации. | Повторите попытку и сохраните изменения. |
Ошибка устаревшей страницы
Эта ошибка возникает, если страница браузера не обновлялась, в то время как настройки были изменены в другом окне браузера или другим пользователем. При этом появляются следующие сообщения:
Сообщение об ошибке | Решение |
---|---|
Данные на странице устарели. Конфигурация синхронизации настроена. | Чтобы переопределить существующие настройки, обновите страницу. |
Данные на странице устарели. Конфигурация синхронизации отсутствует. | Чтобы переопределить существующие настройки, обновите страницу. |
Данные на странице устарели. Активировать ненастроенную конфигурацию синхронизации нельзя. | Чтобы переопределить существующие настройки, обновите страницу. |
Данные на странице устарели. Удалить ненастроенную конфигурацию синхронизации нельзя. | Чтобы переопределить существующие настройки, обновите страницу. |
Временная ошибка страницы
Временные ошибки обычно устраняются сами собой. Обновите страницу или повторите попытку немного позже.
Сообщение об ошибке | Решение |
---|---|
Не удалось загрузить настройки синхронизации. | Обновите страницу. |
Не удалось загрузить предварительные настройки синхронизации. | Обновите страницу. |
Не удалось загрузить статус синхронизации. | Обновите страницу. |
Не удалось активировать синхронизацию. | Повторите попытку. |
Не удалось удалить настройки синхронизации. | Повторите попытку. |
Не удалось создать настройку синхронизации. | Повторите попытку и сохраните изменения. |
Не удалось обновить настройку синхронизации. | Повторите попытку и сохраните изменения. |
Не удалось загрузить настраиваемые атрибуты. | Повторите попытку. |
Не удалось обновить сопоставление атрибутов. | Повторите попытку. |
Не удалось обновить настройки группы для автосинхронизации. | Повторите попытку. |
Не удалось обновить конфигурацию отключения. | Повторите попытку. |
Конфигурация удалена, но запретить доступ клиента API не удалось. |
При удалении конфигурации отменяются разрешения, которые позволяют приложению обращаться к вашим данным в сервисах Google. Эту ошибку можно устранить вручную: нажмите Управлять доступом клиента API в разделе Безопасность. Если вы планируете позже восстановить конфигурацию, ничего не делайте. |
Не удалось обновить настройки синхронизации. | Обновите страницу. |
Ошибка аутентификации. | Учетные данные для аутентификации (например, токен владельца) указаны неверно. Задайте правильные учетные данные. |
Введенный вами URL конечной точки системы кросс-доменного управления учетными данными (SCIM) недействителен. | URL конечной точки недействителен. Введите правильный URL. |
Не удалось включить синхронизацию. | Переведите ползунок Автосинхронизация в положение Активный. |
Не удалось удалить настройки синхронизации. |
|
Не удалось загрузить атрибуты целевого поставщика услуг. |
|
Не удалось загрузить набор атрибутов целевого ресурса. | Проверьте URL конечной точки, указанный при настройке автосинхронизации, и повторите сопоставление атрибутов облачного каталога с атрибутами целевого приложения. |
Ошибки выполнения автосинхронизации
Ошибки выполнения автосинхронизации возникают из-за проблем с доступом к API, авторизацией и конфигурацией.
Ошибки внутренних сервисов Google
Код ошибки | Описание и решение |
---|---|
17003 17006 17008 |
Описание Не удалось пройти аутентификацию во внутренних сервисах Google. Причина Аннулированы разрешения у следующего идентификатора клиента синхронизации пользователей: 910835873219-es01p47a1ks618hgp59q26cnc6sv33r3.apps.googleusercontent.com Решение Убедитесь, что у данного идентификатора есть разрешения на доступ к следующим областям: https://www.googleapis.com/auth/admin.directory.user.readonly, В разделе Безопасность консоли администратора нажмите Управлять доступом клиента API и перейдите в раздел Расширенные настройки. Проверьте доступ идентификатора к указанным областям и при необходимости добавьте их. |
17007 |
Описание Не удалось предоставить доступ приложениям, которые поддерживают автосинхронизацию с делегированием прав на уровне домена. Не удалось делегировать права на уровне домена сервису автосинхронизации. Без этих прав сервис автосинхронизации не сможет читать каталог Google. Причины Причина 1: аннулированы разрешения у идентификатора клиента синхронизации пользователей. Решения В разделе Безопасность консоли администратора нажмите Управлять доступом клиента API и перейдите в раздел Расширенные настройки. Добавьте идентификатор клиента и области действия: Идентификатор клиента: Области действия: https://www.googleapis.com/auth/admin.directory.user.readonly, Вы также можете удалить приложение, с которым возникла проблема, а затем добавить его снова. Причина 2: непредвиденные системные ошибки. Решение Как правило, эта проблема решается автоматически. Если она не решилась через несколько часов, добавьте идентификатор клиента и области действия или удалите и повторно добавьте приложение, как описано выше в инструкциях для причины 1. |
Ошибки токена авторизации
Код ошибки | Описание и причина | Решение |
---|---|---|
17010 |
Недостаточно учетных данных для вызова конечной точки SCIM. Причина: токен авторизации аннулирован. |
Повторите попытку авторизации. Для этого нажмите Автосинхронизация и в настройках выберите Авторизовать повторно. |
17013 |
Ошибка получения токена доступа у поставщика услуг. Причина: токен авторизации аннулирован. |
Если проблема не решится автоматически, повторите попытку авторизации. Для этого нажмите Автосинхронизация и в настройках выберите Авторизовать повторно. |
Ошибки доступа к токену
Код ошибки | Описание и причина | Решение |
---|---|---|
17002 17011 |
Не удалось создать токен доступа. Причина: сейчас некоторые внутренние сервисы Google недоступны. |
Проблема должна устраниться автоматически. |
17009 | Не удалось создать токен доступа из токена обновления. | Повторите попытку авторизации. Для этого нажмите Автосинхронизация и в настройках выберите Авторизовать повторно. |
Общие ошибки
Код ошибки | Описание и причина | Решение |
---|---|---|
1200x |
Внутренняя ошибка |
Проблема должна устраниться автоматически. |
25001 | Сервер или сервис Google временно недоступны. | Настройте автосинхронизацию ещё раз. |
25002 |
Сервер или сервис Google временно недоступны. Причина: у клиента не установлено приложение. |
Установите приложение и настройте автосинхронизацию ещё раз. |
25005 | Сервер или сервис Google временно недоступны. | Проблема должна устраниться автоматически. |
25016 | Сервер или сервис Google временно недоступны. | Настройте автосинхронизацию ещё раз. |
50001 | Внутренняя ошибка | Проблема должна устраниться автоматически. |
50003 | Внутренняя ошибка | Проблема должна устраниться автоматически. |
50005 | Удаленная группа присутствует в фильтрах групп. | Удалите данную группу из области синхронизации. |
50006 | Внутренняя ошибка | Проблема должна устраниться автоматически. |
Ошибки на уровне ресурсов
Если в разделе «Автосинхронизация» на странице настроек приложения SAML есть ошибки, нажмите Скачать список. В скачанном файле будут перечислены операции создания, удаления или изменения, которые завершились сбоем, а также приведены коды и описания всех ошибок.
Эти ошибки влияют только на конкретные ресурсы, указанные в файле.
Код ошибки | Описание ошибки | Решение |
---|---|---|
45003 |
Приложение на базе системы кросс-доменного управления учетными данными (SCIM) не принимает запрос на обновление, создание или удаление ресурса. Подробное описание ошибки содержится в файле, который можно скачать. Возможные причины:
|
После устранения ошибки сохраните изменения и повторите попытку. |
45004 |
Произошла ошибка при передаче данных между поставщиком услуг и Google в качестве поставщика идентификационной информации. Текст ошибки: «Внутренняя ошибка – превышена квота». Возможные причины:
|
Обратитесь к поставщику услуг. |
45005 | Конечная точка системы кросс-доменного управления учетными данными (SCIM) недоступна. Проверьте данные в консоли администратора. | После устранения ошибки сохраните изменения и повторите попытку. |
45006 |
Приложение на базе системы кросс-доменного управления учетными данными (SCIM) не принимает запрос на обновление, создание или удаление ресурса. Подробное описание ошибки содержится в файле, который можно скачать. Возможные причины:
|
После устранения ошибки сохраните изменения и повторите попытку. |
45016 |
Приложение на базе системы кросс-доменного управления учетными данными (SCIM) не принимает запрос на обновление, создание или удаление ресурса, поскольку обязательное поле не заполнено. Подробное описание ошибки содержится в файле, который можно скачать. |
После устранения ошибки сохраните изменения и повторите попытку. |
Эта информация оказалась полезной?
Как можно улучшить эту статью?
После выполнения метода /V3/Authenticate?type=certificate получаю зашифрованный ответ и согласно API мне необходимо его расшифровать тем же сертификатом , затем преобразовать в Base64 и полученную строку использовать в качестве ddauth_token при авторизации для любых последующих действий.
Попытка
Соединение = Новый HTTPСоединение(«https://diadoc-api.kontur.ru»,,,,,,Новый ЗащищенноеСоединениеOpenSSL(),Ложь);
Исключение
Сообщить(«Не удалось установить соединение с сервером онлайн-проверки:»
+ Символы.ПС + ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
Возврат;
КонецПопытки;
//Тело POST-запроса
имяФайлаСертификата = "d:/xxxxxxxxxxxxxxxxxxxx/yyyyyyyyyy.cer";
ВремКаталог = "c:Users...AppDataLocalTemp66ac670b-f9b9-11ea-9441-00155d27324d";
ИмяФайлаВыходЗапросаВыгрузкиДок = ВремКаталог + "UploadDocResult83.txt";
ТекстЗапросаФайл = Новый ТекстовыйДокумент;
ТекстЗапросаФайл.Прочитать(имяФайлаСертификата, "windows-1251");
ТелоPOSTЗапроса = ТекстЗапросаФайл.ПолучитьТекст();
ФайлСертификата = Новый ДвоичныеДанные(имяФайлаСертификата);
СодержимоеФайла = XMLСтрока(ФайлСертификата);
Заголовки = Новый Соответствие();
Заголовки.Вставить("Authorization", "DiadocAuth ddauth_api_client_id=test-diadoc-api-ххххххххххххххххххххххххххх");
Заголовки.Вставить("Content-Type", "application/octet-stream"); //
Заголовки.Вставить("Content-Length", Формат(СтрДлина(СодержимоеФайла),"ЧЦ=; ЧГ=")); //
HTTPЗапрос = Новый HTTPЗапрос("/V3/Authenticate?type=certificate", Заголовки);
HTTPЗапрос.УстановитьТелоИзСтроки(СодержимоеФайла, "windows-1251", ИспользованиеByteOrderMark.НеИспользовать);
Результат = Соединение.ОтправитьДляОбработки(HTTPЗапрос, ИмяФайлаВыходЗапросаВыгрузкиДок );
МенеджерКриптографии = НОвый МенеджерКриптографии("Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider", "", 80);
МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = "1";
ФайлТокенаДляРасшифровки = Новый ДвоичныеДанные(ИмяФайлаВыходЗапросаВыгрузкиДок);
ТокенРасшифрован = МенеджерКриптографии.Расшифровать(ИмяФайлаВыходЗапросаВыгрузкиДок);
Сообщить("ТокенРасшифрован: " + ТокенРасшифрован);
Токен = УбратьСимволы1013(ПолучитьBase64СтрокуИзДвоичныхДанных(ТокенРасшифрован));
Сообщить("Токен: " + Токен);
ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Authorization", "DiadocAuth ddauth_api_client_id=test-diadoc-api-xxxxxxxxxxxxxxxxxxxxxxxx, ddauth_token=" + Токен);
ИмяФайлВыходАутентификация = ВремКаталог + "" + "AuthResult83.txt";
HTTPЗапрос = Новый HTTPЗапрос("/GetMyOrganizations?autoRegister=false", ЗаголовокHTTP);
Результат = Соединение.Получить(HTTPЗапрос,ИмяФайлВыходАутентификация);
Сообщить("Код состояния " + Результат.КодСостояния + ".");
И ответы с промежуточными значениями после запроса /GetMyOrganizations?autoRegister=false:
ТокенРасшифрован: F2 A2 C1 A0 E4 9A 55 6C 3C 70 3F BD F0 E9 24 EA FE 96 5F 08 5B 33 BB C1 F6 06 5C 13 98 DA 99 68 4A AA 2A CE 6D C6 07 66 FC 40 31 BF F1 F8 C1 CC FC D7 FF 50 65 C6 B1 EC A0 C0 9A 96 1D 97 BF DE 9F A7 9D 63 84 C7 D4 09 66 97 F1 3A 3F BC 45 B8 28 A4 50 17 E2 AF 61 B5 F1 1A A9 9B C8 D4 58 49 F7 64 EF 50 9C FE 34 DB FD C3 F3 F2 35 FE 07 59 F7 E2 28 66 A8 95 6D 41 86 FC 8A E0 A4 62 89 70 3A 1E F6 94 D9 2F DF CE CB 6D 65 62 D9 C3 EC 34 6A 90 5E 25 ED BE 63 02 27 6E 2D D0 55 34 F0 19 04 5E 86 51 F1 4A 36 E7 DC 42 F2 C9 13 9B 3C 83 D5 7F 8F D3 57 A1 A5 4B C8 31 D6 D1 6B 7A A3 0B EB FE 06 E7 EC E6 D7 9D 59 1C BA 85 C9 FE BD 5B 6B C0 40 05 41 70 62 59 26 0A 0B F9 36 7D 37 5D 3E 96 80 0F F3 B6 CA ED 59 CA 1E 99 37 E0 68 93 BE EB 0D A6 FE F5 97 BB 77 58 CB 19 8D 28 80 73
Токен: 8qLBoOSaVWw8cD+98Okk6v6WXwhbM7vB9gZcE5jamWhKqirObcYHZvxAMb/x+MHM/Nf/UGXGseygwJqWHZe/3p+nnWOEx9QJZpfxOj+8RbgopFAX4q9htfEaqZvI1FhJ92TvUJz+NNv9w/PyNf4HWffiKGaolW1BhvyK4KRiiXA6HvaU2S/fzsttZWLZw+w0apBeJe2+YwInbi3QVTTwGQRehlHxSjbn3ELyyRObPIPVf4/TV6GlS8gx1tFreqML6/4G5+zm151ZHLqFyf69W2vAQAVBcGJZJgoL+TZ9N10+loAP87bK7VnKHpk34GiTvusNpv71l7t3WMsZjSiAcw==
Код состояния 401. Invalid auth token
Подскажите, в чем ошибка расшифровки/кодирования? Возможно я использую не те методы или где то не указываю нужные форматы…
Как посмотреть ошибки автосинхронизации
При настройке автосинхронизации для приложений на базе SAML могут возникать следующие ошибки:
-
Ошибки этапа настройки
-
Ошибки выполнения автосинхронизации
-
Ошибки на уровне ресурсов
Ниже описано, как их устранить.
Примечание. Если вам не удается устранить ошибку с помощью инструкций из этой статьи, обратитесь в службу поддержки.
Ошибки этапа настройки
Ошибка кода авторизации
Такая ошибка может появиться, если код авторизации не удалось заменить на токен обновления. Причиной может послужить неправильный код авторизации или длительный промежуток времени с момента авторизации до нажатия кнопки Сохранить изменения. Чтобы устранить эту ошибку, повторите авторизацию и сохраните изменения.
Сообщение об ошибке | Решение |
---|---|
Не удалось сгенерировать токен авторизации. | Повторите попытку и сохраните изменения. |
Ошибка устаревшей страницы
Эта ошибка возникает, если страница браузера не обновлялась, в то время как настройки были изменены в другом окне браузера или другим пользователем. При этом появляются следующие сообщения:
Сообщение об ошибке | Решение |
---|---|
Данные на странице устарели. Конфигурация синхронизации настроена. | Чтобы переопределить существующие настройки, обновите страницу. |
Данные на странице устарели. Конфигурация синхронизации отсутствует. | Чтобы переопределить существующие настройки, обновите страницу. |
Данные на странице устарели. Активировать ненастроенную конфигурацию синхронизации нельзя. | Чтобы переопределить существующие настройки, обновите страницу. |
Данные на странице устарели. Удалить ненастроенную конфигурацию синхронизации нельзя. | Чтобы переопределить существующие настройки, обновите страницу. |
Временная ошибка страницы
Временные ошибки обычно устраняются сами собой. Обновите страницу или повторите попытку немного позже.
Сообщение об ошибке | Решение |
---|---|
Не удалось загрузить настройки синхронизации. | Обновите страницу. |
Не удалось загрузить предварительные настройки синхронизации. | Обновите страницу. |
Не удалось загрузить статус синхронизации. | Обновите страницу. |
Не удалось активировать синхронизацию. | Повторите попытку. |
Не удалось удалить настройки синхронизации. | Повторите попытку. |
Не удалось создать настройку синхронизации. | Повторите попытку и сохраните изменения. |
Не удалось обновить настройку синхронизации. | Повторите попытку и сохраните изменения. |
Не удалось загрузить настраиваемые атрибуты. | Повторите попытку. |
Не удалось обновить сопоставление атрибутов. | Повторите попытку. |
Не удалось обновить настройки группы для автосинхронизации. | Повторите попытку. |
Не удалось обновить конфигурацию отключения. | Повторите попытку. |
Конфигурация удалена, но запретить доступ клиента API не удалось. |
При удалении конфигурации отменяются разрешения, которые позволяют приложению обращаться к вашим данным в сервисах Google. Эту ошибку можно устранить вручную: нажмите Управлять доступом клиента API в разделе Безопасность. Если вы планируете позже восстановить конфигурацию, ничего не делайте. |
Не удалось обновить настройки синхронизации. | Обновите страницу. |
Ошибка аутентификации. | Учетные данные для аутентификации (например, токен владельца) указаны неверно. Задайте правильные учетные данные. |
Введенный вами URL конечной точки системы кросс-доменного управления учетными данными (SCIM) недействителен. | URL конечной точки недействителен. Введите правильный URL. |
Не удалось включить синхронизацию. | Переведите ползунок Автосинхронизация в положение Активный. |
Не удалось удалить настройки синхронизации. |
|
Не удалось загрузить атрибуты целевого поставщика услуг. |
|
Не удалось загрузить набор атрибутов целевого ресурса. | Проверьте URL конечной точки, указанный при настройке автосинхронизации, и повторите сопоставление атрибутов облачного каталога с атрибутами целевого приложения. |
Ошибки выполнения автосинхронизации
Ошибки выполнения автосинхронизации возникают из-за проблем с доступом к API, авторизацией и конфигурацией.
Ошибки внутренних сервисов Google
Код ошибки | Описание и решение |
---|---|
17003 17006 17008 |
Описание Не удалось пройти аутентификацию во внутренних сервисах Google. Причина Аннулированы разрешения у следующего идентификатора клиента синхронизации пользователей: 910835873219-es01p47a1ks618hgp59q26cnc6sv33r3.apps.googleusercontent.com Решение Убедитесь, что у данного идентификатора есть разрешения на доступ к следующим областям: https://www.googleapis.com/auth/admin.directory.user.readonly, В разделе Безопасность консоли администратора нажмите Управлять доступом клиента API и перейдите в раздел Расширенные настройки. Проверьте доступ идентификатора к указанным областям и при необходимости добавьте их. |
17007 |
Описание Не удалось предоставить доступ приложениям, которые поддерживают автосинхронизацию с делегированием прав на уровне домена. Не удалось делегировать права на уровне домена сервису автосинхронизации. Без этих прав сервис автосинхронизации не сможет читать каталог Google. Причины Причина 1: аннулированы разрешения у идентификатора клиента синхронизации пользователей. Решения В разделе Безопасность консоли администратора нажмите Управлять доступом клиента API и перейдите в раздел Расширенные настройки. Добавьте идентификатор клиента и области действия: Идентификатор клиента: Области действия: https://www.googleapis.com/auth/admin.directory.user.readonly, Вы также можете удалить приложение, с которым возникла проблема, а затем добавить его снова. Причина 2: непредвиденные системные ошибки. Решение Как правило, эта проблема решается автоматически. Если она не решилась через несколько часов, добавьте идентификатор клиента и области действия или удалите и повторно добавьте приложение, как описано выше в инструкциях для причины 1. |
Ошибки токена авторизации
Код ошибки | Описание и причина | Решение |
---|---|---|
17010 |
Недостаточно учетных данных для вызова конечной точки SCIM. Причина: токен авторизации аннулирован. |
Повторите попытку авторизации. Для этого нажмите Автосинхронизация и в настройках выберите Авторизовать повторно. |
17013 |
Ошибка получения токена доступа у поставщика услуг. Причина: токен авторизации аннулирован. |
Если проблема не решится автоматически, повторите попытку авторизации. Для этого нажмите Автосинхронизация и в настройках выберите Авторизовать повторно. |
Ошибки доступа к токену
Код ошибки | Описание и причина | Решение |
---|---|---|
17002 17011 |
Не удалось создать токен доступа. Причина: сейчас некоторые внутренние сервисы Google недоступны. |
Проблема должна устраниться автоматически. |
17009 | Не удалось создать токен доступа из токена обновления. | Повторите попытку авторизации. Для этого нажмите Автосинхронизация и в настройках выберите Авторизовать повторно. |
Общие ошибки
Код ошибки | Описание и причина | Решение |
---|---|---|
1200x |
Внутренняя ошибка |
Проблема должна устраниться автоматически. |
25001 | Сервер или сервис Google временно недоступны. | Настройте автосинхронизацию ещё раз. |
25002 |
Сервер или сервис Google временно недоступны. Причина: у клиента не установлено приложение. |
Установите приложение и настройте автосинхронизацию ещё раз. |
25005 | Сервер или сервис Google временно недоступны. | Проблема должна устраниться автоматически. |
25016 | Сервер или сервис Google временно недоступны. | Настройте автосинхронизацию ещё раз. |
50001 | Внутренняя ошибка | Проблема должна устраниться автоматически. |
50003 | Внутренняя ошибка | Проблема должна устраниться автоматически. |
50005 | Удаленная группа присутствует в фильтрах групп. | Удалите данную группу из области синхронизации. |
50006 | Внутренняя ошибка | Проблема должна устраниться автоматически. |
Ошибки на уровне ресурсов
Если в разделе «Автосинхронизация» на странице настроек приложения SAML есть ошибки, нажмите Скачать список. В скачанном файле будут перечислены операции создания, удаления или изменения, которые завершились сбоем, а также приведены коды и описания всех ошибок.
Эти ошибки влияют только на конкретные ресурсы, указанные в файле.
Код ошибки | Описание ошибки | Решение |
---|---|---|
45003 |
Приложение на базе системы кросс-доменного управления учетными данными (SCIM) не принимает запрос на обновление, создание или удаление ресурса. Подробное описание ошибки содержится в файле, который можно скачать. Возможные причины:
|
После устранения ошибки сохраните изменения и повторите попытку. |
45004 |
Произошла ошибка при передаче данных между поставщиком услуг и Google в качестве поставщика идентификационной информации. Текст ошибки: «Внутренняя ошибка – превышена квота». Возможные причины:
|
Обратитесь к поставщику услуг. |
45005 | Конечная точка системы кросс-доменного управления учетными данными (SCIM) недоступна. Проверьте данные в консоли администратора. | После устранения ошибки сохраните изменения и повторите попытку. |
45006 |
Приложение на базе системы кросс-доменного управления учетными данными (SCIM) не принимает запрос на обновление, создание или удаление ресурса. Подробное описание ошибки содержится в файле, который можно скачать. Возможные причины:
|
После устранения ошибки сохраните изменения и повторите попытку. |
45016 |
Приложение на базе системы кросс-доменного управления учетными данными (SCIM) не принимает запрос на обновление, создание или удаление ресурса, поскольку обязательное поле не заполнено. Подробное описание ошибки содержится в файле, который можно скачать. |
После устранения ошибки сохраните изменения и повторите попытку. |
Эта информация оказалась полезной?
Как можно улучшить эту статью?
I am unable to get an access token from Thinktecture Authorization Server. After successfully getting grant code, I try make a POST request to the token endpoint, but always get a 400 Bad Request with this response:
message: «{ «error»: «invalid_client» }»
My request was:
POST to https://host/authz/users/oauth/token
request body:
{«code»:»grant_code_received_from_previous_request»,»client_id»:»myclient»,»grant_type»:»authorization_code»,»client_secret»:»mysecret»}
My client is setup properly in the Authorization Server. My client id and secret are correct; they are the same value I used to the grant code in the previous request (/users/oauth/authorize).
Any idea for this «invalid_client» issue? There is no other information in the response other than «invalid_client».
asked Mar 3, 2015 at 21:58
you need to send client credentials using http basic authentication instead of posting Id and secret in the body.
answered Mar 5, 2015 at 18:53
leastprivilegeleastprivilege
18k1 gold badge33 silver badges50 bronze badges
1
I followed @leastprivilege advice and did that:
// set up the base64-encoded credentials
let clientId = "myclientid"
let clientSecret = "myclientsecret"
let loginString = NSString(format: "%@:%@", clientId, clientSecret)
let loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)!
let base64LoginString = loginData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(0))
After that created the request instance like this:
var request = NSMutableURLRequest(URL: myUrl!)
request.HTTPMethod = "POST"
// Only these four are required based on the documentation.
let postString = "grant_type=authorization_code&code=(code)&redirect_uri=app:/your.redirect.uri"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
request.setValue("Basic (base64LoginString)", forHTTPHeaderField: "Authorization")
Hope it helps!
answered Sep 25, 2016 at 8:43
user2128702user2128702
1,9792 gold badges28 silver badges65 bronze badges
You can get the more information on the logging file.
Take a look at it, you can check the logging options on the web.config of the Identity Server:
<system.diagnostics>
<!-- simple system.diagnostics logger -->
<trace autoflush="true" indentsize="4">
<listeners>
<add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="Trace.log" />
<remove name="Default" />
</listeners>
</trace>
<!-- can be used with TraceSource logger -->
<!--<sources>
<source name="Thinktecture.IdentityServer"
switchValue="Information, ActivityTracing">
<listeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "trace.svclog" />
</listeners>
</source>
</sources>-->
More information about logging at:
http://identityserver.github.io/Documentation/docs/configuration/logging.html
answered Mar 5, 2015 at 12:02
I am unable to get an access token from Thinktecture Authorization Server. After successfully getting grant code, I try make a POST request to the token endpoint, but always get a 400 Bad Request with this response:
message: «{ «error»: «invalid_client» }»
My request was:
POST to https://host/authz/users/oauth/token
request body:
{«code»:»grant_code_received_from_previous_request»,»client_id»:»myclient»,»grant_type»:»authorization_code»,»client_secret»:»mysecret»}
My client is setup properly in the Authorization Server. My client id and secret are correct; they are the same value I used to the grant code in the previous request (/users/oauth/authorize).
Any idea for this «invalid_client» issue? There is no other information in the response other than «invalid_client».
asked Mar 3, 2015 at 21:58
you need to send client credentials using http basic authentication instead of posting Id and secret in the body.
answered Mar 5, 2015 at 18:53
leastprivilegeleastprivilege
18k1 gold badge33 silver badges50 bronze badges
1
I followed @leastprivilege advice and did that:
// set up the base64-encoded credentials
let clientId = "myclientid"
let clientSecret = "myclientsecret"
let loginString = NSString(format: "%@:%@", clientId, clientSecret)
let loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)!
let base64LoginString = loginData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(0))
After that created the request instance like this:
var request = NSMutableURLRequest(URL: myUrl!)
request.HTTPMethod = "POST"
// Only these four are required based on the documentation.
let postString = "grant_type=authorization_code&code=(code)&redirect_uri=app:/your.redirect.uri"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
request.setValue("Basic (base64LoginString)", forHTTPHeaderField: "Authorization")
Hope it helps!
answered Sep 25, 2016 at 8:43
user2128702user2128702
1,9792 gold badges28 silver badges65 bronze badges
You can get the more information on the logging file.
Take a look at it, you can check the logging options on the web.config of the Identity Server:
<system.diagnostics>
<!-- simple system.diagnostics logger -->
<trace autoflush="true" indentsize="4">
<listeners>
<add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="Trace.log" />
<remove name="Default" />
</listeners>
</trace>
<!-- can be used with TraceSource logger -->
<!--<sources>
<source name="Thinktecture.IdentityServer"
switchValue="Information, ActivityTracing">
<listeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "trace.svclog" />
</listeners>
</source>
</sources>-->
More information about logging at:
http://identityserver.github.io/Documentation/docs/configuration/logging.html
answered Mar 5, 2015 at 12:02
Как получить токены доступа разбирали в этой иструкции.
В большинстве случаев при полном доступе к аккаунту проблем быть не должно. Однако изредка случаются ситуации, когда даже создатель аккаунта Метрики/Директа не может сформировать токен с полными правами доступа. Для таких случаев инструкция ниже:
Ошибка в токене Яндекс-Метрики
У Яндекса иногда бывает ошибка, связанная с тем, что у создателя счетчика метрики нет явных прав на редактирование, их нужно прописать через другой аккаунт с выданными правами.
Необходимо выдать права на редактирование другому аккаунту (Метрика/Настройки/Доступ), зайти под этим аккаунтом в наш личный кабинет и сформировать токен. Проблема с токеном Метрики должна решиться. Если нет, обратитесь в чат поддержки на нашем сайте, пожалуйста.
Ошибка в токене Яндекс-Директа
Ошибки бывают двух видов:
- Если Вы являетесь агентством и Вы даете доступ к представительскому аккаунту в Яндекс.Директе, необходимо указать логин клиента, для аккаунта которого необходима защита.
- Если же зашли под аккаунтом, на котором размещены рекламные кампании, то проблема можно решить так образом — в директе в левом меню перейти в раздел «Информация» — «Ваши представители». Затем добавить представителя с полными правами, зайти под ним в наш личный кабинет и добавить токен Директа.