質問: WEBアプリのLINEログインでトークンを取得するとこで`{"error":"invalid_grant","error_description":"redirect_uri does not match"}`というエラーでトークンの取得に失敗します。 Rails5+devise+omniauth-lineで試してますが、多分その辺の問題は余り関係無いような気がしています。ローカルで試しているのでngrokを使って試しています。 LINE側のログイン画面は下記のようなURLで表示させています。`client_id`は念のため伏せます。チャンネルIDを指定しています。 ``` https://access.line.me/oauth2/v2.1/authorize?client_id=****&redirect_uri=https%3A%2F%2Fdd7c0812.ngrok.io%2Fusers%2Fauth%2Fline%2Fcallback&response_type=code&scope=profile+openid&state=79baaf82c0c5c1f564fe21ecb2b69722f939c8f010da527e ``` これでログイン画面は問題なく表示され「ログイン」ボタンを押すと、下記のURLに戻ってきます。これは私のローカルのWEBアプリです。 ``` https://dd7c0812.ngrok.io/users/auth/line/callback?code=ZdpeKTHQMr3FLBCKnImK&state=79baaf82c0c5c1f564fe21ecb2b69722f939c8f010da527e ``` ここで`https://api.line.me/oauth2/v2.1/token`にポストすると`{"error":"invalid_grant","error_description":"redirect_uri does not match"}`のレスポンスが帰ってきてトークンの取得が出来ません。 ポスト内容はこんな感じです(同じくシークレットはふせます)。 ``` https://api.line.me/oauth2/v2.1/token Content-Type: application/x-www-form-urlencoded client_id=*** client_secret=*** code=ZdpeKTHQMr3FLBCKnImK grant_type=authorization_code redirect_uri=https%3A%2F%2Fdd7c0812.ngrok.io%2Fusers%2Fauth%2Fline%2Fcallback%3Fcode%3DZdpeKTHQMr3FLBCKnImK%26state%3D79baaf82c0c5c1f564fe21ecb2b69722f939c8f010da527e ``` 実際には`omniauth-line`が全部組み立ててるのでミスは無いと思うのですが失敗してしまうので、何か管理画面側の設定かなと思っています。関係あるか分からないけど試したのは、チャンネルを公開にしてみたのと、ログインを試してるLINEアカウントをチェンネルの権限設定でTesterに登録しました。 LINEのサポートにも問い合わせましたが、散々またされたあげくに、 > > 大変申し訳ございませんが、ドキュメント内設定などの技術的なサポートは個別返信を行っておりません。 > > 不明点などは、LINE Developers ページ内の「FAQ」や「Community」をご参照ください。 > > > とのつれない返事が・・・コミュニティーも見たけどそれっぽい物は有りません。何か思い当たることがある方いらっしゃいますでしょうか? --- 2019/12/24追記 いただいた回答でファイナルアンサーなのですが、その後ライブラリの中身を追って、何故この問題が起きたのか、どう解決すれば良いのかまとめましたので同じ問題ではまってる人いたら参考にしてください。
回答: 自分もこれで4時間もどハマリした...。時間を返してくれ。 登録している「コールバックURL」じゃなく、ログイン画面へのリンク時に指定した「redirect_uri」と完全一致しないといけない。つまり、「?」以降のパラメータまでしっかり一緒じゃないといけない。 てか、エラー内容をもっと詳しく吐き出せといいたい。「最初のredirect_uriにパラメータを指定している場合はそれも含める必要がある」の一行くらい書けんのか...。 というか、パラメータくらい省略してもいいだろ。許せよ、そのくらい。codeなんてすぐ期限切れるんだし、パラメータの省略を許したからってセキュリティに問題ができるとは到底思えん。 そういう気遣いの無いところが発展途上すぎて、この先も仕様が変わる事が心配で導入するのを躊躇してしまう。