【问题标题】:Keycloak nodeJS always get 403Keycloak nodeJS总是得到403
【发布时间】:2019-05-15 10:32:32
【问题描述】:

我有一个 NodeJS 应用程序正在运行,它想用 keycloak 保护它。

我已经完成了与其他受 KeyCloak(角色、范围)保护的应用程序类似的所有操作,但它只是不想工作。

我的 config.json :

{
 "realm": "<Realm>",
 "bearer-only": true,
 "auth-server-url": "https://<URL>/auth",
 "ssl-required": "external",
 "resource": "<serviceName>",
 "use-resource-role-mappings": true,
 "confidential-port": 0
}

然后我这样设置:

let memoryStore = new session.MemoryStore();
let keycloak = new Keycloak({ store: memoryStore });

然后在一条路线上:

keycloak.protect('')

我也在开头添加了这个:

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

生成的不记名令牌通过 JWT.IO 进行双重检查,表明它是正确的..

有什么帮助吗?

谢谢

【问题讨论】:

    标签: node.js json keycloak


    【解决方案1】:

    您需要添加 Keycloak 中间件

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

    要保护资源,您需要将keycloak.protect() 添加到路由

    app.get('/gps', keycloak.protect(), handler);
    

    不保护资源就不要添加任何东西

    app.get('/street', handler);
    

    https://stackoverflow.com/a/53705242/3405171

    【讨论】:

    • 不,它不起作用
    • @JureBeton 你可以在这里找到一个工作示例github.com/v-ladynev/keycloak-nodejs-example
    • 不,它不起作用。当我使用客户端令牌从邮递员向protect() 路由发送请求时,它工作正常,但是当我从 mangular 应用程序执行此操作时,我被禁止 403
    【解决方案2】:

    只是为那些被困在同一点上的人回答这个问题:

    keycloak.protect("");是问题所在,因为它搜索了一个名为“”的角色,但显然找不到。因此它给了我一个 403。

    如果您希望用户通过身份验证,但他不需要任何角色,请使用不带参数的 keycloak.protect()。

    【讨论】:

      猜你喜欢
      • 2021-11-13
      • 2020-09-29
      • 2022-10-16
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 2018-04-03
      • 1970-01-01
      相关资源
      最近更新 更多