PySide6.QtNetworkAuth.QOAuthUriSchemeReplyHandler¶
- class QOAuthUriSchemeReplyHandler¶
处理私有/自定义和https URI方案的重定向。更多…
在版本6.8中添加。
概要¶
属性¶
redirectUrlᅟ
- 用于接收授权重定向/响应的URL
方法¶
def
__init__()
def
close()
def
isListening()
def
listen()
def
redirectUrl()
def
setRedirectUrl()
信号¶
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
此类用作使用私有/自定义或HTTPS URI方案进行重定向的OAuth 2.0授权过程的回复处理程序。它管理授权重定向(也称为回调)的接收以及随后的访问令牌获取。
重定向URI是授权服务器在流程的授权部分完成后将用户代理(通常是系统浏览器)重定向到的地方。
使用特定的URI方案需要在操作系统级别进行配置,以将URI与正确的应用程序关联起来。设置此关联的方式因操作系统而异。请参阅
平台支持 和 依赖项
。这个类补充了
QOAuthHttpServerReplyHandler
,它通过设置一个本地服务器来处理http
方案。以下代码说明了使用方法。首先,需要的变量:
m_oauth = QOAuth2AuthorizationCodeFlow() m_handler = QOAuthUriSchemeReplyHandler()
接下来是OAuth设置(为简洁起见,省略了错误处理):
m_oauth.setAuthorizationUrl(QUrl("https://some.authorization.service/v3/authorize")) m_oauth.setAccessTokenUrl(QUrl("https://some.authorization.service/v3/access_token")) m_oauth.setClientIdentifier("a_client_id") m_oauth.setScope("read") m_oauth.authorizeWithBrowser.connect(self.openUrl) m_oauth.granted.connect(this, [this]() { # Here we use QNetworkRequestFactory to store the access token m_api.setBearerToken(m_oauth.token().toLatin1()) m_handler.close() })
最后,我们设置了URI方案回复处理程序:
m_handler.setRedirectUrl(QUrl{"com.my.app:/oauth2redirect"}) m_oauth.setReplyHandler(m_handler) # Initiate the authorization if m_handler.listen(): m_oauth.grant()
私有/自定义URI方案¶
自定义URI方案通常使用反向域名表示法,后跟路径,或者偶尔使用主机/主机+路径:
// Example with path: com.example.myapp:/oauth2/callback // Example with host: com.example.myapp://oauth2.callback
HTTPS URI 方案¶
使用HTTPS URI方案时,重定向URL是常规的https链接:
https://myapp.example.com/oauth2/callback
这些链接在iOS上被称为Universal Links,在Android上被称为App Links on Android。
建议使用https方案,因为它通过强制应用程序开发者证明所使用的URL的所有权来提供额外的安全性。这种证明是通过托管一个关联文件来完成的,操作系统将在其内部URL调度过程中查阅该文件。
此文件的内容将应用程序与使用的URL关联起来。关联文件必须公开可访问,且不能有任何HTTP重定向。此外,托管站点必须具有有效的证书,并且至少在Android上,文件必须以
application/json
内容类型提供(请参阅您的服务器配置指南)。此外,https链接可以提供一些可用性优势:
https URL 同时也是一个常规的 https 链接。如果用户尚未安装应用程序(因为 URL 未被任何应用程序处理),https 链接可能会提供安装说明。
可以避免打开URL的应用程序选择对话框,而是自动打开您的应用程序
权衡之处在于这需要额外的设置,因为你需要设置这个公开托管的关联文件。
平台支持和依赖¶
目前支持的平台有Android、iOS和macOS。
URI 方案监听基于 QDesktopServices::setUrlHandler() 和 QDesktopServices::unsetUrlHandler()。这些功能目前由 Qt::Gui 模块提供,因此 QtNetworkAuth 模块依赖于 Qt::Gui。如果 QtNetworkAuth 在没有 Qt::Gui 的情况下构建,
QOAuthUriSchemeReplyHandler
将不会被包含。安卓¶
在Android上,URI方案需要:
在应用程序清单中设置意图过滤器
可选地,对于使用https方案的自动验证,托管一个站点关联文件assetlinks.json
iOS 和 macOS¶
在iOS和macOS上,URI方案需要:
设置站点关联权限
使用https方案,托管一个站点关联文件(
apple-app-site-association
)
Windows, Linux¶
目前不支持。
注意
当使用
from __feature__ import true_property
时,属性可以直接使用,否则通过访问器函数使用。此属性保存用于接收授权重定向/响应的URL。
此属性用作OAuth2 redirect_uri参数,作为授权请求的一部分发送。
redirect_uri
通过调用QUrl::toString()并使用默认选项获取。URL必须与授权服务器上注册的URL匹配,因为授权服务器可能会拒绝任何不匹配的redirect_uris。
同样,当此处理程序接收到重定向时,重定向URL必须与此处设置的URL匹配。处理程序会比较方案、主机、端口、路径以及此方法设置的URL中包含的任何查询项。
只有在所有这些都匹配时,URL才会被处理。查询参数的比较排除了可能在服务器端设置的任何额外查询参数,因为这些参数包含实际感兴趣的数据。
- Access functions:
- __init__()¶
构造一个
QOAuthUriSchemeReplyHandler
对象,该对象具有空的callback()
/redirectUrl()
并且没有父对象。构造的对象不会自动监听。- __init__(parent)
- Parameters:
父对象 –
QObject
使用
parent
和空的callback()
/redirectUrl()
构造一个QOAuthUriSchemeReplyHandler
对象。构造的对象不会自动监听。构造一个
QOAuthUriSchemeReplyHandler
对象,并将parent
设置为父对象,redirectUrl
设置为重定向URL。构造的对象会自动尝试监听。- close()¶
告诉此处理程序停止监听传入的URL。
另请参阅
- isListening()¶
- Return type:
布尔
如果此处理程序当前正在监听,则返回
true
,否则返回false
。- listen()¶
- Return type:
布尔
告诉此处理程序监听传入的URL。如果监听成功,则返回
true
,否则返回false
。处理程序将匹配URL到
redirectUrl()
。如果接收到的URL不匹配,它将被转发到QDesktopServices::openURL()。只有在执行初始授权阶段时,才需要主动监听,通常由
grant()
调用启动。建议在成功授权后关闭监听器。对于
acquiring access tokens
不需要监听。- redirectUrl()¶
- Return type:
另请参阅
属性
redirectUrlᅟ
的获取器。- redirectUrlChanged()¶
属性
redirectUrlᅟ
的通知信号。属性
redirectUrlᅟ
的设置器。