我当前正在使用的堆栈是:钥匙斗篷烧瓶长颈瓶nginx作为负载均衡器
我拥有的设置是我有两个正在运行的服务实例(instance1,instance2)。我面临的问题是:
这次负载均衡器将请求路由到实例2的重定向URL。在这里,instance2错误来自Keycloak的响应,内容为“ {'error':'invalid_grant','description':'Indirect redirect uri'}”,这很混乱,因为重定向uri是正确的。
我不完全确定为什么此设置无法正常工作。但是在通读openID的工作原理后,我怀疑它与状态参数(https://auth0.com/docs/protocols/oauth2/oauth-state)有关。再次,我不确定。但这必须是instance1唯一的东西,instance2没有的。
人们如何解决这个问题?这样设置是否可能?
请注意,您可能应该为图书馆提供一个位置,以存储为用户检索到的凭据。这些必须存储在用户自己或攻击者无法接触到的地方。为此,请提供一个对象,该对象具有setitem和getitem dict API,这些API被实现为init()调用的第二个参数。没有此功能,该库将仅在单个线程上工作,并且仅保留会话,直到服务器重新启动为止。
它指的是credentials_store
实例中的OpenIDConnect
选项。为了支持通过多个应用程序实例的持久登录,此用例将需要持久共享数据存储。您可以使用共享redis或dynamodb实例。
credentials_store
的实现非常简单,您可以尝试类似的事情,
class RedisOpenIdCredStore:
def __init__(self):
# Handle Redis instance initialisation here
pass
def __setitem__(self, key, value):
# Set item to redis
pass
def __getitem__(self, key):
# Fetch and return item from redis if present
pass
credential_store = RedisOpenIdCredStore()
oid_connect = OpenIDConnect(app, credential_store=credential_store, ...)