限制令牌范围服务器端

问题描述

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

现在,我想扩展此设置,以允许其他一些管理员使用“只读”访问权限登录。通过使用某些范围并删除一些其他范围,可以轻松地将此映射到我们的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)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...