qt - 如何将 Qt 网络授权用于 Azure AD OAuth2
问题描述
我正在尝试调整 Qt 网络授权OAuth2 示例,以便 Reddit与 Azure AD 一起使用。我去了https://portal.azure.com/ -> Azure Active Directory -> 应用程序注册,然后单击“新应用程序注册”并输入:
- 名称:QtNetworkAuthProject
- 申请类型:名称
- 重定向 URI:http://localhost:1337/
我将生成的应用程序 ID 复制到应用程序中,然后从Authorization Code Grant Flow获取 URI :
- 授权码请求:https ://login.microsoftonline.com/common/oauth2/authorize
- 访问令牌请求:https ://login.microsoftonline.com/common/oauth2/token
第一部分似乎有效;网页打开并要求我验证登录。但是随后令牌请求似乎失败了。我的日志显示:
AzureWrapper::grant()+
setModifyParametersFunction(): stage = RequestingAuthorization
AzureWrapper::grant()-
statusChanged(): status = TemporaryCredentialsReceived
setModifyParametersFunction(): stage = RequestingAccessToken
qt.networkauth.oauth2: Unexpected call
qt.networkauth.replyhandler: Error transferring https://login.microsoftonline.com/common/oauth2/token - server replied: Bad Request
我做错了什么?
解决方案
Azure AD 在授权代码请求或访问令牌请求中需要您要使用的目标 Web API(安全资源)的 App ID URI。(请参阅https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-oauth-code)
您可以在授权码请求中添加这个额外的资源参数,如下所示:
oauth2.setModifyParametersFunction([](QAbstractOAuth::Stage stage, QVariantMap* parameters) {
if (stage == QAbstractOAuth::Stage::RequestingAuthorization) {
parameters->insert("resource", "<App ID URI>");
}
});
推荐阅读
- postgresql - 使用 psycopg2 将 csv 上传到 postgresql
- c# - Xamarin.forms One Signal PromptLocation 方法
- c - 将 2 字节变量分配给 3 字节寄存器?
- c++ - 聚合类型不完整,在处理默认模板参数时无法定义
- java - 类范围的问题,我应该如何解决这个问题?
- mongodb - MongoDB 日期字段和时区处理
- arduino - 如何创建一个简单的 Arduino 脚本,允许我远程打开和关闭 LEDBuitIn?
- swift - 一种方法调用自身的坏习惯?
- android - Finish() 没有关闭我的第二个 Activity,OnBackPressed() 破坏了应用程序
- r - 脚本生成 Y 轴,但不生成 X 轴