You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用GetToken返回BadRequest,需获取invalid_scope异常信息

解决ClientSecretCredential调用GetToken时无法获取invalid_scope错误信息的问题

m_context是否需要配置?

不需要强制配置。Azure::Core::Context主要用于传递请求超时、取消信号或自定义元数据,默认空Context不会影响GetToken的正常执行。如果需要对请求设置超时或追踪请求ID,可以按需配置,但这不是导致错误信息缺失的原因。

为什么捕获不到invalid_scope的错误信息?

Azure::Core::Credentials::AuthenticationException的what()方法仅返回通用错误描述(比如"Authentication failed"),具体的OAuth 2.0错误代码(如invalid_scope)和详情被包含在异常关联的原始HTTP响应体中,需要手动提取解析。

如何获取包含invalid_scope的详细错误信息?

修改异常捕获逻辑,通过AuthenticationException的GetRawResponse()方法获取原始HTTP响应,然后解析响应体中的JSON数据提取具体错误:

try
{
    auto credentials = this->GetCredentials();
    auto token = credentials->GetToken(m_token_request_context, m_context);    
    return token;
}
catch(Azure::Core::Credentials::AuthenticationException& e)
{
    std::string error_message = std::string("Failed to GetToken. Error: ") + e.what();

    // 获取并解析原始HTTP响应
    if (auto raw_response = e.GetRawResponse())
    {
        std::string response_body = raw_response->ExtractBodyAsString();
        error_message += "\nRaw response content: " + response_body;

        // 解析JSON获取具体错误信息(依赖Azure Core的Json库)
        try
        {
            auto json_doc = Azure::Core::Json::Parse(response_body);
            if (json_doc.HasKey("error"))
            {
                std::string error_code = json_doc["error"].GetString();
                error_message += "\nError code: " + error_code;
            }
            if (json_doc.HasKey("error_description"))
            {
                std::string error_desc = json_doc["error_description"].GetString();
                error_message += "\nError description: " + error_desc;
            }
        }
        catch (...)
        {
            // JSON解析失败时忽略,不影响原有错误信息
        }
    }

    throw std::runtime_error(error_message);   
}

额外注意事项

  • 确保scope格式符合OAuth 2.0要求:对于ClientSecretCredential,scope通常需要以资源URI+/.default结尾,例如https://management.azure.com/.default,错误的scope格式会触发invalid_scope错误。
  • 若未引入Azure Core的Json库,需要在项目依赖中添加Azure::Core组件,并包含头文件#include <Azure/Core/Json.hpp>。

内容的提问来源于stack exchange,提问作者Staša Sekulić

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 00:52:34