微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

节点Keycloak请求即使使用承载令牌也返回登录名

如何解决节点Keycloak请求即使使用承载令牌也返回登录名

我一直试图将Keycloak集成到一个简单的节点/表达服务器中,以便可以在标头中使用承载令牌进行身份验证,但是我正在执行的每个受保护的请求都返回html(登录页面)。

我的简单index.js文件

const express = require('express');
const app = express();
const keycloak = require('./kc-config.js').initKeycloak();

app.use(keycloak.middleware());

app.get('/',(req,res) => {
  res.send("Server is up!");
});

app.get('/kc-test',keycloak.protect(),res) => {
  res.send('success');
} )

app.listen(3000);

我简单的kc-config.js文件

var session = require('express-session');
var Keycloak = require('keycloak-connect');

let _keycloak;
var keycloakConfig = {
  clientId: 'myclient',bearerOnly: false,serverUrl: 'http://my.client.com:4008/auth',realm: 'master',credentials: {
    "secret": "{my-secret}"
  }
};

function initKeycloak() {
  if (_keycloak) {
    console.warn("Trying to init Keycloak again!");
    return _keycloak;
  }
  else {
    console.log("Initializing Keycloak...");
    memoryStore = new session.MemoryStore();
    _keycloak = new Keycloak({ store: memoryStore },keycloakConfig);
    return _keycloak;
  }
}

function getKeycloak() {
  if (!_keycloak){
    console.error('Keycloak has not been initialized. Please called init first.');
  }
  return _keycloak;
}

module.exports = {
  initKeycloak,};

我正在使用从该curl请求返回的令牌:

curl -X POST 'http://my.client.com:4008/auth/realms/master/protocol/openid-connect/token'
--header 'Content-Type: application/x-www-form-urlencoded'
--data-urlencode 'grant_type=password'
--data-urlencode 'client_id=myclient'
--data-urlencode 'client_secret=mysecretkey'
--data-urlencode 'username=myusername'
--data-urlencode 'password=mypassword'

我不应该被授权吗?为什么即使我的令牌有效也要我再次登录

有关更多信息,这是我在keycloak管理控制台上为客户端设置的屏幕截图。

Client Keycloak Settings

我很困惑。我使用它是完全错误的吗?我的想法是,我可以将curl请求中的令牌简单地放入受保护的/ kc-test路由的请求的标头中。

解决方法

客户端的访问类型只需要承载。

{
  "realm": "camunda","auth-server-url": "https://localhost:9000/auth/","ssl-required": "external","resource": "user-management","bearer_only":true,"credentials": {
    "secret": "45078604-3c4a-44a6-8a0f-ab094f050211"
  },"confidential-port": 0,"policy-enforcer": {}
}

或者您可以在 keycloak.json 文件中将 bearer_only 设置为 true

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。