问题:
库烧瓶将scope参数包含到授权代码/访问令牌交换请求中,这无疑会引发以下错误:
oauth2client.client.FlowExchangeError:授权代码access_token交换请求不支持invalid_request作用域参数。范围参数应提供给授权请求。
问题:
这是配置问题还是库问题?
My配置:
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){
"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客户机代理:
MyClientIDpasswordcodeclient_secret_posthttp://flask.example.com:8000/oidc/callbackContext:我使用烧瓶作为应用程序端的逻辑,使用OpenAM进行身份和访问管理--这两个应用程序都运行在坞容器中。使用简单的curl命令时,我可以检索授权授予和身份验证令牌(授予类型:授权代码授予)。但是,使用上述库,在登录到OpenAM并向应用程序授予授权(端点‘OAuth2/授权’)之后,烧瓶-oidc发送以下GET请求:
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这将导致上述错误。
发布于 2022-03-23 15:30:12
虽然这不能直接回答问题,但我能找到的最好的答案是使用pyJWT或oauthlib,而不是使用烧瓶-oidc。我发现pyjwt在大多数方面非常简单,这里有一个很好的教程:
我不确定这一点,但是由于错误是由oauth2client生成的,而不是由烧瓶-oidc生成的,所以可能错误实际上只是与不推荐的oathlib2clientlib有关。
有人向将整个烧瓶-oidc项目标记为废弃的。提出了详细的要求,但这一要求是在烧瓶-oidc项目停止维护几年后提出的。我希望有一天,烧瓶会喜欢这个链接从他们的网站,因为它是误导认为它是瓶的主要部分。
https://stackoverflow.com/questions/66314235
复制相似问题