首页 > 解决方案 > 如何将 Qt 网络授权用于 Azure AD OAuth2

问题描述

我正在尝试调整 Qt 网络授权OAuth2 示例,以便 Reddit与 Azure AD 一起使用。我去了https://portal.azure.com/ -> Azure Active Directory -> 应用程序注册,然后单击“新应用程序注册”并输入:

Azure 创建

我将生成的应用程序 ID 复制到应用程序中,然后从Authorization Code Grant Flow获取 URI :

第一部分似乎有效;网页打开并要求我验证登录。但是随后令牌请求似乎失败了。我的日志显示:

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

我做错了什么?

标签: qtazureoauth-2.0azure-active-directory

解决方案


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>");
    }
});

推荐阅读