Код авторизации node-oidc-provider не найден - PullRequest
0 голосов
/ 03 октября 2019

Итак, я пытаюсь реализовать сервер openID Connect, используя библиотеку node-oidc-provider от panda, используя машинописный текст.

При попытке обмена я столкнулся с проблемойкод авторизации для токена авторизации. В основном это говорит, что код не найден, хотя я могу видеть документ в базе данных mongo, и помещая console.log в функцию поиска адаптера, используемого библиотекой для получения кода, он действительно найден.

Я получаю аутентификацию, используя этот URL:

http://localhost:3000/auth?client_id=test&response_type=code&scope=openid

А потом от почтальона отправлю запрос:

POST http://localhost:3000/token

REQ HEADERS
Content-Type:application/x-www-form-urlencoded

REQ BODY
grant_type:authorization_code
code:rekLjZKPFPk0pPSBJKlgqFt0tPtCq1k03ktS8CUh_X6
client_id:test
client_secret:testsecret
redirect_uri:https://lvh:8080/cb

Ответ следующий:

{
    "error": "invalid_grant",
    "error_description": "grant request is invalid"
}

Копая глубже в библиотеку, я помещаю console.log в файл lib/actions/grants/authorization_code.js перед проверкой if в строке 38. Там я вижу, что ctx.oidc.params.code переменная правильно установлена ​​с помощью auth_code, но тогда код, полученный из строки const code = await ctx.oidc.provider.AuthorizationCode.find, не определен.

Это мой oidc-config: oidc-config

Это адаптер mongodb: mongodb-adapter

Учитывая данные в журналах консоли, которые я ввел в код для отладки, это вывод, который я получаю при отправке запроса токена от почтальона:

Received code: rekLjZKPFPk0pPSBJKlgqFt0tPtCq1k03ktS8CUh_X6
MongoAdapter#find rekLjZKPFPk0pPSBJKlgqFt0tPtCq1k03ktS8CUh_X6
MongoAdapter#coll authorization_code oidc.authorization_code
MongoAdapter#find result {
  iat: 1570099703,
  exp: 1570105703,
  accountId: 5d937633b00ba1073edaa689,
  authTime: 1570099703,
  claims: { rejected: [] },
  grantId: 'JEMh2GsZaEjlgeGx9MXT0',
  redirectUri: 'https://lvh:8080/cb',
  scope: 'openid',
  sessionUid: 'QA3vhV_8-Jlgc8583_aGZ',
  kind: 'AuthorizationCode',
  jti: 'rekLjZKPFPk0pPSBJKlgqFt0tPtCq1k03ktS8CUh_X6',
  clientId: 'test',
  expiresWithSession: true
}
MongoAdapter#coll session oidc.session
Found code: undefined
InvalidGrant authorization code not found

Я почти уверен, что ошибка моя, а неошибка в библиотеке. Но я не могу понять, что я делаю неправильно.

ОБНОВЛЕНИЕ

Переходя в режим отладки, я вижу, что на самом деле это файлы в строке 26 lib/models/mixins/is_session_bound.js:> assert. равно (token.accountId, session.accountId (), «токен и субъект сеанса теперь разные»);

Но я до сих пор не знаю, что это значит.

1 Ответ

1 голос
/ 03 октября 2019

Таким образом, в основном проблема заключалась в том, что я передавал идентификатор учетной записи в том виде, в котором он выводился из запроса mongoose. Но поскольку идентификатор документа по умолчанию является объектом, проверка утверждения не удастся (даже если содержимое было таким же). Затем я отредактировал виртуальный метод в модели User, добавив toString () в конце.

schema.virtual('id').get(function (this: { _id: string }) {
    return this._id.toString();
});

И это решает проблему.

...