使用Google帐户使用非Google API对Chrome扩展程序进行身份验证

时间:2014-07-03 07:25:07

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

我在一家大量使用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凭据对使用非Google API的Chrome扩展程序进行身份验证? (API可以扩展为以任何必要的方式支持它。)


进一步的细节:

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

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

  1. 在Google Cloud Console中,为Chrome扩展程序创建API凭据
  2. How to create a Chrome extension client id in the Google Cloud Console

    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

    3. 你会得到这样的东西:`

      {
       "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(非常重要),并且您有电子邮件!