使用Android appauth并使用多个作用域值时,Authlib报告“尝试解码非Urlencoded字符串时出错”

时间:2018-09-12 17:18:21

标签: android werkzeug appauth authlib

我正在尝试Authlib。我有一个有效的pyoidc后端和一个使用android appauth的测试应用程序(从Google Codelabs教程进行了修改)。我为本地计算机上的Authlib安装重新配置了android测试应用。现在,当尝试发出具有多个作用域的授权请求时,我会收到此错误(我将字符串部分切至相关部分):

ValueError: Error trying to decode a non urlencoded string. Found invalid characters: {' '} in the string: '...&scope=openid offline_access&...'. Please ensure the request/response body is x-www-form-urlencoded.

我开始从堆栈跟踪和Android端的request_uri跟踪问题。但是请求uri的冒犯部分为...&scope=openid%20offline_access&...

我从environ的{​​{1}}中打印了flask/app.py参数,然后我又看到这些相关的条目减少到了范围:

__call__

我很困惑。为什么在填充{ ... 'QUERY_STRING': '...&scope=openid%20offline_access&...', ... 'werkzeug.request': <BaseRequest 'http://10.0.2.2:5000/oauth/authorize?...&scope=openid offline_access&...' [GET]> } 中的参数之前,werkzeug.request似乎会预解码字符串,然后在environ上调用authlib的urls/url_decodewerkzeug.request编码是否不足或不正确?但是,如果是这样的话,这又是如何针对默认的app_auth_android行为与另一种oidc后端和Google的单点登录方案打交道的呢?

完整堆栈跟踪:

%20

1 个答案:

答案 0 :(得分:1)

是的,我确认了。目前,您只能使用+发出请求:

scope=openid+offline_access

以防止出现此问题。我已经在Authlib中修复它:https://github.com/lepture/authlib/commit/d8ab09fb97169fc47070f48c2ede43348f1feff0

它也应该由werkzeug修复:https://github.com/pallets/werkzeug/pull/1363