首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >oauth2client.client.FlowExchangeError:无效响应: 301

oauth2client.client.FlowExchangeError:无效响应: 301
EN

Stack Overflow用户
提问于 2021-04-04 18:00:23
回答 1查看 528关注 0票数 0

我正在尝试在运行在Flask-OIDC工作区中的Flask应用程序中实现KeycloakGitpod

我正在运行应用程序和Keycloak服务器,如下所示:

代码语言:javascript
复制
./keycloak-11.0.3/bin/standalone.sh -b 0.0.0.0 -bmanagement 0.0.0.0 &
flask run --host=0.0.0.0 & 

基于

我可以从Keycloak应用程序中为常规用户重定向到Flask登录页面,但是当我使用现有用户登录时,会得到以下信息:

oauth2client.client.FlowExchangeError:无效响应: 301

我的client_secrets.json目前看起来如下所示:

代码语言:javascript
复制
{
  "web": {
    "auth_uri": "http://keycloak-hostname-gitpod/auth/realms/realm/protocol/openid-connect/auth",
    "issuer": "http://keycloak-hostname-gitpod/auth/realms/realm",
    "userinfo_uri": "http://keycloak-hostname-gitpod/auth/realms/realm/protocol/openid-connect/userinfo",
    "client_id": "client",
    "client_secret": "client_secret",
    "redirect_uris": ["http://flask-app-hostname-gitpod/oidc_callback"],
    "token_uri": "http://keycloak-hostname-gitpod/auth/realms/realm/protocol/openid-connect/token",
    "token_introspection_uri": "http://keycloak-hostname-gitpod/auth/realms/realm/openid-connect/token/introspect"
  }
}

键盘斗篷内的相关客户端配置:

代码语言:javascript
复制
Root URL:            http://flask-app-hostname-gitpod/*
Valid Redirect URIs: http://flask-app-hostname-gitpod/*
Admin URL:           http://flask-app-hostname-gitpod/*
Web Origins:         http://flask-app-hostname-gitpod

我在所有这些urls中都使用http,而不是https,因为当我使用https时,Keycloakredirect_uri无效。这似乎是实际的问题,因为gitpod urls使用https,但我不知道如何处理。我尝试过一些解决方案,如描述的here,但无法使它们发挥作用。

相关部分路由:

代码语言:javascript
复制
@app.route("/")
def hello_world():
    if oidc.user_loggedin:
        return (
            'Hello, %s, <a href="/private">See private</a> '
            '<a href="/logout">Log out</a>'
        ) % oidc.user_getfield("preferred_username")
    else:
        return 'Welcome anonymous, <a href="/private">Log in</a>'


@app.route("/private")
@oidc.require_login
def test():
    return "test"

standalone.xml中可能相关的部分:

代码语言:javascript
复制
<http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true" read-timeout="30000" proxy-address-forwarding="true" />
<https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true" read-timeout="30000" />

更新

在随后将http更改为https为Jan Garaj suggested并设置OVERWRITE_REDIRECT_URI之后,我将不再获得invalid response: 301错误:

代码语言:javascript
复制
OVERWRITE_REDIRECT_URI = "https://flask-app-hostname-gitpod/oidc_callback"

现在我可以进入keycloak登录表单,但是在登录时,我现在得到:

oauth2client.client.FlowExchangeError:无效响应: 401。

以下是提出的要求:

代码语言:javascript
复制
https://keycloak-hostname-gitpod/auth/realms/realm/login-actions/authenticate?session_code=session_code&execution=execution&client_id=client&tab_id=tab_id
https://flask-app-hostname-gitpod/oidc_callback?state=state&session_state=session_state&code=code

网络检查器内部的请求:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-07 07:31:22

经过多次尝试,我终于发现了问题所在。

通过设置OVERWRITE_REDIRECT_URI解决了原问题中的重定向问题

代码语言:javascript
复制
OVERWRITE_REDIRECT_URI = "https://flask-app-hostname-gitpod/oidc_callback"

然而,oidc_callback请求仍然不起作用,我得到了以下信息:

oauth2client.client.FlowExchangeError:无效响应: 401。

Jan Garaj's comment让我意识到问题在于令牌端点请求不起作用。

我多次检查了令牌端点uri,并从以下位置复制了该值:

代码语言:javascript
复制
https://flask-app-hostname-gitpod/auth/realms/demo/.well-known/openid-configuration

但还是没成功。

它不能工作的原因实际上与我的Keycloak配置无关,但与我的密钥披风服务器在Gitpod中运行的方式无关。

Gitpod将密钥披风服务器运行的端口设置为private。由于keycloak服务器运行在专用端口上,因此对follwing url的请求失败:

代码语言:javascript
复制
https://keycloak-hostname-gitpod/auth/realms/demo/protocol/openid-connect/token

在把港口公之于众之后,它起了作用。

如果您已经知道您想要公开一个特定的端口,可以在.gitpod.yml中配置它:

代码语言:javascript
复制
ports:
  - port: 5000
    onOpen: open-preview
  - port: 8080

https://www.gitpod.io/docs/config-ports

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66944314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档