Qiita API의 OAuth 인증은 일근 줄이 아닙니다.

계기



Qiita API로 놀아 보려고 생각했고 OAuth 라이브러리를 사용하여 빨리 인증을 시도했지만 작동하지 않았습니다.
나름대로 조사한 바, 아무래도 Qiita API의 인증은 OAuth의 사양과 조금 다른 생각이 들었으므로 메모도 겸해 투고합니다.

의견・지적 있으면 코멘트해 주시면 도움이 됩니다!

이 문서의 내용은 2019년 2월 27일 현재 내용입니다. 향후 Qiita API의 수정·변경에 의해 내용에 차이가 생기는 경우가 있습니다

무엇이 곤란한가?



사양과 다르면 사양에 준거하여 만들어진 인증 라이브러리를 사용하여 인증할 수 없습니다.
그러므로 Qiita API의 인증용으로 조금 라이브러리를 재작성하거나 최악의 자전으로 구현할 필요가 있습니다.

이 기사의 내용이 라이브러리를 다시 쓰거나 설정할 때의 힌트가 되면 다행입니다.

1. 액세스 토큰 발급 요청의 Content-Type이 다릅니다.



사양에서 Content-Typeapplication/x-www-form-urlencodedQiita API에서는 application/json
해설

Qiita API의 OAuth 인증은 액세스 토큰 발급 요청의 Content-Typeapplication/json를 지정하도록 지시합니다.

참고: htps : // 코 m / 아피 / v2 / 도 CS

그러나 OAuth 2.0 사양에서는
クライアントはトークンエンドポイントに対して, 次のようなパラメーターを付与してリクエストを送信する. 
(中略)application/x-www-form-urlencoded フォーマットで含める.

(中略)

Content-Type: application/x-www-form-urlencoded

참고: ㅡㅡㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ 기주 b. 이오/rfc6749. 그럼. html#과 켄-q

와 같이 Content-Type 에는 application/x-www-form-urlencoded 를 지정하도록(듯이) 사양으로 책정되고 있습니다.
인증 라이브러리를 사용하는 경우 해당 라이브러리가 OAuth 사양을 준수하면application/x-www-form-urlencoded 요청을 하기 때문에 Qiita API의 OAuth 인증에 실패합니다.
(invalid_content_type라는 오류 응답이 반환됩니다)

Qiita 하지만 이 Content-Type 문제로 넘어지고 있는 분이 계셨습니다.
  • Twitter의 '좋아요'를 증분 검색할 수 있는 Favsearch라는 웹 서비스를 만들었다
  • [R] httr에서 Qiita API v2를 사용하고 싶었습니다.

  • 2. 액세스 토큰 응답의 JSON 모양이 다릅니다.



    사양에서는 JSON 내의 토큰의 키는 access_tokenQiita API에서는 token
    해설

    Qiita API 문서에 따르면 액세스 토큰 요청에 성공하면 다음과 같은 응답이 반환됩니다.
    {
      "client_id": "a91f0396a0968ff593eafdd194e3d17d32c41b1da7b25e873b42e9058058cd9d",
      "scopes": [
        "read_qiita"
      ],
      "token": "ea5d0a593b2655e9568f144fb1826342292f5c6b7d406fda00577b8d1530d8a5"
    }
    

    참고: htps : // 코 m / 아피 / v2 / 도 CS

    사양에서는 다음과 같이 정해져 있습니다.
    アクセストークンリクエストが正当かつ認可された場合,(中略)
    成功レスポンス例を以下に示す.
    
    {
        "access_token":"2YotnFZFEjr1zCsicMWpAA",
        "token_type":"example",
        "expires_in":3600,
        "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
        "example_parameter":"example_value"
    }
    

    참고: ㅡㅡㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ 기주 b. 이오/rfc6749. 그럼. HTML#안초r25

    Qiita API에서는 중요한 토큰 키가 access_token가 아닌 token입니다.Content-Type 때와 마찬가지로 OAuth 사양을 준수하는 라이브러리는 access_token를 가정하므로 "토큰을 얻을 수 없음"과 같은 오류가 발생할 수 있습니다.

    요약


  • Qiita API 문서를 읽는 동안 인증 흐름을 혼자서 쓰는 사람은 문제 없습니다
  • OAuth 인증 라이브러리를 사용하는 경우는 주의. Qiita 인증을 통하고 싶다면 직접 라이브러리에 손을 추가해야 할지도
  • 「OAuth 인증」이라고 명중하고 있기 때문에 사양 준거의 라이브러리로 인증할 수 있도록 Qiita씨에게는 수정해 주었으면 한다……
  • 좋은 웹페이지 즐겨찾기