问题描述
我的设置如下:
- 其他API(春季启动)
- 前端应用程序(Angular 8)
- 身份验证服务器(密钥斗篷)
当前情况:
- 用户在角度登录页面中输入用户名和密码。
- Angular发出POST请求,并从keycloak服务器获取访问令牌,刷新令牌等。
- 在所有随后的休息api服务器请求(仅承载)中,访问令牌都将传入
标头为“授权:承载
” - Rest api会查看用户的角色,并以此返回所需数据或引发403 Forbidden异常。
我想要的东西: 要使用api密钥对外部用户进行身份验证,然后向其添加速率限制。为此,我正在使用Kong API Gateway。对于通过angular应用程序登录的内部或受信任用户,现有访问令牌流应该起作用。
问题: 在Kong中使用apikey时,它确实通过了Kong的身份验证,但是其余的api服务器仍需要访问令牌,因此会收到401未经授权的错误。
解决方法
我找到了解决方案。基本上,您需要配置匿名使用者,并使用Kong的key-auth插件(基于api-key的安全性)和openid-connect插件(基于keycloak的安全性)来配置enable multiple authentication methods。
对于那些没有Kong Enterprise的用户,由于openid-connect插件不是开源的,因此您可以仅配置启用了匿名访问的key-auth插件,然后在其余应用程序中处理基于keycloak的身份验证。