NodeJS keycloak получить информацию о пользователе - PullRequest
0 голосов
/ 31 октября 2019

У меня есть веб-приложение с Angular в Frontend, NodeJS в Backend и Keycloak в качестве решения для управления идентификацией.

Мой Frontend хранит токен доступа и идентификатор. Все маршруты NodeJS защищены Keycloak (только на предъявителя). Вот почему я перехватывал по каждому из моих запросов токен доступа в качестве носителя в заголовке:

setHeaders: { Authorization: 'Bearer ' + this.oauthService.getAccessToken() }

Теперь я могу авторизовать запросы, но как я могу получить информацию о пользователе в Backend?

Для выполнения запросов к БД, зависящих от пользователя, необходим как минимум только идентификатор. Можно ли получить какую-либо информацию из токена доступа?

Или же коннектор NodeJS (keycloak-connect) сам получает эту информацию, чтобы я мог сохранить ее в сеансе? Каков наилучший способ сделать это?

1 Ответ

1 голос
/ 01 ноября 2019

если я не ошибаюсь, токен доступа является токеном JWT, и вы сможете расшифровать его следующим образом:

const jwt = require('jsonwebtoken');
var tokendetails = jwt.decode(token)

В качестве альтернативы в промежуточном программном обеспечении Keycloakconnect вы можете получить подробную информацию, как показано ниже

app.get('/apis/me', keycloak.enforcer('user:profile', {response_mode: 'token'}), function (req, res) {
       ​let  tokenDetails = req.kauth.grant

   ​})

Я не проверял, поэтому я не уверен на 100%, но я думаю, что вы должны иметь возможность получить имя пользователя таким образом:

req.kauth.grant.access_token.content.preferred_username

Другим способом вы могли бы получить что-то вроде этого:

const request = require('request');
const options = {
  url: `${authServerUrl}/realms/${encodeURIComponent(realm)}/account`;,
  headers: {
    'Authorization':'bearer '+token
  }
};

request(options,function(error, response, body){

   if(!error) { 
    let userProfile = body
   }
})

Вам могут помочь следующие ресурсы: https://www.keycloak.org/docs/latest/securing_apps/index.html#_nodejs_adapter https://github.com/v-ladynev/keycloak-nodejs-example/blob/master/lib/keyCloakService.js

...