前提・実現したいこと
WebアプリでSpringSecurityを使用してLINEログイン機能を実装しようとしています。
実装にあたり参考にしたサイトは以下になり設定値以外はほぼ同じです。
https://qiita.com/KWS_0901/items/6a2ff2e6904ec893751c
参考サイトをもとに各種設定を行いました。
※一部抜粋
spring.security.oauth2.client.registration.line.provider=line
spring.security.oauth2.client.registration.line.client-id=チャネルID
spring.security.oauth2.client.registration.line.client-secret=チャネルシークレット
spring.security.oauth2.client.registration.line.redirect-uri=http://localhost/login/oauth2/code/{registrationId}
また、チャネルは公開済みのうえ設定は下記のように行いました。
チャネル基本設定
・チャネル名:テスト
・チャネル説明:テスト
・アプリタイプ:ウェブアプリ
・アサーション署名キー
・OpenID Connect:申請済み
LINEログイン設定
・コールバックURL: http://localhost/login/oauth2/code/line
実現したいことはアクセストークンの発行を成功させ採取的にメールアドレスを取得することです。
発生している問題・エラーメッセージ
アクセストークン発行時のレスポンスが400 (Bad Request)となりアクセストークンが取得できません。
デバッガーでコードを確認したところDefaultAuthorizationCodeTokenResponseClient#getTokenResponseで
例外がThrowされていました。
org.springframework.security.oauth2.core.OAuth2AuthenticationException : [invalid_client] invalid client_secret
ログは以下のようになっています。
o.s.security.web.FilterChainProxy : Securing GET /oauth2/authorization/line
o.s.s.web.DefaultRedirectStrategy : Redirecting to https://access.line.me/oauth2/v2.1/authorize?response_type=code&client_id=チャネルID&scope=profile&state=XXXX%3D&redirect_uri=http://localhost/login/oauth2/code/line
o.a.coyote.http11.Http11InputBuffer : Received [GET /login/oauth2/code/line?code=XXXX&state=XXXX%3D HTTP/1.1
o.a.c.authenticator.AuthenticatorBase : Security checking request GET /login/oauth2/code/line
o.s.security.web.FilterChainProxy : Securing GET /login/oauth2/code/line?code=XXXX&state=XXXX%3D
org.apache.tomcat.util.http.Parameters : Start processing with input [code=XXXX&state=XXXX%3D]
o.s.web.client.RestTemplate : HTTP POST https://api.line.me/oauth2/v2.1/token
o.s.web.client.RestTemplate : Accept=[application/json, application/*+json]
o.s.web.client.RestTemplate : Writing [{grant_type=[authorization_code], code=[XXXX], redirect_uri=[http://localhost/login/oauth2/code/line], client_id=[XXXX]}] as "application/x-www-form-urlencoded;charset=UTF-8"
s.n.www.protocol.http.HttpURLConnection : sun.net.www.MessageHeader@42d0e4fc7 pairs: {POST /oauth2/v2.1/token HTTP/1.1: null}{Accept: application/json;charset=UTF-8}{Content-Type: application/x-www-form-urlencoded;charset=UTF-8}{User-Agent: Java/17.0.1}{Host: api.line.me}{Connection: keep-alive}{Content-Length: 143}
s.n.www.protocol.http.HttpURLConnection : sun.net.www.MessageHeader@62964da310 pairs: {null: HTTP/1.1 400 Bad Request}{cache-control: no-store}{content-type: application/json;charset=UTF-8}{date: Fri, 3 Mar 2023 05:45:50 GMT}{server: Armeria/1.21.0}{x-content-type-options: nosniff}{x-frame-options: DENY}{x-line-request-id: 73139fd7dc11ba41}{x-xss-protection: 1; mode=block}{content-length: 70}
o.s.web.client.RestTemplate : Response 400 BAD_REQUEST
.s.a.DefaultAuthenticationEventPublisher : No event was found for the exception org.springframework.security.oauth2.core.OAuth2AuthenticationException
試したこと
・GithubにあるSpringSecurityを使用したLINEログイン(サンプル的なもの)を探し設定のみ変更(同様の問題が発生)
・アサーション署名キーの削除や追加
・チャネルシークレットの再発行
・コールバックURLに外部公開しているテスト環境のURLを設定
・チャネルの再作成
・OIDCメールアドレス取得を未申請のまま
・curlコマンドでの確認
下記リンクを参考に実行
https://developers.line.biz/ja/reference/line-login/#issue-access-token
この実行結果も400でした。認可コードは直前に取得した認可コード(10分以内)です。
"error":"invalid_request","error_description":"Parameter conditions \"grant_type=authorization_code\" OR \"grant_type=refresh_token\" OR \"grant_type=client_credentials\" not met for actual request parameters: 'grant_type={authorization_code'}, 'code={XXXX'}, 'redirect_uri={http://localhost/login/oauth2/code/line'}, 'client_id={XXXX'}, 'client_secret={XXX}・・・
補足情報(FW/ツールのバージョンなど)
Springboot 3.0.3
SpringSecurity 6.0.2 (oauth2-clientも入っています)
皆様、どうぞよろしくお願いいたします。