在 Node js 中使用 keycloak 访问令牌(从前端 HTTP GET 请求中的 Authorization 标头接收)对 Rest api 进行身份验证

Sar*_*mar 6 node.js keycloak

var loadData = function () {

var url = 'http://localhost:3000/users';

var req = new XMLHttpRequest();
req.open('GET', url, true);
req.setRequestHeader('Accept', 'application/json');
req.setRequestHeader('Authorization', 'Bearer ' + keycloak.token);

req.onreadystatechange = function () {
    if (req.readyState == 4) {
        if (req.status == 200) {
            console.log('Success');
        } else if (req.status == 403) {
            console.log('Forbidden');
        }
    }
}

req.send();  
};
Run Code Online (Sandbox Code Playgroud)

上面是我的前端代码,请求 REST API 并在授权标头中传递 keycloak 令牌,这是在 Node js 服务器端进行身份验证所需的。

现在我想知道如何使用 Keycloak 保护我的 Rest Api 并根据从前端收到的令牌对其进行身份验证,并判断真实用户是否正在请求 Rest api 资源。

我在node js中创建了一个rest api并使用了keycloak-connect npm packge。我已经将nodejs中间件与keycloak中间件进行了映射。

var express = require('express');
var router = express.Router();
var app = express();
var Keycloak = require('keycloak-connect');
var keycloak =new Keycloak();

app.use( keycloak.middleware( {
logout: '/logout',
admin: '/',
} ));

router.get('/users',function(req, res, next) {
var token=req.headers['authorization']; //Access token received from front end

//Now how to authenticate this token with keycloak???

});
Run Code Online (Sandbox Code Playgroud)

我还将 keycloak.json 文件包含在项目的根文件夹中。

rck*_*krd 0

查看keycloak.protect()函数。用它来验证您的路线。

router.get('/users',keycloak.protect(),function(req, res, next) {

});
Run Code Online (Sandbox Code Playgroud)

  • 不,keyloak.protect() 函数不会从标头获取不记名令牌。我仍在寻找这个解决方案来进行仅承载身份验证 (3认同)