Chrome Extension開発を勉強してみる (20) - chrome.experimental.identity -
chrome.experimental.identityを使う事でGoogle APIsを使う際にアクセストークンを取得したり出来るらしい。っていうかそもそもがmanifest_versionが2からは外部URLのスクリプトをロードするのですらCSPにより制限されているので(ry
でChrome自体にChrome Syncっていうのが組み込まれているので、それの接続アカウントを利用してトークン取得出来る模様。なのでこれを使うとChrome Syncな設定が有効になる(同期するデータに関する件がいろいろあるので、そこは注意しないといけない)
更に現在では https://developers.google.com/console でクライアントID等を発行する事が出来ない。あくまでGoogle側の承認が必要な模様で、Dev Consoleから作ったクライアントIDをGoogle宛に送る事でidentity APIが使えるクライアントIDかなんかを送付してくれる模様
今回検証ではGoogleが検証で使ってると思われるクライアントID等を利用させてもらって検証してみた。Chrome Syncで接続されているGoogleサービスアカウントを利用してアクセストークンを取得して、それを利用しGmailのフィードを取得してみる
manifest.json
{
"name": "test",
"version": "0.1",
"manifest_version": 2,
"background": {
"page": "background.html"
},
"permissions": ["experimental", "https://mail.google.com/"],
"oauth2": {
"client_id": "省略",
"scopes": ["https://mail.google.com/mail/feed/atom"]
}
}
background.html
<html>
<body>
<script type="text/javascript" src="background.js"></script>
</body>
</html>
background.js
(function(undefined) {
// アクセストークンを取得する (同期コネクトが確立してない場合は取得できない)
chrome.experimental.identity.getAuthToken(
{ "interactive": false },
function(token) {
if (!token) {
// 同期コネクトを確立するように要求してからアクセストークンを取る
chrome.experimental.identity.getAuthToken(
{ "interactive": true },
function(token) {
getAccount(token, function(feed) {
console.log(feed);
});
}
);
return;
}
getAccount(token, function(feed) {
console.log(feed);
});
});
})();
function getAccount(token, cb) {
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://mail.google.com/mail/feed/atom");
xhr.setRequestHeader("Authorization", "Bearer " + token); // Authorizaion: Bearerでアクセストークンを設定する
xhr.onload = function() {
if (xhr.status !== 200) {
return;
}
cb(xhr.responseXML);
};
xhr.send(null);
}
終わり。成功したらバックグラウンドページ側のコンソールにGmail Feedのdocumentが出る
参考: http://developer.chrome.com/trunk/apps/app_identity.html