번역을 도와주세요

이 문서는 커뮤니티에 의해 번역되었어요. 번역 제출은 Crowdin에서 할 수 있어요. 많은 도움 부탁드려요 🙏

앱 생성 방식으로 액세스 토큰을 획득하는 방법(구식)

MiAuth 도입(12.27.0)이나 OAuth 도입(2023.9.0) 이전의 기존 접근 토큰 획득 방법에 대해 설명합니다.
12.27.0 이하 버전의 서버에서는 이 구식 방식을 사용해야 합니다.

1. 애플리케이션 제작

[app/create 엔드포인트(endpoints/app/create.html)에 정보를 전송하고 appSecret을 가져옵니다.

{
    // アプリの名前
    "name": "test",
    // アプリの説明
    "description": "my test application",
    // アプリのパーミッション
    "permission": ["write:notes"]
}

이때 callbackUrl에 원하는 URL을 포함시키면 다음 접근 권한 작업이 종료될 때 token을 쿼리 문자열에 포함시키면서 해당 URL로 콜백하게 됩니다.

2. 사용자 인증하기

auth/session/generate 엔드포인트appSecret을 POST합니다.

{
    "appSecret": "fAb12cD34Ef56gH78Ij16kL32Mn64oPf"
}

token (여기서는 가칭 798b9f6e-248d-43a7-a919-fabc664027f1)과 url을 반환하므로 먼저 이 url에 웹브라우저로 접속하여 접근 허용을 선택합니다.

3. accessToken 문의하기

2가 완료된 것이 확인되면, [auth/session/userkey 엔드포인트(endpoints/auth/session/userkey)에 appSecret과 방금 전의 token을 POST합니다.

{
  "appSecret": "fAb12cD34Ef56gH78Ij16kL32Mn64oPf",
  "token": "798b9f6e-248d-43a7-a919-fabc664027f1"
}

여기서 얻을 수 있는 문자열을 accessToken이라고 합니다.accessToken은 한 번만 획득할 수 있습니다.

4. i 생성

i는 Node.js라면 아래와 같은 코드로 생성할 수 있으며, 설정 화면에서 가져오는 것과는 다르게 64자리 16진수입니다.

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

5. 실제 테스트하기

fetch("https://misskey.io/api/notes/create", {
    method: 'POST',
    body: JSON.stringify({
        i: "/* ここにiを入力 */",
        text: "Hello Misskey API World with My Application!"
    }),
    headers: {
        'Content-Type': 'application/json',
    },
    credentials: 'omit',
});