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的主要内容,如果未能解决你的问题,请参考以下文章
使用带有spring security的keycloak JWT令牌时如何修复403
对于未经身份验证的请求,Keycloak spring boot 返回 403 而不是 401