我有一个在定义的多个Docker容器上运行的应用程序docker-compose。我的用户一切正常,docker-compose ps输出如下所示:
Name Command State Ports
------------------------------------------------------------
myuser_app_1 /config/bootstrap.sh Exit 137
myuser_data_1 sh Exit 0
myuser_db_1 /run.sh Exit 143
Run Code Online (Sandbox Code Playgroud)
现在,我试图运行docker-compose up与supervisord(见相关部分supervisord.conf以下),问题是,容器现在命名myapp_app_1,myapp_data_1并且myapp_db_1,这是他们创造了从无到有,并在原容器的所有自定义都将丢失。
我尝试重命名容器,但它给出了一个错误,指出已经有一个使用该名称的容器。
问:有什么方法可以强制docker-compose重用现有容器,而不是根据各自的映像创建新容器?
主管
Run Code Online (Sandbox Code Playgroud)... [program:myapp] command=/usr/local/bin/docker-compose -f /usr/local/app/docker-compose.yml up redirect_stderr=true stdout_logfile=/var/log/myapp_container.log stopasgroup=true user=myuser
我正在尝试使用mozilla-django-oidc (1.2.4 ) 连接 Django (3.2) 和 Keycloak (12.0.2) 。
单击“登录”按钮(oidc_authentication_init根据文档使用视图)时,我得到了到 keycloak 的重定向,但成功登录后,我收到此错误:
Exception Type: HTTPError at /oidc/callback/
Exception Value: 404 Client Error: Not Found for url: http://localhost:8080/auth/realms/mycorp/protocol/openid-connect/token
Run Code Online (Sandbox Code Playgroud)
django设置的相关设置有:
settings.py
Exception Type: HTTPError at /oidc/callback/
Exception Value: 404 Client Error: Not Found for url: http://localhost:8080/auth/realms/mycorp/protocol/openid-connect/token
Run Code Online (Sandbox Code Playgroud)
urls.py
INSTALLED_APPS = [
...,
'mozilla_django_oidc',
]
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'mozilla_django_oidc.auth.OIDCAuthenticationBackend',
),
OIDC_AUTH_URI = 'http://localhost:8080/auth/realms/mycorp'
OIDC_CALLBACK_PUBLIC_URI = 'http://localhost'
LOGIN_REDIRECT_URL = OIDC_CALLBACK_PUBLIC_URI
LOGOUT_REDIRECT_URL = OIDC_AUTH_URI + '/protocol/openid-connect/logout?redirect_uri=' + OIDC_CALLBACK_PUBLIC_URI
OIDC_RP_CLIENT_ID = …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 clientid-clientsecret 设置 FastAPI (0.71.0) 身份验证。
我进行了配置OAuth2AuthorizationCodeBearer,显然从 swagger ( /docs) 端点来看,它看起来很好,它要求提供 client-id 和 client-secret 进行身份验证。
auth = OAuth2PasswordBearer(
authorizationUrl=AUTH_URL,
tokenUrl=TOKEN_URL,
)
agent = FastAPI(
description=_DESCRIPTION,
version=VERSION,
dependencies=[Depends(auth)],
middleware=middlewares,
root_path=os.getenv('BASEPATH', '/'),
swagger_ui_init_oauth={
'usePkceWithAuthorizationCodeGrant': True,
'scopes': 'openid profile email'
}
)
Run Code Online (Sandbox Code Playgroud)
不过,我可以直接调用 API,通过任何 Bearer 进行访问,例如:
import requests
url = 'http://localhost:8080/test'
headers = {'Authorization': 'Bearer BADTOKEN', 'Content-Type': 'application/json', 'Accept': 'application/json'}
response = requests.get(url=url, params={}, headers=headers)
Run Code Online (Sandbox Code Playgroud)
和response.ok = True,所以我可能在 FastAPI 设置中遗漏了某些内容,但看不到在哪里。
这是正确的身份验证流程吗?
PS:我想要实现的是服务与服务之间的通信,因此普通用户无法访问该 API