Marketplace app + Provisioning API:检查用户是否为admin

时间:2011-05-18 18:34:02

标签: google-app-engine provisioning google-apps google-apps-marketplace

我正在尝试在Google Apps市场安装的应用中检查用户是否是其Google Apps域的管理员。

我将此添加到manifest.xml:

<Scope id="Provisioning API">
  <Url>https://apps-apis.google.com/a/feeds/user/#readonly</Url>
  <Reason>This application can list domain users to give them permissions.</Reason>
</Scope>

然后我设置了一个测试处理程序以使其正常工作:

from google.appengine.ext import webapp
from google.appengine.ext.webapp import util

import gdata.alt.appengine
import gdata.apps.service
import gdata.auth

# App id, key and secret from the Google Apps Marketplace.
APPLICATION_ID = 'XXX'
CONSUMER_KEY = 'XXX'
CONSUMER_SECRET = 'XXX'

class SetupHandler(webapp.RequestHandler):
    def get(self, *args):
        # The domain where this app is installed.
        domain = 'my_customer_domain.com'
        # A username to check.
        username = 'webmaster'

        sig_method = gdata.auth.OAuthSignatureMethod.HMAC_SHA1
        service = gdata.apps.service.AppsService(source='tipfy-com',
                                                 domain=domain)
        service.SetOAuthInputParameters(sig_method, CONSUMER_KEY,
                                        consumer_secret=CONSUMER_SECRET,
                                        two_legged_oauth=True,
                                        requestor_id=APPLICATION_ID)
        service.ssl = True
        service.debug = True
        gdata.alt.appengine.run_on_appengine(service)

        lookup_user = service.RetrieveUser(username)
        if lookup_user.login.admin == 'true':
            res = username + ' is an admin.'
        else:
            res = username + ' is not an admin.'

        self.response.out.write(res)

app = webapp.WSGIApplication([
    ('/.*', SetupHandler),
], debug=True)

def main():
    util.run_wsgi_app(app)

if __name__ == '__main__':
    main()

但是我收到401响应(“未知授权标题”)。我不知道我做错了什么或如何进一步调试它。

  • 清单条目是否正确?
  • 拆分user.email()可以获取用户的用户名和域名吗? (我调试了它,在我的情况下它是:我有'网站管理员'和'example.com',这是安装了应用程序的用户和Google Apps域名。

我错过了什么?

编辑:出于某种原因,管理员面板未请求权限授予对提供的范围的访问权限。在我授予它之后,上面的代码工作了。所以把它作为一个工作的例子吧!

3 个答案:

答案 0 :(得分:2)

您无需为范围工作重新添加应用,只需确保在GoogleApps管理信息中心,应用程序设置中,您“授予访问权限”和数据访问是“的授予”。否则只需授予该访问权限。

分割user.email()对我来说就像一个魅力,因为localhost测试中的user.nickname()包含完整的电子邮件,而不是生产(包含用户名)。

确保请求的用户是管理员

答案 1 :(得分:0)

我遇到了完全相同的问题,一直在给我:

未知的授权标题

错误401

我正在使用免费版Google Apps,这可能是导致此问题的根本原因吗?据我所知,Provisioning API仅支持高级帐户。

答案 2 :(得分:0)

Admin apis [provisioning api等]现在可用于Google Apps的版本。

http://googleappsdeveloper.blogspot.com/2011/12/more-administrative-apis-now-available.html