Pocket Authentication API Documentation
前提
自作アプリの登録手順は割愛。コンシューマキー取得状態からスタート。
リクエストトークンの取得
const ck = '1234-abcd1234abcd1234abcd1234'
const ru = 'pocketapp1234://authorizationFinished'
fetch('https://getpocket.com/v3/oauth/request', {
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=UTF-8',
'X-Accept': 'application/json',
},
body: JSON.stringify({
consumer_key: ck,
redirect_uri: ru,
})
}).then((response) => {
response.json().then(function(d){
console.log('[Request Token]', d.code)
console.log('[Auth URL]', `https://getpocket.com/auth/authorize?request_token=${d.code}&redirect_uri=${ru}`)
})
})
//=> [Request Token] dcba4321-dcba-4321-dcba-4321dc
//=> [Auth URL] https://getpocket.com/auth/authorize?request_token=dcba4321-dcba-4321-dcba-4321dc&redirect_uri=pocketapp1234://authorizationFinished
- レスポンスには
code
と表記されるが、これがリクエストトークンのことである - 最新1トークンのみが有効っぽい
第三者アプリケーションの認可ページ
https://getpocket.com/auth/authorize?request_token=dcba4321-dcba-4321-dcba-4321dc&redirect_uri=pocketapp1234:authorizationFinished
- Pocket側に登録されているアプリをユーザが 認可 するためのページ
- ブラウザで開けばOK
- ユーザが認可ボタンを押したあとにリダイレクトする先を指定する
- この例のようにリダイレクト先をカスタムURLスキームにしてもセーフ
- ブラウザで認可するとリダイレクトできないが、Pocketサーバには伝わっている(後述)
- すでに認可済みの場合は即リダイレクトされる
- ブラウザでアクセスすると空っぽの画面となるが、Pocketサーバには伝わっている
認可プロセスの挙動について補足
ユーザが認可ボタンを押しただけでは、アプリの認可リストには登録されない。この時点では、Pocketサーバ側でアプリの認可“待ち”の状態になる。
アプリ側はリダイレクトで戻ってきたあと下記の authorize メソッドにさっき渡したリクエストトークンを再度渡して認可を確定する。逆に、ユーザが「認可」ボタンではなく「結構です」ボタンを押すと、Pocketサーバ側でアプリが認可“待ち”とならず、authorize メソッドを実行してもエラーとなる。
アプリの認可
fetch('https://getpocket.com/v3/oauth/authorize', {
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=UTF-8',
'X-Accept': 'application/json',
},
body: JSON.stringify({
consumer_key: '1234-abcd1234abcd1234abcd1234',
code: 'dcba4321-dcba-4321-dcba-4321dc',
})
}).then((response) => {
response.json().then(function(d){
console.log(d)
})
})
//=> {"access_token":"5678defg-5678-defg-5678-defg56", "username":"pocketuser"}
- アクセストークンは認可操作をし直すと以前のものが無効となる