在SAML Single Sign On谷歌应用引擎中登录用户信息

时间:2014-04-03 10:31:43

标签: google-app-engine single-sign-on saml-2.0

我正在尝试通过用户登录。 SAML单点登录。

我已经实施了SAML Single Sign On并且它有效。

我用于程序化登录的代码是:

apps = gdata.apps.service.AppsService(email=username, domain=domain, password=password)
apps.ProgrammaticLogin()
logging.info("current user %s", users.get_current_user())
//Redirect to a Google mail page.

但即使提供了正确的用户名和密码,users.get_current_user()也会一直返回None。我通过将页面重定向到Google Mail页面进行了交叉检查,并成功重定向。

我已经用谷歌搜索了这个问题几个小时,现在没有什么是正确的。

任何人都可以指导我做错了吗?

1 个答案:

答案 0 :(得分:1)

这里有三个不同的事情,我只是想确保明确我的建议答案是有意义的:

  1. Google App Engine用户服务:作为开发人员,您将身份验证和授权责任委派给Google帐户(或选定的OpenID提供商)。 Google将充当身份提供商,您将充当服务提供商。
  2. SAML单点登录:Google会向您授予身份验证和授权责任,您将充当身份提供商,Google将充当服务提供商。每当您尝试使用Google Apps帐户登录任何Google服务时,您都将使用SAML SSO,其中包括使用用户服务的Google App Engine应用程序。
  3. ClientLogin:这是通过提供用户名和密码来验证使用Google API的方法之一。它被弃用了,它难以维护和不安全,因为您正在对凭据进行硬编码,而应用程序可以访问所有内容。我建议改用OAuth。在前两行代码中您正在使用gdata.apps.service.AppsService初始化Google Apps配置API,如果您不打算检索或创建用户/ groups /别名则无法执行此操作。如果您是我还建议您切换到Directory API part of the new AdminSDK
  4. 对于您的特定情况,我建议检查是否有当前用户登录,如果没有使用GAE用户服务重定向到登录URL。

    user = users.get_current_user()
    if user:
        logging.info("current user %s", user.email())
    else:
        return redirect(users.create_login_url(request.url))
    

    如果您始终要求用户登录,则最好设置处理程序as login: required

    用户将被重定向到SAML SSO页面以登录其Google帐户,以便访问GAE应用。