问题描述
我的登录过程允许管理员选择他们想要登录的帐户。为此,我可以像往常一样以该特定用户身份登录并发出授权码。
现在,我想扩展此设置,以允许其他一些管理员使用“只读”访问权限登录。通过使用某些范围并删除一些其他范围,可以轻松地将此映射到我们的API。
要使oauth流程正常运行,我确实需要一种方法来发出带有服务器端受限范围的oauth令牌(范围小于实际客户端-服务器端,因为已读取) -仅执行)。
我想我可能需要编写一个新的GrantType,并且可能还必须以某种方式跟踪状态,但是我不清楚在这种情况下应该如何正确使用create_authorization_response()
。
解决方法
好吧,经过一番摆弄之后,我找到了解决方案。本质上,它创建了一个自定义Oauth2Request
(通常是客户端提供的,在我们的示例中是修改后的服务器端)。
一些粗略的代码大纲:
from urllib.parse import urlencode,parse_qs,urlparse
# obtain query string as dictionary
query_dict = parse_qs(request.query_string.decode("utf-8"))
# customize scope for this request
query_dict["scope"] = ["profile"]
# We here setup a custom Oauth2Request as we have change the scope in
# the query_dict
req = OAuth2Request(
"POST",request.base_url + "?" + urlencode(query_dict,doseq=True)
)
return authorization.create_authorization_response(grant_user=user,request=req)