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

使用AAD认证调用Yammer API时遇“No user id found for O365 JWT”错误求助

解决Yammer连接错误"No user id found for O365 JWT"的方案

错误原因分析

你遇到的错误核心问题有两个:

  • 你请求的是Microsoft Graph的访问令牌,但调用的是Yammer API,资源不匹配,Yammer无法识别Graph的token。
  • 客户端凭据(client_credentials)模式下生成的令牌没有关联具体用户ID,而Yammer部分API端点需要用户上下文才能返回数据。

具体修正步骤

  • 修正令牌请求的资源目标
    将token请求中的resource=https://graph.microsoft.com改为resource=https://www.yammer.com,因为Yammer API只接受针对自身资源的令牌。修改后的请求Body如下:

    "Body"    = "client_id=$ClientID&client_secret=$SecretID&resource=https://www.yammer.com&grant_type=client_credentials"
    
  • 确认应用权限配置
    在Azure AD中给你的应用注册添加Yammer相关权限(如Yammer.Read.All、Yammer.ReadWrite.All),并完成管理员同意,否则令牌无法获得足够权限访问Yammer资源。

  • 调整认证模式(可选)
    如果上述修改后仍报错,说明该Yammer API端点不支持客户端凭据模式,需要改用用户委派的认证方式(比如授权码流程)。可以使用MSAL.PS模块来获取用户上下文的令牌,示例代码片段:

    # 先安装MSAL.PS模块
    Install-Module -Name MSAL.PS -Force
    
    $clientId = "你的客户端ID"
    $tenantId = "你的租户ID"
    $scopes = @("https://www.yammer.com/User.Read.All")
    $token = Get-MsalToken -ClientId $clientId -TenantId $tenantId -Scopes $scopes
    
    # 后续调用Yammer API时使用这个token
    $Params1 = @{
        "URI"            = "https://www.yammer.com/api/v1/users/in_group/$GroupId.xml?page=$GroupCycle"
        "Method"         = 'GET'
        "Headers"        = @{
            "Authorization" = "Bearer $($token.AccessToken)"
        }
    }
    $Members = Invoke-RestMethod @Params1
    
  • 验证令牌有效性
    可以通过JWT解析工具验证令牌,确认aud(受众)字段为https://www.yammer.com,且令牌中包含Yammer相关的权限声明。

内容的提问来源于stack exchange,提问作者aasenomad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:45:18