Невозможно проверить client_assertion: ключ не найден
Я использую библиотеку Singpass NdiOidcHelper (@govtechsg/singpass-myinfo-oidc-helper) для обработки входа в систему Singpass и получения токенов в моем приложении Node.js. Я определил объект хранилища ключей с параметрами ключа EC и использовал его для создания ключа знака утверждения клиента. Однако когда я пытаюсь получить токен с помощью метода getTokens, я получаю сообщение об ошибке «Невозможно проверить client_assertion: ключ не найден».
Вот объект хранилища ключей и объект ключа, которые я использую:
const keystore = {
kty: 'EC',
kid: 'gfU0OIt2KoTz8JIm6naqVsbyGUs8mtiMr_k5GnLPmxI',
use: 'sig',
alg: 'ES256',
crv: "P-256",
x : "SVqB4JcUD6lsfvqMr-OKUNUphdNn64Eay60978ZlL74",
y : "lf0u0pMj4lGAzZix5u4Cm5CMQIgMNpkwy163wtKYVKI",
d : "0g5vAEKzugrXaRbgKG0Tj2qJ5lMP4Bezds1_sTybkfk",
e : "AQAB",
}
const key = {
"key": keystore,
"format": 'json',
"alg": 'ES256',
}
Я получаю сообщение об ошибке «Невозможно проверить client_assertion: ключ не найден», когда я делаю запрос к API /assert. Может кто-нибудь помочь мне понять, что не так с моим кодом?
Вот код для обработки входа в систему Singpass и получения токена:
/логин API:
app.get('/login', async (req, res) => {
const state = Math.random().toString(36).substring(2);
const redirectURL = await server.constructAuthorizationUrl(state, 'test')
res.cookie('connect.sid', '').redirect(redirectURL)
})
/утверждение API:
app.get('/assert', async (req, res) => {
const token = await server.getTokens(req.query.code)
console.log('Token', token)
})
Я не уверен, возникла ли проблема с моим ключом или возникла ошибка в методе getTokens. Я также пытался использовать известные ключи макета, но все еще сталкиваюсь с той же ошибкой. Любая помощь в решении этой проблемы будет принята с благодарностью.
1 ответ
Вы должны убедиться, что client_assertion правильно создан с помощью библиотеки jose, иначе вы всегда будете получать эту ошибку:
Unable to verify client_assertion: no key found
Итак, как убедиться, что он правильно построен в соответствии с документацией :
- Заголовок (тип, alg, kid)
- Полезная нагрузка (sub, aud, iss и т. д.)
- Подпись** (вам необходимо подписать правильный закрытый ключ)
Если какое-либо из приведенных выше значений неверно при создании JWT утверждения клиента, произойдет ошибка.
**Вы упомянули, что «попытались использовать общеизвестные ключи макета», что уже неправильно, поскольку вам необходимо подписать проверяющую сторону (rp) в файле oidc-v2-rp-secret.json.