django Krakend多种授权方法

ht4b089n  于 2023-07-01  发布在  Go
关注(0)|答案(1)|浏览(138)

我有一个应用程序,它公开了几个端点,出于向后兼容的目的,这些端点支持JWT和基本授权方法。
最近,我们决定使用KrakenD作为此应用程序的API网关,现在我遇到了上述端点的授权问题。我使用auth/validator插件进行JWT验证,它工作正常。但我正在寻找一种方法,在它失败时绕过它,并将请求直接代理到应用程序,以便在应用程序端使用基本身份验证。
我有一个想法,为KrakenD编写一个插件来决定Authorization头是Basic还是Bearer,然后决定如何处理请求,或者看看JWT验证是否失败,然后将请求代理到后端。这些我都做不到,所以我在寻找新的想法或现有的解决方案。

wvt8vs2t

wvt8vs2t1#

虽然KrakenD默认情况下不支持身份验证的故障转移策略,但其主要优势之一是其可扩展性,允许您实现所需的任何自定义逻辑。
在您的情况下,您可以考虑配置两个“内部”端点,一个用于基于JWT的身份验证,另一个用于基本身份验证。然后,使用Lua脚本创建第三个端点。此脚本将首先尝试通过JWT验证请求。如果失败(状态代码为401),则可以尝试使用基本身份验证对请求进行身份验证。
通过这种方式,您实际上是在创建自己的故障转移策略。
您也可以使用自定义Golang插件来实现此逻辑,以获得更好的性能。
您可以在www.example.com上找到有关如何在KrakenD中实现Lua脚本的更多信息https://www.krakend.io/docs/endpoints/lua/#making-additional-requests-http_response
有关如何在KrakenD中编写golang插件的更多信息,您可以阅读https://www.krakend.io/docs/extending/
此外,重要的是要注意,基本身份验证是一个功能,只包括在KrakenD企业。

相关问题