ユーザーに新しい Google クラウド プリント プリンターの登録を案内する C# プロジェクトを作成しようとしています。見つけたすべてのドキュメントとトラブルシューティングを読みましたが、まだ困惑しています。
Google の手順の詳細については、こちらをご覧ください。
フローは次のようになるはずです。
- プリンターが /register に対して認証されていない要求を行う
- プリンターがユーザーを招待 URL に誘導する
- ユーザーがログインしてプリンターを要求する
- プリンターは、ユーザーが要求するまで URL をポーリングします
- 要求されると、プリンターは認証コードを取得します
- プリンターは、アクセス/リフレッシュ トークンの認証コードを交換します
手順 6 で問題が発生しました。これは常に 401: 無許可クライアント エラーが返されるためです。
ドキュメントからわかるように、ステップ 1 で、Google はプリンター用の「ロボット」(またはサービス) アカウントを作成しており、ユーザーは所有者としてこのアカウントに自分自身を関連付けているだけです。プリンターは、クラウド プリント API を利用し、XMPP メッセージ (ジョブなど) を受信するための独自のアクセス トークンを持つことになっています。
/cloudprint および /googletalk API へのプロジェクト アクセスをユーザーに明示的に許可してもらい、ユーザーのログインからのアクセス トークンとリフレッシュ トークンを使用してプリンターを制御するという理論的な回避策がありますが、残念ながらロボット アカウントの JabberId はAuth コードを正常に交換したことがないため、アクセスできません。
私は主にhttps://apigee.com/console/othersを使用して、Google へのさまざまな http 投稿をシミュレートしているため、現時点で表示するコードはありません。ステップ 6 の POST が送信されます (クライアント ID は非表示):
POST /o/oauth2/token HTTP/1.1
Host: accounts.google.com
Content-Length: 250
X-Target-URI: https://accounts.google.com
Content-Type: application/x-www-form-urlencoded
Connection: Keep-Alive
client_id=xxxxxxxxxx-xxxxxxxxxxxxxxxx.xxxxxxxxxxxx.apps.googleusercontent.com&
redirect_uri=oob&
client_secret=xxxxxxxxxxxxxxxxxxx-xxxxxxxxx&
grant_type=authorization_code&
code=4/ql0tDrttiY-xxxxxxxxxxxxxxxXXXXXXXXXxxxxxxxxxxxx
API へのアクセスを許可する特定のユーザーの認証コードを取得すると、まったく同じ要求が完全に機能することに注意してください。また、更新トークンを利用して新しいアクセス トークンを取得することもできますが、その API も正確に文書化されていません。「code」を「refresh_token」に置き換える必要がありますが、表示されたエラー メッセージは少なくとも役に立ちました。
もう 1 つの情報として、Google Developer's Console では、私のクライアント ID は「ネイティブ アプリケーション」用であり、ドキュメントのどこにも指定されていませんが、デフォルトの (そして変更不可能な) リダイレクト Uris によって強く暗示されているようです。Web アプリケーションのクライアント ID を使用してみましたが、同じ結果が得られました。
あなたが私に与えることができる手がかりや助けを前もって感謝します.