すげえ簡単じゃん・・AuthSubとかアホすぎる・・
この投稿は、AppEngineアプリでAuthSubを使ってAppsのドメイン管理者かどうかをチェックする の続きです。
まず、マーケットプレースに登録するアプリの、Application Manifestで、
Provisioning APIを使うよ、って宣言しときます。
<?xml version="1.0" encoding="UTF-8" ?> <ApplicationManifest xmlns="http://schemas.google.com/ApplicationManifest/2009"> <Name>Hello World</Name> <Description>Demonstrates a simple Google Apps Marketplace application</Description> <!-- Administrators and users will be sent to this URL for application support --> <Support> <Link rel="support" href="https://***.appspot.com/" /> </Support> <!-- Show this link in Google's universal navigation for all users --> <Extension id="navLink" type="link"> <Name>Hello World</Name> <Url>https://***.appspot.com?from=google&domain=${DOMAIN_NAME}</Url> <Scope ref="ProvisioningAPI"/> </Extension> <!-- Declare our OpenID realm so our app is white listed --> <Extension id="realm" type="openIdRealm"> <Url>https://***.appspot.com</Url> </Extension> <!-- Need access to the Provisioning API --> <Scope id="ProvisioningAPI"> <Url> https://apps-apis.google.com/a/feeds/user/#readonly</Url> <Reason>This app grants some control to domain admin.</Reason> </Scope> </ApplicationManifest>
上の様にScopeを定義しておくと、「Add it Now」でのインストール時に、こんな感じで聞いてきます。
「データアクセスを許可する」をクリックすることで、Provisioning APIの使用が可能になります。
なお、この許可は、ドメイン管理画面から後で取り消すこともできますし、
ここでキャンセルしたとしても、ドメイン管理画面から後で許可することもできます。
んで、アプリの方はこんな感じ。一部抜粋です。
from gdata.apps.service import AppsService CONSUMER_KEY = "..." CONSUMER_SECRET = "..." SIG_METHOD = gdata.auth.OAuthSignatureMethod.HMAC_SHA1 class MainHandler(webapp.RequestHandler): def get(self): template_values = {} user = users.get_current_user() if user and check_email(user): srv = AppsService(domain=urlparse(user.federated_identity()).hostname , source="Hello World") srv.SetOAuthInputParameters(SIG_METHOD, CONSUMER_KEY, consumer_secret=CONSUMER_SECRET, two_legged_oauth=True, requestor_id=user.email()) srv.ssl = True gdata.alt.appengine.run_on_appengine(srv) user_name = user.email().split('@', 1)[0] user_entry = srv.RetrieveUser(user_name) if user_entry.login.admin == "true": self.response.out.write("%s is admin." % user_name) else: self.response.out.write("%s is not admin." % user_name) else: greeting = 'You need to log in!' template_values['greeting'] = greeting path = os.path.join(os.path.dirname(__file__), 'templates/index.html') self.response.out.write(template.render(path, template_values))CONSUMER_KEY とCONSUMER_SECRETは、マーケットプレースの「My Vendor Profile」を開いて、
リスティングの「View OAuth Consumer Key 」で見ることができます。
ホント、shin1ogawaさんに感謝です!ありがとうございます!