実装して理解する
LINE Login と OpenID Connect 入門
Naohiro Fujie
2019/03/15
自己紹介
• 役割
• OpenIDファウンデーション・ジャパン理事、KYC WGリーダー
• IDをコアとしたビジネス開発担当。大阪から全国をカバー
• 書き物など
• Blog:IdM実験室(https://idmlab.eidentity.jp)
• 監訳 : クラウド時代の認証基盤 Azure Active Directory 完全解説
• 共著 : クラウド環境におけるアイデンティティ管理ガイドライン
• その他活動
• 日本ネットワークセキュリティ協会アイデンティティ管理WG
• Microsoft MVP for Enterprise Mobility(Jan 2010 -)
• LINE API Expert (Feb 2018 -)
• Auth0 Ambassador(Sep 2018 -)
Copyright Naohiro Fujie, 2019 2
Agenda
• OpenID Connectとは
• OpenID Connectとは
• OAuth2.0とは
• 認証/ID連携(OAuth認証)の誤用理由
• 認証/ID連携に使うには?
• OAuthとOpenID Connectの違いの例
• 具体的なフロー
• id_token
• LINE LoginとOpenID Connect
• LINE LoginとOpenID Connect
• LINE Login(v2.1)の特徴(クセ)
• その他のトピックス
• 実習
Copyright Naohiro Fujie, 2019 3
OpenID Connectとは
• OpenID Connect 1.0 は, OAuth 2.0 プロトコルの上にシンプル
なアイデンティティレイヤーを付与したものである. このプロ
トコルは Client が Authorization Server の認証結果に基づいて
End-User のアイデンティティを検証可能にする. また同時に
End-User の必要最低限のプロフィール情報を, 相互運用可能か
つ RESTful な形で取得することも可能にする.
• OpenID Connect Core 1.0 日本語訳
• http://openid-foundation-japan.github.io/openid-connect-core-
1_0.ja.html
• OpenIDファウンデーション・ジャパン翻訳・教育WG
Copyright Naohiro Fujie, 2019 4
OAuth2.0とは
• OAuth 2.0 は, サードパーティーアプリケーションによるHTTP
サービスへの限定的なアクセスを可能にする認可フレームワー
クである.
• RFC 6749: The OAuth 2.0 Authorization Framework 日本語訳
• http://openid-foundation-japan.github.io/rfc6749.ja.html
• OpenIDファウンデーション・ジャパン翻訳・教育WG
Copyright Naohiro Fujie, 2019 5
• サードパーティアプリケーション:OAuthクライアント
• HTTPサービス:リソースサーバ
• 限定的なアクセス:スコープ
• 可能にする(サービス):認可サーバ
Copyright Naohiro Fujie, 2019 6
OAuthクライアント
(Webアプリ、スマホアプリなど)
リソースサーバ
(API、サービス)
認可サーバ
(OAuthサーバ)
利用者
(リソースオーナー)
スコープに基づき許可
(認可)
認可に基づき
アクセストークンを発行
アクセストークンを
提示してアクセス
リソースを所有
典型的な使われ方
• カレンダーアプリとGoogle Calendarの連携
Copyright Naohiro Fujie, 2019 7
カレンダーアプリ
Google Calendar API
Google Account
利用者
(リソースオーナー)
カレンダーアプリに対して
アイテムの読み出しを許可
認可に基づき
アクセストークンを発行
アクセストークンを
提示してアクセス
リソースを所有
認証/ID連携(OAuth認証)の誤用理由①
• アクセス許可を行う前にログインする為、アクセストークンを
認証の結果得られたものとして扱ってしまう
Copyright Naohiro Fujie, 2019 8
カレンダーアプリ
Google Calendar API
Google Account
利用者
(リソースオーナー)
カレンダーアプリに対して
アイテムの読み出しを許可
認可に基づき
アクセストークンを発行
アクセストークンを
提示してアクセス
リソースを所有
ログイン(認証)
認証/ID連携(OAuth認証)の誤用理由②
• 殆どのサービスがプロファイル取得APIを用意しており、アク
セストークンでID情報の取得が可能。アクセストークンの持ち
主=リソースオーナーとみなしてしまう
Copyright Naohiro Fujie, 2019 9
カレンダーアプリ
Google Account API
Google Account
利用者
(リソースオーナー)
カレンダーアプリに対して
アイテムの読み出しを許可
認可に基づき
アクセストークンを発行
アクセストークンを
提示してアクセス
リソースを所有
ID情報の取得が可能
よく考えると
• アクセストークンは無記名式の切符(誰が持ってきてもOK)
• 認可サーバはアクセストークンの有効性検証は出来るが、持参人=発行者
かどうかは検証できない
• 何故なら、
• 基本的にアクセストークンは単なる文字列(ハンドルトークン)
• ※最近はJWT形式のAssertion Tokenもありますがややこしくなるので割愛
• 認可サーバには以下のように保存されている(イメージ)
• Authorization HeaderにBearer xxxx(トークン)って書きますよね?
• Bearer(ベアラ)=持参人。持ってきた人に利用を許可する、ということ
• 参考)https://idmlab.eidentity.jp/2013/09/bearer-token.html
Copyright Naohiro Fujie, 2019 10
アクセストークン 発行者 有効期限 スコープ
nQ6wtY3K#UCWRtE6 Yamada Taro 2019-03-15 18:30:00 Email Profie
xU,RRjaa.iZLnNgJ Tanaka Hanako 2019-03-15 19:00:00 Calendar.Read
OAuth2.0とは
• OAuth 2.0 は, サードパーティーアプリケーションによるHTTP
サービスへの限定的なアクセスを可能にする認可フレームワー
クである.
• RFC 6749: The OAuth 2.0 Authorization Framework 日本語訳
• http://openid-foundation-japan.github.io/rfc6749.ja.html
• OpenIDファウンデーション・ジャパン翻訳・教育WG
Copyright Naohiro Fujie, 2019 11
認証/ID連携は仕様のスコープ外
認証/ID連携に使うには?
• OAuthクライアントがリソースサーバ側のユーザ情報を取得でき
ること
• 認証された結果を把握できること
• リソースオーナーのID情報を把握できること
• OpenID Connectにおける実現方法=アイデンティティレイヤー
• ID Token : 認証結果(アサーション)の取得方法の標準化
• UserInfoエンドポイント : ID情報の取得方法の標準化
※ID TokenにもID情報を含められるがトークンのサイズの巨大化の問題や認証時以外の情報取得に対
応するためUserInfoを使用
Copyright Naohiro Fujie, 2019 12
OpenID Connectとは
• OpenID Connect 1.0 は, OAuth 2.0 プロトコルの上にシンプル
なアイデンティティレイヤーを付与したものである. このプロ
トコルは Client が Authorization Server の認証結果に基づいて
End-User のアイデンティティを検証可能にする. また同時に
End-User の必要最低限のプロフィール情報を, 相互運用可能か
つ RESTful な形で取得することも可能にする.
• OpenID Connect Core 1.0 日本語訳
• http://openid-foundation-japan.github.io/openid-connect-core-
1_0.ja.html
• OpenIDファウンデーション・ジャパン翻訳・教育WG
Copyright Naohiro Fujie, 2019 13
アイデンティティレイヤー
=
ID Token、UserInfoエンドポイント
OAuthとOpenID Connectの違いの例
(code flow)
項目 OAuth OpenID Connect
認可リクエストの
パラメータ
scope 任意 必須(openid)
redirect_uri 任意 必須
nonce - 任意
セキュリティ対策
(code置き換えへの対策)
PKCE
(codeとセッション紐づけ)
nonce
(codeとid_tokenの紐づけ)
トークンの種類 access_token
(発行対象者の情報なし)
id_token
(発行対象者の情報あり)
プロファイル取得方法 標準化対象外 userInfoエンドポイント
Copyright Naohiro Fujie, 2019 14
キモは「scope=openid」と「id_token」と「userInfoエンドポイント」
具体的なフロー
(code flow)
LINEの場合のエンドポイント
• Authorization Endpoint
• https://access.line.me/oauth2/v2.1/authorize
• Token Endpoint
• https://api.line.me/oauth2/v2.1/token
• Profile Endpoint
• https://api.line.me/v2/profile
Copyright Naohiro Fujie, 2019 15
id_token
• JWT(JSON Web Token)形式
• JSON Web Token (JWT) - draft-ietf-oauth-json-web-token-11 日本
語訳
• http://openid-foundation-japan.github.io/draft-ietf-oauth-json-web-token-
11.ja.html
• OpenIDファウンデーション・ジャパン翻訳・教育WG
• 内部構造
• ヘッダ:署名や暗号化形式など
• ペイロード:クレーム(属性)セット、暗号化する場合も
• シグニチャ:デジタル署名
• Base64Urlエンコードし、”.”で各パートを連結する
• eyJhb—snip--iJ9.eyJpc3—snip--pwIn0.gC4ub--snip--yBm0
Copyright Naohiro Fujie, 2019 16
id_tokenの中身
• jwt.io(by Auth0)とかjwt.ms(by MS)
Copyright Naohiro Fujie, 2019 17
id_tokenの中身
Claim Type Value Notes
iss https://access.line.me JWTの発行者(issuer)を表す識別子
sub U9f1cac4f164ef3f5c02c92d00
67a11a1
JWTの主体(subject)を表す識別子
LINEの場合はuserId
aud 1516319320 JWTの発行先(audience)を表す識別子
LINEの場合はclient_id
exp 1552324580 JWTの有効期限(UNIX Time)
iat 1552320980 JWTの発行時刻(UNIX Time)
nonce 51501f6a-9a12-4d42-ad72-
0d36e44df96f
リクエスト時に設定したnonceの値
リクエストと発行されたid_tokenの中の値がマッチ
するかどうかを検査し置き換え攻撃を検知する
name Naohiro Fujie 名前。LINEの場合は表示名
picture https://profile.line-
scdn.net/0m0--snip-- xxx
プロファイル写真のURL
email naohiro.fujie@eidentity.jp メールアドレス
Copyright Naohiro Fujie, 2019 18
LINE LoginとOpenID Connect
• 2017年9月
• LINE Login v2.1でOpenID Connectに対応(v2.0まではOAuth2.0)
• 2018年3月
• eメールアドレス属性の提供(id_token)に対応
• 2018年6月
• OpenID Certificationにより認定(Basic OP)
• https://openid.net/certification/
• 2019年2月
• ブラウザシナリオでのQRコードログインに対応
Copyright Naohiro Fujie, 2019 19
LINE Login(v2.1)の特徴(クセ)
• OpenID Provider Configuration Documentから探る
• https://access.line.me/.well-known/openid-configuration
Copyright Naohiro Fujie, 2019 20
{
"issuer": "https://access.line.me",
"authorization_endpoint": "https://access.line.me/oauth2/v2.1/authorize",
"token_endpoint": "https://api.line.me/oauth2/v2.1/token",
"jwks_uri": "https://api.line.me/oauth2/v2.1/certs",
"response_types_supported": [ "code" ],
"subject_types_supported": [ "pairwise" ],
"id_token_signing_alg_values_supported": [ "ES256" ]
}
LINE Login(v2.1)の特徴(クセ)
パラメータ 値 説明
response_types_supported code Code flowのみサポート
subject_types_supported pairwise 同一ユーザでもアプリケーション毎にユニークな
subが発行される
LINEの場合はアプリ単位というよりプロバイダ単
位なんですが・・・
id_token_signing_alg_values_s
upported
ES256 ES256(ECDSA using P-256 curve and SHA-256
hash)をサポートとありますが、id_tokenのヘッ
ダを見ると、HS256・・・
スペック上はRS256は必須で含まれないとダメな
はずなんですが・・・
token_endpoint_auth_methods
_supported
なし tokenエンドポイントのクライアント認証の方法の
指定がない(OPTIONALなので間違いではない)
ので、ドキュメントを見るとclient_secret_post
(client_idとclient_secretをPOSTする)が使われ
ている。が、実際はclient_secret_basic(BASIC認
証)でも動く
Copyright Naohiro Fujie, 2019 21
LINE Login(v2.1)の特徴(クセ)
• メールアドレスの取得
• scopeとして指定できるのは、
• openid, email, profileの3種類
• emailを指定しても、あらかじめ許可
設定をしておかないとダメ
• Emailはprofileではなくid_tokenのみ
に含まれる
• そして、tokenレスポンス内のscope
にはemailは出てこない(指定していても)
Copyright Naohiro Fujie, 2019 22
LINE Login(v2.1)の特徴(クセ)
• その他特殊パラメータ
• bot_prompt(ボットの友だち追加の方法)
• Normal: 同意画面の中でボットと友達になるチェックを入れる
• Aggressive: 別画面でボットと友達になる
Copyright Naohiro Fujie, 2019 23
Normal Aggressive
LINE Login(v2.1)の特徴(クセ)
Copyright Naohiro Fujie, 2019 24
クライアント 自動ログイン
*1
メールアドレス+
パスワード
QRコード 電話番号
*2
モバイル
(標準ブラウザ)
○
モバイル
(標準外ブラウザ)
○
PCブラウザ ○ ○
PC版アプリ ○ ○ ○
*1. 自動ログインの動作条件:https://developers.line.biz/ja/faq/#-2017-11-08
*2. 電話番号ログインの条件:PC版LINEでユーザ登録をした場合のみ
Copyright Naohiro Fujie, 2019 25
その他のトピックス
• FIDO対応(2019年春予定)
• https://engineering.linecorp.com/ja/blog/fido-at-line/
Copyright Naohiro Fujie, 2019 26
実習
• コードを見ながら解説します
Copyright Naohiro Fujie, 2019 27
実習
• 以下に手順とコードを置いてあります
• https://github.com/fujie/line_login
• 各自手順に従い作業を進めてください
• 不明点はスタッフへお問い合わせください
Copyright Naohiro Fujie, 2019 28

