使用 Google 帐户通过非 Google API 验证 Chrome 扩展程序

Mar*_*ing 5 .net asp.net-mvc google-api google-apps google-chrome-extension

我在一家教育机构工作,该机构大量使用 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 似乎特定于浏览器中显示的网站。这需要默默地处理。

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


一些进一步的细节:

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

Dav*_*vid 5

您可以执行以下操作:

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

如何在 Google Cloud Console 中创建 Chrome 扩展程序客户端 ID

  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"
}
Run Code Online (Sandbox Code Playgroud)

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