NodeJS keycloak获取用户信息

问题描述 投票:0回答:1

我有一个Web应用程序,前端使用Angular,后端使用NodeJS,并使用Keycloak作为身份管理解决方案。

我的前端存储访问令牌和ID令牌。所有NodeJS路由均受密钥斗篷保护(仅承载者)。这就是为什么我在每个请求中都将访问令牌作为承载拦截在标头中的原因:

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

现在我可以授权请求,但是如何在后端获取用户信息?

至少只有一个ID才是发出与用户相关的DB请求的必要条件。是否可以从访问令牌中获取任何信息?

或者NodeJS连接器(keycloak-connect)本身是否获取此信息,以便可以将其保存在会话中?最好的方法是什么?

node.js keycloak oidc
1个回答
0
投票

如果我没记错的话,访问令牌是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_adapterhttps://github.com/v-ladynev/keycloak-nodejs-example/blob/master/lib/keyCloakService.js

© www.soinside.com 2019 - 2024. All rights reserved.