Недопустимый токен, предоставленный в oidc-провайдере, получающем доступ к userInfo enpoint

#node.js #oauth-2.0 #openid-connect #oidc-provider #node-oidc-provider

#node.js #oauth-2.0 #OpenID-connect #oidc-провайдер #узел-oidc-провайдер

Вопрос:

Я начал использовать сервер OAuth2 с oidc в node js. Ссылка на Github

Моя цель проста, получить доступ https://myserver/me который является конечной точкой userInfo.

Пытаясь узнать, как использовать сервер, я также использовал это руководство введите описание ссылки здесь, где я обнаружил, что могу создать токен, отправив запрос на конечную точку / токен.

В конфигурацию я добавил этот код (полный код сервера приведен ниже):

 {
    client_id: 'test_oauth_app',
    client_secret: 'super_secret',
    grant_types: ['client_credentials'],
    redirect_uris: [],
    response_types: [],
}
  

В postman я смог получить свой access_token по этому запросу

 POST /token
Headers:
Content-Type: application/x-www-form-urlencoded
Authorization: Basic dGVzdF9vYXV0aF9hcHA6c3VwZXJfc2VjcmV0
Body:
grant_type=client_credentialsamp;scopes=api1 
  

Я получаю это в качестве ответа:

 {
    "access_token": "zdjmZo7_BQSIl4iK9IMcBbKffxGO-wQ3jLzzQXTlyws",
    "expires_in": 600,
    "token_type": "Bearer"
}
  

Когда я проверил токен с помощью /token/ introspection, я обнаружил, что токен равен jti.
Поэтому я думаю, что он фактически возвращает token_id, и из-за этого я не могу получить доступ к конечной точке / me.

Вот весь образец сервера, который я использую:

 const { Provider } = require('oidc-provider');
const configuration = {
        features: {
                introspection: { enabled: true },
                clientCredentials: { enabled: true },
                userinfo: { enabled: true },
                jwtUserinfo: { enabled: true },
        },
        formats: {
            AccessToken: 'jwt',
        },
        clients: [{
            client_id: 'test_oauth_app',
            client_secret: 'super_secret',
            grant_types: ['client_credentials'],
            redirect_uris: [],
            response_types: []
        }],
        scopes: ['api1']
};

const oidc = new Provider('http://localhost:3000', configuration);
oidc.proxy = true

// express/nodejs style application callback (req, res, next) for use with express apps, see /examples/express.js
oidc.callback

// koa application for use with koa apps, see /examples/koa.js
oidc.app

// or just expose a server standalone, see /examples/standalone.js
const server = oidc.listen(3000, () => {
  console.log('oidc-provider listening on port 3000, check https://localhost:3000/.well-known/openid-configuration');
});
  

Для прокси установлено значение true, потому что у меня настроен https на перенаправление apache на этот сервер.

Я попытался изменить response_types, но для этого потребовался redirect_uri, который я не хочу иметь в своем сценарии.

Вот запрос, который я пытаюсь опубликовать, вот так:

 POST /me
Headers:
Content-Type: application/json
Authorization: Bearer zdjmZo7_BQSIl4iK9IMcBbKffxGO-wQ3jLzzQXTlyws
  

Ответ:

 {
    "error": "invalid_token",
    "error_description": "invalid token provided"
}
  

У кого-нибудь была подобная проблема? Я обнаружил здесь почти ту же проблему
, но, к сожалению, без решения.

Ответ №1:

На случай, если кто-то столкнется с такой же проблемой. Я смог это решить.

У меня не было достаточной информации, и я не знал, что делает тип предоставления client_credentials.

На самом деле он авторизует не пользователя, а какое-то приложение. Таким образом, у вас нет информации о пользователе, следовательно, вы не можете получить данные о пользователе через конечную точку userinfo.

Итак, если вы хотите получить информацию о пользователе, вы, вероятно, захотите использовать тип разрешения authorization_code.

Я нашел страницу, на которой многое написано довольно четко, поэтому, если вы начинаете с OAuth-сервера, вы можете попробовать. https://oauth2.thephpleague.com/authorization-server/auth-code-grant /