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

如何在Azure AD中通过编程方式登录谷歌用户或获取已登录谷歌用户的JWT令牌?

嘿,针对你这个场景,我来给你分享几个靠谱的方案,帮你实现通过谷歌联邦认证方式编程登录或者获取用户的JWT令牌:

方案1:OAuth 2.0授权码流(首推)

这是适配Azure AD谷歌外部身份用户的标准编程认证方式,安全且符合行业规范:

  • 步骤1:构造授权请求
    生成一个跳转URL,引导用户到谷歌的认证页面(Azure AD会自动完成重定向逻辑),示例请求如下:
    GET https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/authorize?
    client_id={你的应用客户端ID}
    &response_type=code
    &redirect_uri={你的应用回调URI}
    &response_mode=query
    &scope=openid%20profile%20offline_access
    &state=随机字符串(用于防CSRF)
    &login_hint={谷歌用户邮箱} // 可选,预填邮箱提升用户体验
    
  • 步骤2:获取授权码
    用户完成谷歌的身份验证后,Azure AD会将授权码返回给你配置的redirect_uri。
  • 步骤3:兑换JWT令牌
    用拿到的授权码向Azure AD令牌端点请求获取id_token(用户身份JWT)、access_token和刷新令牌:
    POST https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/token
    Content-Type: application/x-www-form-urlencoded
    
    client_id={你的应用客户端ID}
    &scope=openid%20profile%20offline_access
    &code={步骤2拿到的授权码}
    &redirect_uri={你的应用回调URI}
    &grant_type=authorization_code
    &client_secret={你的应用客户端密钥} // 如果是机密客户端需要提供
    
  • 这个流程不仅能拿到用户的身份JWT,刷新令牌还能让你在用户离线时获取新的令牌,是最可靠的方式。
方案2:用MSAL库简化开发

手动处理HTTP请求容易出错,推荐用Microsoft Authentication Library(MSAL)来封装整个认证流程,它支持多种编程语言:

  • 以Python为例,大致代码示例如下:
    from msal import PublicClientApplication
    
    client_id = "你的应用客户端ID"
    tenant_id = "你的租户ID"
    authority = f"https://login.microsoftonline.com/{tenant_id}"
    
    # 初始化应用实例
    app = PublicClientApplication(client_id, authority=authority)
    
    # 初始化授权码流
    scopes = ["openid", "profile", "offline_access"]
    auth_flow = app.initiate_auth_code_flow(scopes, redirect_uri="你的回调URI")
    # 引导用户访问auth_flow["auth_uri"]完成谷歌认证,之后拿到授权码
    
    # 用授权码兑换令牌
    token_result = app.acquire_token_by_auth_code_flow(auth_flow, request.query_params)
    user_jwt = token_result.get("id_token")  # 这就是你要的用户身份JWT
    access_token = token_result.get("access_token")
    
  • MSAL会自动处理令牌缓存、刷新等细节,大大减少开发工作量。
方案3:Azure AD B2C自定义策略(适用于B2C租户场景)

如果你的环境是Azure AD B2C,可以通过自定义策略创建包含谷歌身份提供商的用户旅程,然后调用B2C的令牌端点结合授权码/隐式流获取JWT。这种方式适合需要高度定制认证流程的场景(比如添加额外的用户信息收集步骤)。

关键注意事项
  • 绝对不要用ROPC处理联邦外部用户:ROPC仅适用于Azure AD本地用户,谷歌联邦用户的密码不会存储在Azure AD中,所以ROPC完全不可行,这也是你遇到问题的核心原因。
  • 确保你的应用注册已经正确配置谷歌身份提供商,并且回调URI已经添加到Azure AD的允许列表中。
  • 如果需要静默获取令牌(比如用户已登录过),可以使用MSAL的acquire_token_silent方法,它会自动利用缓存的刷新令牌获取新令牌。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:39:08