【问题标题】:Authenticate Chrome extension with non-Google API using Google account使用 Google 帐户使用非 Google API 验证 Chrome 扩展程序
【发布时间】:2014-07-03 07:25:07
【问题描述】:

我在一家大量使用 Google Apps 和现在的 ChromeOS 设备的教育机构工作。我们着手的一个项目是开发一个 Chrome 扩展(可能有多个),它将复制我们在 Windows 环境中的功能。这些将仅在我们的域内和我们的设备上使用,一般不可用。

我们有一个内部构建的基于 HTTP/JSON 的 API,它提供各种详细信息,例如来自我们的 MIS(同样,内部构建)的提醒和其他内容,并且可以提供包含这些信息的弹出窗口等。通过 Windows 下的 NTLM 身份验证,可以确保 API 知道当前用户是谁。

我需要某种方式让 API 在从 Chrome 设备访问时能够知道用户是谁。这意味着扩展需要能够以安全的方式告诉 API 用户是谁。如果 API 可以建立登录用户的 Google Apps 电子邮件地址,它可以从我们的数据库中确定此人是谁。我的问题是,我该如何实现?

已经考虑过并被拒绝的一些解决方案:

  • 让扩展程序简单地告诉 API 当前用户的电子邮件地址
    被拒绝,因为它很容易被伪造。这必须是安全的。
  • 改为询问用户他们的 Active Directory 凭据
    扩展程序应该能够在没有用户输入的情况下运行 - 我们可以代表用户授权扩展程序访问 Google Apps 域。

此外,用于登录的 Google OAuth 2.0 似乎特定于浏览器中显示的网站。这需要静默处理。

我了解这是一个非常模糊的问题,但我们将不胜感激任何正在解决的非常相似的问题的建议或示例。 它的核心是:如何让 Chrome 扩展程序使用 Google 凭据通过非 Google API 进行身份验证? (API 可以通过任何必要的方式扩展以支持此功能。)


更多细节:

  • 我们的 API 基于 .NET
  • Chrome 扩展程序将仅在我们学院内的设备上运行,这些设备将注册到我们的域中。只有该域内的用户才能登录并运行扩展程序。

【问题讨论】:

    标签: .net asp.net-mvc google-chrome-extension google-api google-apps


    【解决方案1】:

    您可以执行以下操作:

    1. 在 Google Cloud Console 中,为 Chrome 扩展程序创建 API 凭据

    1. 在 Chrome 扩展程序中,使用 Identity API 获取此应用程序的身份验证令牌并将其发送到您的 API。你只需要这个范围:https://www.googleapis.com/auth/userinfo.email

    2. 在您的 API 端,每次收到令牌时,访问以下 URL(将示例中的访问令牌替换为扩展程序发送的令牌):

      https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.iAXXXXXXXXXXXXXXi-mrflhzc-X-U14eb

    你会得到这样的东西:`

    {
     "issued_to": "407408718192.apps.googleusercontent.com",
     "audience": "407408718192.apps.googleusercontent.com",
     "user_id": "1170123456778279183758",
     "scope": "https://www.googleapis.com/auth/userinfo.email",
     "expires_in": 3585,
     "email": "someone@yourdomain.com",
     "verified_email": true,
     "access_type": "offline"
    }
    

    确保受众是 Chrome 客户端 ID(非常重要),并且您有电子邮件!

    【讨论】:

    • 这看起来会很完美! :-D 我只需要对其进行测试(可能明天)并假设它有效,我一定会接受这个作为最终答案。谢谢!
    • 这非常有效。解决了我的确切问题,并且是一个非常明确的答案。再次感谢您。
    • Awesome :-) 在性能方面,检查 OAuth 令牌的时间成本很高,因为它需要对 Google 进行 HTTP 调用。我建议您只执行此操作来验证用户身份,然后使用其他解决方案来检查下一个请求(会话 cookie、自定义令牌...)
    • 正是我在做什么:-)。我将其用作初始身份验证过程,然后返回用于继续使用 API 的令牌。
    猜你喜欢
    • 2018-11-05
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 2021-03-27
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    相关资源
    最近更新 更多