Keycloak nodeJS总是得到403

Posted

技术标签:

【中文标题】Keycloak nodeJS总是得到403【英文标题】:Keycloak nodeJS always get 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 进行双重检查,表明它是正确的..

有什么帮助吗?

谢谢

【问题讨论】:

【参考方案1】:

您需要添加 Keycloak 中间件

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

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

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

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

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

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

【讨论】:

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

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

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

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

【讨论】:

以上是关于Keycloak nodeJS总是得到403的主要内容,如果未能解决你的问题,请参考以下文章

无法在 keycloak 中创建用户。获取 403 状态

Keycloak REST API 403 被禁止

使用带有spring security的keycloak JWT令牌时如何修复403

对于未经身份验证的请求,Keycloak spring boot 返回 403 而不是 401

为啥我在使用 RestTemplate 获取数据时总是得到 403? [复制]

Spring Boot - KeyCloak 指向 403 禁止