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

使用MSAL Go实现Microsoft EntraID OIDC认证时重定向URI异常求助

问题分析与解决

核心原因

MSAL Go 针对**公共客户端(Public Client)**的交互式认证有默认行为:当你仅指定 http://127.0.0.1 这类不带端口的重定向URI时,库会自动随机分配一个本地端口用于接收认证回调,这就导致实际请求的重定向URI(比如http://localhost:51276)和你在Entra ID里配置的URI不匹配,触发报错。

另外,你当前的代码虽然调用了WithRedirectURI,但传入的http://127.0.0.1不符合交互式认证的要求——公共客户端的交互式回调必须包含端口(固定或由库生成,但需提前配置对应规则)。

解决步骤

1. 修正代码中的重定向URI

显式指定一个带固定端口的重定向URI,同时确保该端口未被占用。修改后的代码如下:

func AcquireTokenOIDC() error {
    client, err := public.New(
        clientID,
        public.WithAuthority(fmt.Sprintf("https://login.microsoftonline.com/%s/v2.0", tenantID)),
    )
    if err != nil {
        return fmt.Errorf("error creating public client: %s", err.Error())
    }
    scopes := []string{"openid", "profile", "email"}

    // 显式指定带固定端口的重定向URI
    result, err := client.AcquireTokenInteractive(context.Background(), scopes, 
        public.WithRedirectURI("http://127.0.0.1:51276"))

    if err != nil {
        return fmt.Errorf("error acquiring access token: %s", err.Error())
    }

    accessToken = result.AccessToken
    tokenExpiryTime = result.ExpiresOn
    return nil
}

2. 在Entra ID中配置对应重定向URI

进入你的Entra ID应用注册页面:

  • 切换到身份验证标签页
  • 在移动和桌面应用分类下,添加重定向URI:http://127.0.0.1:51276(和代码中完全一致)
  • 保存配置

额外注意事项

  • 确保你的应用注册类型为公共客户端:在应用注册的概述标签页,确认"支持的账户类型"和"公共客户端/设备流"已正确配置(公共客户端无需客户端密钥)。
  • 如果希望使用随机端口(不固定端口),可以在Entra ID中添加http://localhost(不带端口)作为重定向URI,MSAL Go会自动兼容任意本地端口的回调请求,但这种方式仅适用于v2.0端点的公共客户端。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 08:17:40