LINEログイン機能を試してみる(Spring Boot 2.1.7/Spring Security 5.1.6)
   3 min read
Important
本ページは Spring Boot 2.1.7 の頃のものですが、後続として 2.4.5 対応版があります: LINEログインを試してみる(Spring Boot 2.4.5/Spring Security 5.4.6) – 発火後忘失

Spring SecurityのOAuth実装は こちらに書いたとおり 歴史的経緯により複数存在しますが、 https://start.spring.io/ の Dependencies で "OAuth2 Client" を選択した場合に追加されるものは一番新しいSpring Securityの spring-security-oauth2-client (及び spring-security-oauth2-jose)でした。

というわけでSpring Securityのリファレンス 6.7 OAuth 2.0 Login を参 照しながら実装していきます。

リファレンスを見るとSpring Bootがauto-configurationを提供してくれているようですので、クラスを探してみます[1]

そしてこのクラスで @Import している2クラス+1プロパティ

あたりで設定が行われているのがわかります。

メモ

設定が間違っていても何が原因かログ等に出ない

設定が誤っていると、見た目はログイン画面のループになり、原因がさっぱりわからないことがままあります。 Spring Securityあるあるですが、ログにも大した情報は出ません。 ですので、とりあえず小さな動くサンプルを作ってから、動かしながら機能をつけ足していくのが無難かと思います。

参照すべきリファレンスなど

LINEログインのリファレンスだけでなく、Social APIの方にしか書かれていない情報があるし、更に言うとそこにも書かれていない情報がありました。

最後のリンクは OpenID Provider Configuration Document を返すエンドポイントです。

jwk-set-uri 設定がリファレンスに明記されていない

上記の OpenID Provider Configuration Documentに載っていました。

application.properties
spring.security.oauth2.client.provider.line.jwk-set-uri=https://api.line.me/oauth2/v2.1/certs

issuer-uri 設定を行ってはいけない

本来 https://access.line.me を設定するのが良さそうに思われますが、LINEの提供している OpenID Provider Configuration Document は本ライブラリの期待する情報種類を満たしておらず、設定すると NPE が発生しました。

scopeの区切り文字

URLエンコードされた空白文字(%20)で区切って、複数のスコープを指定できます。

とのことですが、 application.properties で空白で区切って設定値を書くと + (%2B)になってしまってどうしたものかと思いましたが、LINE側はこれでも受け付けてくれているようなので良しとしています。


1. ところでいつもこの作業は何となく名前でそれっぽいクラス…というふうに探しているのですが、ちゃんとした調べ方ってあるんでしょうかね…?