Я пытаюсь сгенерировать токен в расширении chrome, а затем использовать его для проверки запросов к внутреннему серверу. Я успешно создал токен во внешнем интерфейсе, но когда я отправляю его бэкенду и проверяю его с помощью библиотеки nodejs google-auth-library
, но всегда получаю ошибку Error: Wrong number of segments in token: [TOKEN_HERE]
.
Я пытался выяснить, как исправить это онлайн, и ничего, что я нашел, не работает. Идентификатор моего внутреннего номера совпадает с идентификатором в консоли.
Я создал приложение расширения Chrome в консоли разработчика и добавил его в свой манифест:
"oauth2": {
"client_id": "THE ID",
"scopes":["https://www.googleapis.com/auth/classroom.topics.readonly", "https://www.googleapis.com/auth/classroom.topics","https://www.googleapis.com/auth/classroom.courses.readonly", "https://www.googleapis.com/auth/classroom.rosters.readonly", "https://www.googleapis.com/auth/classroom.student-submissions.me.readonly"]
},
...
"permissions": [
"identity",
],
Как только я запустил код
chrome.identity.getAuthToken({interactive: true}, function(token) {
console.log(token);
});
Он генерирует токен, который я смог проверить в расширении с помощью:
var x = new XMLHttpRequest();
x.open('GET', 'https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=' + token);
Это также сгенерировало новый клиент oAuth2 в моей консоли, который является веб-приложением:
https://i.imgur.com/uH789P8.png
На внутреннем сервере nodejs я попытался использовать оба сгенерированных идентификатора для проверки токена. Приложение расширения не имеет секрета клиента, но веб-приложение имеет. Я пытался использовать секрет с идентификатором веб-сервера, но это тоже не сработало.
Этот код для проверки бэкэнда:
const { OAuth2Client } = require('google-auth-library');
const authClient = new OAuth2Client(CLIENT_ID);
async function verify(token) {
const ticket = await authClient.verifyIdToken({
idToken: token,
audience: [CLIENT_ID] // Specify the CLIENT_ID of the app that accesses the backend
// Or, if multiple clients access the backend:
//[CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3]
});
const payload = ticket.getPayload();
return {
domain: payload['hd'],
userid: payload['sub']
}
}
Я хочу проверить токен с помощью этого кода, но он не может этого сделать. Каждый раз, когда я использую токен, который можно проверить с помощью запроса xhr
, он просто выдает ошибку Error: Wrong number of segments in token
. Я понятия не имею, куда идти отсюда, так как документации немного. Вся помощь приветствуется!
РЕДАКТИРОВАТЬ: Я также пытался проверить токен с префиксом Bearer
, он не работал.
РЕДАКТИРОВАТЬ 2: Я понял проблему! ... просто не решение. Буду обновлять, когда я это выясню. Просто чтобы вы знали причину, по которой это не работает, в том, что способ, которым я пытался получить токен, дал мне токен доступа, а не идентификационный токен. Я собираюсь попытаться выяснить, как проверить токены доступа и многое другое.