首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >瓶OIDC: oauth2client.client.FlowExchangeError

瓶OIDC: oauth2client.client.FlowExchangeError
EN

Stack Overflow用户
提问于 2021-02-22 10:48:01
回答 1查看 686关注 0票数 7

问题:

烧瓶scope参数包含到授权代码/访问令牌交换请求中,这无疑会引发以下错误:

oauth2client.client.FlowExchangeError:授权代码access_token交换请求不支持invalid_request作用域参数。范围参数应提供给授权请求。

问题:

这是配置问题还是库问题?

My配置:

  • 烧瓶应用程序:
代码语言:javascript
复制
app.config.update({
    'DEBUG': True,
    'TESTING': True,
    'SECRET_KEY': 'secret',
    'SERVER_NAME' : 'flask.example.com:8000',
    'OIDC_COOKIE_SECURE': False,
    'OIDC_REQUIRE_VERIFIED_EMAIL': False,
    'OIDC_CALLBACK_ROUTE': '/oidc/callback',
    'OIDC_CLIENT_SECRETS': 'client_secrets.json'
})
oidc = OpenIDConnect(app)
  • client_secrets.json
代码语言:javascript
复制
{
    "web": {
        "auth_uri": "http://openam.example.com:8080/openam/oauth2/realms/root/authorize",
        "issuer": "http://openam.example.com:8080/openam/oauth2/realms/root/",
        "userinfo_uri": "http://openam.example.com:8080/openam/oauth2/realms/root/userinfo",
        "client_id": "MyClientID",
        "client_secret": "password",
        "redirect_uris": [
            "http://flask.example.com:8000/oidc/callback"
        ],
        "token_uri": "http://openam.example.com:8080/openam/oauth2/realms/root/token",
        "token_introspection_uri": "http://openam.example.com:8080/openam/oauth2/realms/root/introspect"
    }
}
  • 访问管理器

对于访问管理器,我使用OpenAM。我按照以下方式配置了一个OpenAM客户机代理:

  • 客户ID = MyClientID
  • 客户秘密= password
  • 响应类型= code
  • 令牌端点身份验证方法= client_secret_post
  • 重定向URI = http://flask.example.com:8000/oidc/callback

Context:我使用烧瓶作为应用程序端的逻辑,使用OpenAM进行身份和访问管理--这两个应用程序都运行在坞容器中。使用简单的curl命令时,我可以检索授权授予和身份验证令牌(授予类型:授权代码授予)。但是,使用上述库,在登录到OpenAM并向应用程序授予授权(端点‘OAuth2/授权’)之后,烧瓶-oidc发送以下GET请求:

代码语言:javascript
复制
GET /oidc/callback?code=<some code> \
&scope=openid%20email \
&iss=http%3A%2F%2Fopenam.example.com%3A8080%2Fopenam%2Foauth2 \
&state=<some state> \
&client_id=MyClientID

这将导致上述错误。

EN

回答 1

Stack Overflow用户

发布于 2022-03-23 15:30:12

虽然这不能直接回答问题,但我能找到的最好的答案是使用pyJWT或oauthlib,而不是使用烧瓶-oidc。我发现pyjwt在大多数方面非常简单,这里有一个很好的教程:

使用烧瓶请求、Oauthlib和pyjwt的SSO

我不确定这一点,但是由于错误是由oauth2client生成的,而不是由烧瓶-oidc生成的,所以可能错误实际上只是与不推荐的oathlib2clientlib有关。

有人向将整个烧瓶-oidc项目标记为废弃的。提出了详细的要求,但这一要求是在烧瓶-oidc项目停止维护几年后提出的。我希望有一天,烧瓶会喜欢这个链接从他们的网站,因为它是误导认为它是瓶的主要部分。

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

https://stackoverflow.com/questions/66314235

复制
相关文章

相似问题

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