Community

コミュニティをご利用の際は 【ガイドライン】を確認・同意いただいた上でご利用ください。

  • 投稿

    アバターhimrock922

    OAuth2のaccess_tokenが取得できない

    初めまして。

    現在、Ruby on Railsアプリでfreee側で取引先データを登録したく、freee専用のOAuth2クライアントのGem作成を行いながら、検証しております。

    OAuth2プロトコルの最初の段階のauthentication_codeの取得には成功し、続いてaccess_tokenを取得する段階というところまできているのですが、どうしてもaccess_tokenが取れずに試行錯誤しております。

    現在のエラーとしてはパラメータ不正で500エラーを返しています。

    OAuth2::Error ({“error”:”invalid_request”,”error_description”:”リクエストに必要なパラメタが不足しているか、サポートされていないパラメタが含まれているか、もしくは、パラメタが間違っています。”,”message”:”リクエストに必要なパラメタが不足しているか、サポートされていないパラメタが含まれているか、もしくは、パラメタが間違っています。”}):

    なお、各リクエストのパラメータやエンドポイントURLは以下のサイトを参考に定義しました。

    https://gist.github.com/yokoji/822edacff497b21fa7bf

    https://support.freee.co.jp/hc/ja/articles/115000145263-freee-API%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B

    自作でやっている最中、あまり全部の情報をお見せできないところが心苦しく大変無礼なお願いですが、どなたかご教授いただけないでしょうか。

    各パッケージ・言語のversion

    ruby: 2.3.6

    OAuth2 [https://github.com/oauth-xx/oauth2](https://github.com/oauth-xx/oauth2): 1.4.0

    下は現在実装中のfreee専用のOAuth2クライアントです。

    module Freee

    module Api

    class Token

    SITE = ‘https://api.freee.co.jp’

    SITE.freeze

    AUTHORIZE_URL = ‘https://secure.freee.co.jp/oauth/authorize’

    AUTHORIZE_URL.freeze

    TOKEN_URL = ‘/oauth/token’

    TOKEN_URL.freeze

    @params app_id: クライアントID

    @params secret: クライアントキー

    def initialize(app_id, secret)

    @app_id = app_id

    @secret = secret

    options = {

    site: SITE,

    authorize_url: AUTHORIZE_URL,

    token_url: TOKEN_URL

    }

    @client = OAuth2::Client.new(@app_id, @secret, options) do |conn|

    conn.request :url_encoded

    conn.request :json

    conn.response :json, content_type: /\bjson$/

    conn.adapter Faraday.default_adapter

    end

    end

    authentication_codeの取得

    @params redirect_uri: POSTリクエストのレスポンスを返すコールバック用URL

    def authorize(redirect_uri)

    @client.auth_code.authorize_url(redirect_uri: redirect_uri)

    end

    アクセストークンの取得

    @params code: 認証用コード

    @params redirect_uri: POSTリクエストのレスポンスを返すコールバック用URL

    def get_access_token(code, redirect_uri)

    params = {

    grant_type: ‘authorization_code’,

    code: code,

    redirect_uri: redirect_uri,

    headers: {

    ‘Content-Type’ => ‘application/json’

    }
    }

    @client.auth_code.get_token(params)

    end
    end
    end
    end

    回答

    アバターhimrock922

    すみません。自己解決しました。

    Faradayクライアントを使わずに余計なオプションを全て削除して、Authentication codeとredirect uriだけを渡してget_tokenを呼び出すと、無事アクセストークンを取得できました。

    お騒がせしました。

    freee dev-supportfreee dev-support

    ご連絡が遅くなってしまい、誠に申し訳ございませんでした。

    無事解決し、アクセストークンを取得できたということで何よりでございます。

     

    また何かご不明な点がございましたら、お気軽にお問い合わせくださいませ。

    何卒よろしくお願い申し上げます。