OAuth 2.0 в Node js Ошибка токена доступа Тип контента не JSON совместим - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь использовать OAuth 2.0 в своем API REST в Node js, но я не могу сгенерировать access_token

Когда я пытаюсь сгенерировать access_token, появляется следующая ошибка Ошибка токена доступа Содержание -тип не совместим JSON

У меня следующий код

import { Request, Response } from 'express';

    class OAuthController {

        async obtenerToken(req: Request, res: Response) {

            try {
                console.log(req.body)
                let grant_type = req.body.grant_type;
                let username = req.body.username;
                let password = req.body.password;
                let client_id = req.body.client_id;
                let client_secret = req.body.client_secret;
                let scope = req.body.scope;

                if (grant_type === "password" && client_id === "clientIdPDEZacatecas" && client_secret === "clientSecretPDEZacatecas") {
                    //Buscamos en mongo si el usuario existe con los parametros usuario y password
                    let existeUsuario = true;

                    if (existeUsuario == true) {
                        //GENERAMOS EL TOKEN

                        const credentials = {
                            client: {
                                id: 'clienteIdPDEZacatecas',
                                secret: 'clientSecretPDEZacatecas',
                            }, 
                            auth: {
                                tokenHost: 'http://localhost:3000/oauth'
                            }
                        };

                        const oauth2 = require('simple-oauth2').create(credentials);

                        const tokenConfig = {
                            username: username,
                            password: password,
                            scope: scope,
                        };

                        const result = await oauth2.ownerPassword.getToken(tokenConfig);
                        const accessToken = oauth2.accessToken.create(result);

                        console.log(accessToken)

                        res.status(200).json(accessToken);
                    }
                    else {
                        console.log('No existe el usaurio');
                        let error = {
                            error: 400,
                            message: 'Usuario no registrado'
                        }
                        res.status(400).json(error);
                    }
                }
                else {
                    console.log('Parametros incorrectos')
                    let error = {
                        error: 400,
                        message: 'Sin permisos'
                    }
                    res.status(400).json(error);
                }
            } catch (error) {
                console.log('Access Token Error', error.message);
            }
        }
    }
    export const oAuthController = new OAuthController();

При выполнении кода моя консоль говорит Access Token Error The content-type is not JSON compatible

Я использую simple-oauth2 https://www.npmjs.com/package/simple-oauth2, с grant_type: password Я пытаюсь сгенерировать токен доступа

1 Ответ

0 голосов
/ 13 февраля 2020

Я столкнулся с этой проблемой, и для меня это была проблема конфигурации. Пример предоставляет конфигурацию следующим образом:

OAUTH_AUTHORITY=https://login.microsoftonline.com/common
OAUTH_ID_METADATA=/v2.0/.well-known/openid-configuration
OAUTH_AUTHORIZE_ENDPOINT=/oauth2/v2.0/authorize
OAUTH_TOKEN_ENDPOINT=/oauth2/v2.0/token

wreck использует Url.URL для объединения OAUTH_AUTHORITY с OAUTH_TOKEN_ENDPOINT, что приводит к https://login.microsoftonline.com/oauth2/v2.0/token и, следовательно, теряет общее. Это приводит к 404, и, следовательно, больше нет ответа JSON.

Я немного изменил конфигурацию и удалил начальные косые черты из относительных путей и добавил конечный sla sh к базовому URL.

OAUTH_AUTHORITY=https://login.microsoftonline.com/common/
OAUTH_ID_METADATA=/v2.0/.well-known/openid-configuration
OAUTH_AUTHORIZE_ENDPOINT=oauth2/v2.0/authorize
OAUTH_TOKEN_ENDPOINT=oauth2/v2.0/token

Так что OAUTH_TOKEN_ENDPOINT является относительным. Я не понял, почему это работает для авторизации, но все еще работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...