我想将 Keycloak 集成到 Django 项目中,并且我正在使用 mozilla_django_oidc 来实现此目的。
我遇到的问题是,当我向 keycloak 的授权端点发送请求时,redirect_uri
被设置为:redirect_uri=http%3A%2F%2Fdjango%3A8000%2Foidc %2Fcallback%2F
,但应该是我的应用程序的 IP,而不是 django
。我不知道为什么用django作为域名。
我在 settings.py
中的配置如下所示:
OIDC_RP_CLIENT_ID = os.environ['OIDC_RP_CLIENT_ID']
OIDC_RP_CLIENT_SECRET = os.environ['OIDC_RP_CLIENT_SECRET']
OIDC_OP_AUTHORIZATION_ENDPOINT = 'http://172.20.159.83:8080/auth/realms/Test/protocol/openid-connect/auth'
OIDC_OP_TOKEN_ENDPOINT = 'http://172.20.159.83:8080/auth/realms/Test/protocol/openid-connect/token'
OIDC_OP_USER_ENDPOINT = 'http://172.20.159.83:8080/auth/realms/Test/protocol/openid-connect/userinfo'
OIDC_OP_JWKS_ENDPOINT = 'http://172.20.159.83:8080/auth/realms/Test/protocol/openid-connect/certs'
LOGIN_REDIRECT_URL = 'http://172.20.159.83/test'
LOGOUT_REDIRECT_URL = 'http://172.20.159.83/'
在 urls.py
中它是:
path('oidc/', include('mozilla_django_oidc.urls')),
带有所有参数的授权端点请求:
http://172.20.159.83:8080/auth/realms/Test/protocol/openid-connect/auth?response_type=code&scope=openid+email&client_id=MyApplication&redirect_uri=http%3A%2F%2Fdjango%3A8000%2Foidc%2Fcallback%2F&state=3YxLAg8kX1bC1yTDMqKh8L05bIP5z9cB&nonce=jZ6KEZhk9tWOwdXRSqTUoF8lzg7aLU70
那么,正如标题所说,如何更改 redirect
uri 的 django
部分以指向我的应用程序的 IP?这个参数如何设置?
最佳答案
据我所知,目前,mozilla_django_oidc 不使用主机名,而是使用 Host header 的值;并重定向到 IP——因为您的重定向 URI (http://django:8000/oidc/callback/
) 中的端口也与 8080 不同,我猜您正在使用反向不将 Host header 传递给后端服务器的代理。
对于 nginx,proxy_set_header Host $host ;
可能有帮助,其他反向代理可能有类似的设置。
关于django - 如何更改mozilla_django_oidc中的redirect_uri?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63753836/