Kong API 带有用户信息的网关会话插件

Kong API Gateway session plugin with user info

我正在尝试将 authorization/authentication 从我的上游服务抽象到 Kong API 网关中。之前,我是使用 express + passport 来处理 session。每当用户使用其凭据登录时,都会创建一个会话,并将其用户信息附加到请求对象 (req.user)。

目前,我正在使用 API keys + session + serverless functions 从映射到 Kong 容器的文件中比较用户密码(使用 bycrypt lua 库)。客户端将发送带有 API 密钥的初始登录(带有用户名和密码)请求进行登录,无服务器函数将比较密码哈希值,如果全部通过,将创建会话。

但是,我的问题是,有没有办法将用户信息存储到会话数据库中,以便我的上游服务可以请求该信息以确保附加到已登录用户的会话在任何给定时间都有效时间?

即使与 Kong 无关,我们也将不胜感激!

在Kong上创建新的session时,可以显式提供用于标识session的唯一Key(默认由KONG自己创建)。 当密码检查通过并且您正在 Kong 上生成会话时,您可以创建自己的唯一密钥并在创建会话时使用该密钥。

    Kong_admin = 'http://localhost:8001'

    kong_session = {'key': 'any-unique-combination'}
    #any unique combination which you would like to use for identifying the session

    user = 'test-user@dummy.com'
    
    #create a session for this dummy user using your key
    response = requests.post('%s/consumers/%s/jwt' % (Kong_admin, user),data=kong_session)

    
    #Once the session is created you can find it using
    
    resp = requests.get('%s/consumers/%s/jwt/any-unique-combination' % (Kong_admin, user))
    
    # you can use this key in your token payload so your upstream service can decrypt the 
    # payload and get this key and you can store this key in your database mapped with 
    # user during session creation.
    # with this you ll be able to decrypt any session payload , get a key and then query 
    # it on database at any point of time