#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 /