実装して理解するLINE LoginとOpenID Connect入門

  • 1.
    実装して理解する LINE Login とOpenID Connect 入門 Naohiro Fujie 2019/03/15
  • 2.
    自己紹介 • 役割 • OpenIDファウンデーション・ジャパン理事、KYCWGリーダー • IDをコアとしたビジネス開発担当。大阪から全国をカバー • 書き物など • Blog:IdM実験室(https://idmlab.eidentity.jp) • 監訳 : クラウド時代の認証基盤 Azure Active Directory 完全解説 • 共著 : クラウド環境におけるアイデンティティ管理ガイドライン • その他活動 • 日本ネットワークセキュリティ協会アイデンティティ管理WG • Microsoft MVP for Enterprise Mobility(Jan 2010 -) • LINE API Expert (Feb 2018 -) • Auth0 Ambassador(Sep 2018 -) Copyright Naohiro Fujie, 2019 2
  • 3.
    Agenda • OpenID Connectとは •OpenID Connectとは • OAuth2.0とは • 認証/ID連携(OAuth認証)の誤用理由 • 認証/ID連携に使うには? • OAuthとOpenID Connectの違いの例 • 具体的なフロー • id_token • LINE LoginとOpenID Connect • LINE LoginとOpenID Connect • LINE Login(v2.1)の特徴(クセ) • その他のトピックス • 実習 Copyright Naohiro Fujie, 2019 3
  • 4.
    OpenID Connectとは • OpenIDConnect 1.0 は, OAuth 2.0 プロトコルの上にシンプル なアイデンティティレイヤーを付与したものである. このプロ トコルは Client が Authorization Server の認証結果に基づいて End-User のアイデンティティを検証可能にする. また同時に End-User の必要最低限のプロフィール情報を, 相互運用可能か つ RESTful な形で取得することも可能にする. • OpenID Connect Core 1.0 日本語訳 • http://openid-foundation-japan.github.io/openid-connect-core- 1_0.ja.html • OpenIDファウンデーション・ジャパン翻訳・教育WG Copyright Naohiro Fujie, 2019 4
  • 5.
    OAuth2.0とは • OAuth 2.0は, サードパーティーアプリケーションによるHTTP サービスへの限定的なアクセスを可能にする認可フレームワー クである. • RFC 6749: The OAuth 2.0 Authorization Framework 日本語訳 • http://openid-foundation-japan.github.io/rfc6749.ja.html • OpenIDファウンデーション・ジャパン翻訳・教育WG Copyright Naohiro Fujie, 2019 5
  • 6.
    • サードパーティアプリケーション:OAuthクライアント • HTTPサービス:リソースサーバ •限定的なアクセス:スコープ • 可能にする(サービス):認可サーバ Copyright Naohiro Fujie, 2019 6 OAuthクライアント (Webアプリ、スマホアプリなど) リソースサーバ (API、サービス) 認可サーバ (OAuthサーバ) 利用者 (リソースオーナー) スコープに基づき許可 (認可) 認可に基づき アクセストークンを発行 アクセストークンを 提示してアクセス リソースを所有
  • 7.
    典型的な使われ方 • カレンダーアプリとGoogle Calendarの連携 CopyrightNaohiro Fujie, 2019 7 カレンダーアプリ Google Calendar API Google Account 利用者 (リソースオーナー) カレンダーアプリに対して アイテムの読み出しを許可 認可に基づき アクセストークンを発行 アクセストークンを 提示してアクセス リソースを所有
  • 8.
    認証/ID連携(OAuth認証)の誤用理由① • アクセス許可を行う前にログインする為、アクセストークンを 認証の結果得られたものとして扱ってしまう Copyright NaohiroFujie, 2019 8 カレンダーアプリ Google Calendar API Google Account 利用者 (リソースオーナー) カレンダーアプリに対して アイテムの読み出しを許可 認可に基づき アクセストークンを発行 アクセストークンを 提示してアクセス リソースを所有 ログイン(認証)
  • 9.
    認証/ID連携(OAuth認証)の誤用理由② • 殆どのサービスがプロファイル取得APIを用意しており、アク セストークンでID情報の取得が可能。アクセストークンの持ち 主=リソースオーナーとみなしてしまう Copyright NaohiroFujie, 2019 9 カレンダーアプリ Google Account API Google Account 利用者 (リソースオーナー) カレンダーアプリに対して アイテムの読み出しを許可 認可に基づき アクセストークンを発行 アクセストークンを 提示してアクセス リソースを所有 ID情報の取得が可能
  • 10.
    よく考えると • アクセストークンは無記名式の切符(誰が持ってきてもOK) • 認可サーバはアクセストークンの有効性検証は出来るが、持参人=発行者 かどうかは検証できない •何故なら、 • 基本的にアクセストークンは単なる文字列(ハンドルトークン) • ※最近はJWT形式のAssertion Tokenもありますがややこしくなるので割愛 • 認可サーバには以下のように保存されている(イメージ) • Authorization HeaderにBearer xxxx(トークン)って書きますよね? • Bearer(ベアラ)=持参人。持ってきた人に利用を許可する、ということ • 参考)https://idmlab.eidentity.jp/2013/09/bearer-token.html Copyright Naohiro Fujie, 2019 10 アクセストークン 発行者 有効期限 スコープ nQ6wtY3K#UCWRtE6 Yamada Taro 2019-03-15 18:30:00 Email Profie xU,RRjaa.iZLnNgJ Tanaka Hanako 2019-03-15 19:00:00 Calendar.Read
  • 11.
    OAuth2.0とは • OAuth 2.0は, サードパーティーアプリケーションによるHTTP サービスへの限定的なアクセスを可能にする認可フレームワー クである. • RFC 6749: The OAuth 2.0 Authorization Framework 日本語訳 • http://openid-foundation-japan.github.io/rfc6749.ja.html • OpenIDファウンデーション・ジャパン翻訳・教育WG Copyright Naohiro Fujie, 2019 11 認証/ID連携は仕様のスコープ外
  • 12.
    認証/ID連携に使うには? • OAuthクライアントがリソースサーバ側のユーザ情報を取得でき ること • 認証された結果を把握できること •リソースオーナーのID情報を把握できること • OpenID Connectにおける実現方法=アイデンティティレイヤー • ID Token : 認証結果(アサーション)の取得方法の標準化 • UserInfoエンドポイント : ID情報の取得方法の標準化 ※ID TokenにもID情報を含められるがトークンのサイズの巨大化の問題や認証時以外の情報取得に対 応するためUserInfoを使用 Copyright Naohiro Fujie, 2019 12
  • 13.
    OpenID Connectとは • OpenIDConnect 1.0 は, OAuth 2.0 プロトコルの上にシンプル なアイデンティティレイヤーを付与したものである. このプロ トコルは Client が Authorization Server の認証結果に基づいて End-User のアイデンティティを検証可能にする. また同時に End-User の必要最低限のプロフィール情報を, 相互運用可能か つ RESTful な形で取得することも可能にする. • OpenID Connect Core 1.0 日本語訳 • http://openid-foundation-japan.github.io/openid-connect-core- 1_0.ja.html • OpenIDファウンデーション・ジャパン翻訳・教育WG Copyright Naohiro Fujie, 2019 13 アイデンティティレイヤー = ID Token、UserInfoエンドポイント
  • 14.
    OAuthとOpenID Connectの違いの例 (code flow) 項目OAuth OpenID Connect 認可リクエストの パラメータ scope 任意 必須(openid) redirect_uri 任意 必須 nonce - 任意 セキュリティ対策 (code置き換えへの対策) PKCE (codeとセッション紐づけ) nonce (codeとid_tokenの紐づけ) トークンの種類 access_token (発行対象者の情報なし) id_token (発行対象者の情報あり) プロファイル取得方法 標準化対象外 userInfoエンドポイント Copyright Naohiro Fujie, 2019 14 キモは「scope=openid」と「id_token」と「userInfoエンドポイント」
  • 15.
    具体的なフロー (code flow) LINEの場合のエンドポイント • AuthorizationEndpoint • https://access.line.me/oauth2/v2.1/authorize • Token Endpoint • https://api.line.me/oauth2/v2.1/token • Profile Endpoint • https://api.line.me/v2/profile Copyright Naohiro Fujie, 2019 15
  • 16.
    id_token • JWT(JSON WebToken)形式 • JSON Web Token (JWT) - draft-ietf-oauth-json-web-token-11 日本 語訳 • http://openid-foundation-japan.github.io/draft-ietf-oauth-json-web-token- 11.ja.html • OpenIDファウンデーション・ジャパン翻訳・教育WG • 内部構造 • ヘッダ:署名や暗号化形式など • ペイロード:クレーム(属性)セット、暗号化する場合も • シグニチャ:デジタル署名 • Base64Urlエンコードし、”.”で各パートを連結する • eyJhb—snip--iJ9.eyJpc3—snip--pwIn0.gC4ub--snip--yBm0 Copyright Naohiro Fujie, 2019 16
  • 17.
  • 18.
    id_tokenの中身 Claim Type ValueNotes iss https://access.line.me JWTの発行者(issuer)を表す識別子 sub U9f1cac4f164ef3f5c02c92d00 67a11a1 JWTの主体(subject)を表す識別子 LINEの場合はuserId aud 1516319320 JWTの発行先(audience)を表す識別子 LINEの場合はclient_id exp 1552324580 JWTの有効期限(UNIX Time) iat 1552320980 JWTの発行時刻(UNIX Time) nonce 51501f6a-9a12-4d42-ad72- 0d36e44df96f リクエスト時に設定したnonceの値 リクエストと発行されたid_tokenの中の値がマッチ するかどうかを検査し置き換え攻撃を検知する name Naohiro Fujie 名前。LINEの場合は表示名 picture https://profile.line- scdn.net/0m0--snip-- xxx プロファイル写真のURL email naohiro.fujie@eidentity.jp メールアドレス Copyright Naohiro Fujie, 2019 18
  • 19.
    LINE LoginとOpenID Connect •2017年9月 • LINE Login v2.1でOpenID Connectに対応(v2.0まではOAuth2.0) • 2018年3月 • eメールアドレス属性の提供(id_token)に対応 • 2018年6月 • OpenID Certificationにより認定(Basic OP) • https://openid.net/certification/ • 2019年2月 • ブラウザシナリオでのQRコードログインに対応 Copyright Naohiro Fujie, 2019 19
  • 20.
    LINE Login(v2.1)の特徴(クセ) • OpenIDProvider Configuration Documentから探る • https://access.line.me/.well-known/openid-configuration Copyright Naohiro Fujie, 2019 20 { "issuer": "https://access.line.me", "authorization_endpoint": "https://access.line.me/oauth2/v2.1/authorize", "token_endpoint": "https://api.line.me/oauth2/v2.1/token", "jwks_uri": "https://api.line.me/oauth2/v2.1/certs", "response_types_supported": [ "code" ], "subject_types_supported": [ "pairwise" ], "id_token_signing_alg_values_supported": [ "ES256" ] }
  • 21.
    LINE Login(v2.1)の特徴(クセ) パラメータ 値説明 response_types_supported code Code flowのみサポート subject_types_supported pairwise 同一ユーザでもアプリケーション毎にユニークな subが発行される LINEの場合はアプリ単位というよりプロバイダ単 位なんですが・・・ id_token_signing_alg_values_s upported ES256 ES256(ECDSA using P-256 curve and SHA-256 hash)をサポートとありますが、id_tokenのヘッ ダを見ると、HS256・・・ スペック上はRS256は必須で含まれないとダメな はずなんですが・・・ token_endpoint_auth_methods _supported なし tokenエンドポイントのクライアント認証の方法の 指定がない(OPTIONALなので間違いではない) ので、ドキュメントを見るとclient_secret_post (client_idとclient_secretをPOSTする)が使われ ている。が、実際はclient_secret_basic(BASIC認 証)でも動く Copyright Naohiro Fujie, 2019 21
  • 22.
    LINE Login(v2.1)の特徴(クセ) • メールアドレスの取得 •scopeとして指定できるのは、 • openid, email, profileの3種類 • emailを指定しても、あらかじめ許可 設定をしておかないとダメ • Emailはprofileではなくid_tokenのみ に含まれる • そして、tokenレスポンス内のscope にはemailは出てこない(指定していても) Copyright Naohiro Fujie, 2019 22
  • 23.
    LINE Login(v2.1)の特徴(クセ) • その他特殊パラメータ •bot_prompt(ボットの友だち追加の方法) • Normal: 同意画面の中でボットと友達になるチェックを入れる • Aggressive: 別画面でボットと友達になる Copyright Naohiro Fujie, 2019 23 Normal Aggressive
  • 24.
    LINE Login(v2.1)の特徴(クセ) Copyright NaohiroFujie, 2019 24 クライアント 自動ログイン *1 メールアドレス+ パスワード QRコード 電話番号 *2 モバイル (標準ブラウザ) ○ モバイル (標準外ブラウザ) ○ PCブラウザ ○ ○ PC版アプリ ○ ○ ○ *1. 自動ログインの動作条件:https://developers.line.biz/ja/faq/#-2017-11-08 *2. 電話番号ログインの条件:PC版LINEでユーザ登録をした場合のみ
  • 25.
  • 26.
  • 27.
  • 28.
    実習 • 以下に手順とコードを置いてあります • https://github.com/fujie/line_login •各自手順に従い作業を進めてください • 不明点はスタッフへお問い合わせください Copyright Naohiro Fujie, 2019 28