0

我的登录程序允许管理员选择他们想要登录的帐户。为此,我可以像往常一样以该特定用户身份登录并发出授权码。

现在,我想要扩展此设置以允许其他一些管理员以“只读”访问权限登录。这可以通过使用某些范围并删除其他一些范围轻松地映射到我们的 API。

为了使 oauth 进程正常工作,我确实需要一种方法来发布 oauth 令牌,该令牌的范围受到服务器端的限制(范围小于实际的客户端 - 服务器端,因为强制执行只读)。

我想我可能需要编写一个新的 GrantType 并且可能还必须以某种方式跟踪状态,但我不清楚create_authorization_response()在这种情况下我应该如何使用。

4

1 回答 1

0

好的,经过一番摆弄,我找到了解决方案。它本质上创建了一个自定义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)

于 2020-10-07T07:44:32.113 回答