0

Google が oauth2client.py で提供するdocs および python ライブラリoauth2.py ライブラリおよび docsを使用して、OAuth2.0 で認証することにより、ユーザーの gmail アカウントを介してメールを正常に送信できました。Google apis でプロジェクトを作成し、正しく認証してメールを送信するために必要なキーとその他のパラメーターを取得できました。

今、私は同じ目標を達成しようとしていますが、Google Marketplace アプリを使用しています。最終的な目標は、ドメイン管理者がアプリを Google Apps ドメインに追加して、各ユーザーが認証プロセスを経る必要がなく、アプリがユーザーに代わってメールを送信することを「自動的に」承認できるようにすることです。

最初の問題は、アプリをマーケットプレイスに登録するときに、クライアント キーとシークレットredirect_uriが与えられたが、他のプロジェクトで与えられたように、クライアント キーとシークレットが与えられなかったということです。これは、OAuth2WebServerFlowクラスを使用して認証できなかったことを意味します。これにより、数時間の検索と競合する回答が発生し、Google のドキュメント内のリンクが壊れました。このドキュメントを見ると、Marketplace アプリは OAuth 2.0 をサポートしておらず、2-legged OAuth 1.0 認証を使用する必要があると思います。しかし、これは 1 年以上前に更新されており、他のすべての Google ドキュメントでは、OAuth 1.0 は廃止されているため使用しないよう強く指示されています。

Marketplace アプリでこれを行う唯一の方法は、OAuth 1.0 を使用するためにすべての新しいコード (同じライブラリなどを使用できない) を書き直すことですか? 別の方法はありますか? そうでない場合は、既存のコードを活用するためのアドバイスや、現在のシステムで行う最善の方法はありますか?

私が現在 OAuth 2.0 を使用してそれを行っている方法の短いスニペット:

flow = OAuth2WebServerFlow(
    client_id="xxx",
    client_secret="xxx",
    scope="https://mail.google.com/",
    user_agent="mytest/0.1",
    redirect_uri="http://127.0.0.1:5000/oauth2callback"
)

authorize_url = flow.step1_get_authorize_url()

そして帰りに

credentials = flow.step2_exchange(request.args['code'])
storage = Storage(request.user.email)
storage.put(credentials)

そしてメールを送る

conn = smtplib.SMTP('smtp.googlemail.com', 587)
conn.set_debuglevel(True)
conn.ehlo('test')
conn.starttls()
auth_string = 'user=%s\1auth=Bearer %s\1\1' % (user_address, credentials.access_token)
conn.docmd('AUTH', 'XOAUTH2 ' + base64.b64encode(auth_string))

header = 'To:' + recipient_address + '\n'
header += 'From:' + user_address + '\n'
header += 'Subject: Oauth test Email \n'
header += 'Content-Type: text/html; charset=UTF-8\n'
msg = header + '\n ' + "Waka waka" + ' \n\n'

conn.sendmail(user_address, recipient_address, msg)
4

2 に答える 2

0

もし私が 50 点だったら、これは完全な答えではないので、コメントで答えます。

私は同様の問題に取り組んできました。OAuth2WebServerFlow や Storage などの疑似ヘルパーをいじるよりも、'urllib2' と 'shelve' を使用して API を直接操作したほうが (より制御しやすく) 優れていることに気付きました。

そうすることで、コマンド ラインから「curl」を使用して仮定を確認し、結果を Python でコーディングできます。Google の OAuth に関する豊富なブログや Q & A を利用できます。サポートされているさまざまなライブラリ (Jave、C#、PHP など) に断片化する必要はありません。

Anton Burnashev の "gspread"にフォークを書きました。

これが私の「プルリクエスト」です

私が Burnashev のコードをほとんど変更していないことがわかるはずです。私はOAuthのものを提供するだけで、「インストールされたアプリケーション」のためだけに

6 つの異なるモダリティがあります。

  1. ログイン
  2. Web サーバー アプリケーション
  3. クライアント側のアプリケーション
  4. インストール済みアプリケーション
  5. デバイス
  6. サービス アカウント

正しいものを使用しているという確信はありますか? 私のアプリが「インストールされたアプリ」である必要があることに気付くのに多くの困惑がありましたが、「デバイス」もサポートする必要があることに気づきました

于 2013-09-07T10:48:55.817 に答える
0

新しい Google Apps Marketplace では、OAuth2 フローが若干異なります。管理者がアプリをインストールするため、トークンは事前に承認されているため、エンドユーザーにプロンプ​​トを表示する必要があります。詳細はhttps://developers.google.com/apps-marketplace/building#use_google_services_from_a_simple_web_server_appにあります

于 2013-11-26T01:07:32.970 に答える