旧来のi(アクセストークン)取得方法

目次

MiAuth導入(12.27.0)より前の、旧来のアクセストークン取得方法について説明する。
当面の間こちらの旧来の方式も利用できるが、将来的には廃止されるかもしれない。
12.27.0未満のバージョンのインスタンスではこの旧来の方式を使用する必要があるため、こちらに解説を残しておく。

1. アプリケーションの作成

app/createエンドポイントに情報を送信し、appSecretを取得する。

axios.post("https://misskey.io/api/app/create", {
    // アプリの名前
    name: "test",
    // アプリの説明
    description: "my test application",
    // アプリのパーミッション
    permission: ["write:notes"]
}).then(({data}) => console.log(data.secret))

この時、callbackUrlでお好きなURLを含めると、次のアクセス許可操作が終了したときにtokenをクエリ文字列に含めながらそこにコールバックするようになる。

2. ユーザーに認証させる

auth/session/generateエンドポイントにappSecretをPOSTする。

axios.post("https://misskey.io/api/auth/session/generate", {appSecret: "fAb12cD34Ef56gH78Ij16kL32Mn64oPf"})
  .then(({data}) => console.log(data))

token(ここでは仮に798b9f6e-248d-43a7-a919-fabc664027f1)とurlを返してくるので、まずはこのurlにウェブブラウザでアクセスし「アクセスを許可」を選択。

3. accessTokenを問い合わせる

2が終わったことが確認できたら、auth/session/userkeyエンドポイントにappSecretと先ほどのtokenをPOSTする。

axios.post("https://misskey.io/api/auth/session/userkey", {
  appSecret: "fAb12cD34Ef56gH78Ij16kL32Mn64oPf",
  token: "798b9f6e-248d-43a7-a919-fabc664027f1"
}).then(({data}) => console.log(data.accessToken))

ここで取得できる文字列はaccessTokenと呼ばれる。accessTokenは一度限りしか取得できない。

3. iを生成

iは、Node.jsであれば以下のようなコードで生成でき、設定画面で取得するものとは違って64桁の16進数である。

const crypto = require("crypto")
const i = crypto.createHash("sha256")
    .update(accessToken + appSecret, "utf8")
    .digest("hex")
console.log(i)

4. 実際にテストする

axios.post("https://misskey.io/api/notes/create", {
  i: "/* ここにiを入力 */",
  text: "Hello Misskey API World with My Application!"
})