SlideShare a Scribd company logo
実装して理解する
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

More Related Content

PDF
なぜOpenID Connectが必要となったのか、その歴史的背景
PDF
Keycloak拡張入門
PDF
認証の課題とID連携の実装 〜ハンズオン〜
PDF
これからのネイティブアプリにおけるOpenID Connectの活用
PDF
今なら間に合う分散型IDとEntra Verified ID
PDF
SSIとDIDで何を解決したいのか?(β版)
PDF
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
PPTX
KeycloakでAPI認可に入門する
なぜOpenID Connectが必要となったのか、その歴史的背景
Keycloak拡張入門
認証の課題とID連携の実装 〜ハンズオン〜
これからのネイティブアプリにおけるOpenID Connectの活用
今なら間に合う分散型IDとEntra Verified ID
SSIとDIDで何を解決したいのか?(β版)
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
KeycloakでAPI認可に入門する

What's hot (20)

PDF
ざっくり解説 LINE ログイン
PDF
3分でわかるAzureでのService Principal
PDF
Azure AD B2CにIdPを色々と繋いでみる
PDF
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
PDF
エンタープライズITでのOpenID Connect利用ガイドライン
PPTX
Keycloak入門
PPTX
NGINXをBFF (Backend for Frontend)として利用した話
PDF
PDSを実現するにあたっての技術動向の紹介 (OAuth, OpenID Connect, UMAなど)
PPTX
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
PDF
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
PDF
LINE Login総復習
PPTX
Keycloakのステップアップ認証について
PDF
Javaのログ出力: 道具と考え方
PDF
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
PDF
IDA,VC,DID関連仕様 最新情報 - OpenID BizDay #15
PDF
俺が考えた最強のID連携デザインパターン
PDF
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
PDF
FIDO認証によるパスワードレスログイン実装入門
PDF
OpenID ConnectとSCIMの標準化動向
PDF
MicrosoftのDID/VC実装概要
ざっくり解説 LINE ログイン
3分でわかるAzureでのService Principal
Azure AD B2CにIdPを色々と繋いでみる
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
エンタープライズITでのOpenID Connect利用ガイドライン
Keycloak入門
NGINXをBFF (Backend for Frontend)として利用した話
PDSを実現するにあたっての技術動向の紹介 (OAuth, OpenID Connect, UMAなど)
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
LINE Login総復習
Keycloakのステップアップ認証について
Javaのログ出力: 道具と考え方
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
IDA,VC,DID関連仕様 最新情報 - OpenID BizDay #15
俺が考えた最強のID連携デザインパターン
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
FIDO認証によるパスワードレスログイン実装入門
OpenID ConnectとSCIMの標準化動向
MicrosoftのDID/VC実装概要
Ad

Similar to 実装して理解するLINE LoginとOpenID Connect入門 (20)

PDF
OpenID Connect のビジネスチャンス
PPTX
『OpenID ConnectとSCIMのエンタープライズ実装ガイドライン』解説
PPTX
OpenID ConnectとSCIMによるエンタープライズでのID連携活用に向けて
PPTX
Keycloakの紹介と最新開発動向
PDF
認証技術、デジタルアイデンティティ技術の最新動向
PPTX
OpenID ConnectとSCIMのエンタープライズ利用ガイドライン
PDF
OpenID Connect入門
PDF
Spring Social でソーシャルログインを実装する
PDF
OpenIDファウンデーション・ジャパンKYC WGの活動報告 - OpenID Summit 2020
PDF
IDaaSにSign in with Appleをつないでみた
PDF
クラウドにおける Windows Azure Active Directory の役割
PDF
Yahoo! JAPANのOpenID Certified Mark取得について
PDF
Azure ADとIdentity管理
PPTX
既存RailsアプリをSSO化して、本番環境で活用した話【WESEEK Tech Conf #12】
PDF
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
PDF
OpenID TechNight - Ping Identity 製品紹介
PDF
OCHaCafe#5 - 避けては通れない!認証・認可
PDF
YAPC::Tokyo 2013 ritou OpenID Connect
PDF
091009 Identity Conference #6 ritou
PDF
組織におけるアイデンティティ管理の基本的な考え方
OpenID Connect のビジネスチャンス
『OpenID ConnectとSCIMのエンタープライズ実装ガイドライン』解説
OpenID ConnectとSCIMによるエンタープライズでのID連携活用に向けて
Keycloakの紹介と最新開発動向
認証技術、デジタルアイデンティティ技術の最新動向
OpenID ConnectとSCIMのエンタープライズ利用ガイドライン
OpenID Connect入門
Spring Social でソーシャルログインを実装する
OpenIDファウンデーション・ジャパンKYC WGの活動報告 - OpenID Summit 2020
IDaaSにSign in with Appleをつないでみた
クラウドにおける Windows Azure Active Directory の役割
Yahoo! JAPANのOpenID Certified Mark取得について
Azure ADとIdentity管理
既存RailsアプリをSSO化して、本番環境で活用した話【WESEEK Tech Conf #12】
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
OpenID TechNight - Ping Identity 製品紹介
OCHaCafe#5 - 避けては通れない!認証・認可
YAPC::Tokyo 2013 ritou OpenID Connect
091009 Identity Conference #6 ritou
組織におけるアイデンティティ管理の基本的な考え方
Ad

More from Naohiro Fujie (20)

PDF
分散型IDと検証可能なアイデンティティ技術概要
PDF
LINEログインの最新アップデートとアプリ連携ウォークスルー
PDF
Azure AD x LINE x Auth0
PDF
LINE Payも取り組んでいるKYCってなんだろう?KYCの基本と最近の動向
PDF
LIFFとの連携でさらに強力に。こんなに使えるLINEログイン
PDF
自己主権型IDと分散型ID
PDF
Azure ADの外部コラボレーションとBYOID
PDF
祝!公式サポート Auth0 + LINE Login
PDF
次世代KYCと自己主権型アイデンティティの動向
PDF
これからの KYC と Identity on Blockchain の動向
PDF
教育機関におけるBYOIDとKYC
PDF
コンシューマIDのエンタープライズ領域での活用
PDF
大学等におけるAzure AD B2Cを使用したSNS認証の活用
PDF
Azure AD B2C + LINE 学校や企業における次世代 ID/ メッセージ基盤
PDF
Azure ADとLINE連携により実現する学校や企業における次世代ID/メッセージ基盤
PDF
認証/メッセージング領域へのモバイル/ソーシャルネットワークIDの活用
PDF
大学等におけるAzure AD B2Cを使用したSNS認証の活用
PDF
アイデンティティ API とデータ統合プラットフォームの活用
PDF
Office365のID基盤活用とセキュリティ上の注意点
PDF
OAuth2.0によるWeb APIの保護
分散型IDと検証可能なアイデンティティ技術概要
LINEログインの最新アップデートとアプリ連携ウォークスルー
Azure AD x LINE x Auth0
LINE Payも取り組んでいるKYCってなんだろう?KYCの基本と最近の動向
LIFFとの連携でさらに強力に。こんなに使えるLINEログイン
自己主権型IDと分散型ID
Azure ADの外部コラボレーションとBYOID
祝!公式サポート Auth0 + LINE Login
次世代KYCと自己主権型アイデンティティの動向
これからの KYC と Identity on Blockchain の動向
教育機関におけるBYOIDとKYC
コンシューマIDのエンタープライズ領域での活用
大学等におけるAzure AD B2Cを使用したSNS認証の活用
Azure AD B2C + LINE 学校や企業における次世代 ID/ メッセージ基盤
Azure ADとLINE連携により実現する学校や企業における次世代ID/メッセージ基盤
認証/メッセージング領域へのモバイル/ソーシャルネットワークIDの活用
大学等におけるAzure AD B2Cを使用したSNS認証の活用
アイデンティティ API とデータ統合プラットフォームの活用
Office365のID基盤活用とセキュリティ上の注意点
OAuth2.0によるWeb APIの保護

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

  • 1. 実装して理解する LINE Login と OpenID Connect 入門 Naohiro Fujie 2019/03/15
  • 2. 自己紹介 • 役割 • 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
  • 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とは • 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
  • 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の連携 Copyright Naohiro Fujie, 2019 7 カレンダーアプリ Google Calendar API Google Account 利用者 (リソースオーナー) カレンダーアプリに対して アイテムの読み出しを許可 認可に基づき アクセストークンを発行 アクセストークンを 提示してアクセス リソースを所有
  • 8. 認証/ID連携(OAuth認証)の誤用理由① • アクセス許可を行う前にログインする為、アクセストークンを 認証の結果得られたものとして扱ってしまう Copyright Naohiro Fujie, 2019 8 カレンダーアプリ Google Calendar API Google Account 利用者 (リソースオーナー) カレンダーアプリに対して アイテムの読み出しを許可 認可に基づき アクセストークンを発行 アクセストークンを 提示してアクセス リソースを所有 ログイン(認証)
  • 9. 認証/ID連携(OAuth認証)の誤用理由② • 殆どのサービスがプロファイル取得APIを用意しており、アク セストークンでID情報の取得が可能。アクセストークンの持ち 主=リソースオーナーとみなしてしまう Copyright Naohiro Fujie, 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とは • 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エンドポイント
  • 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の場合のエンドポイント • 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
  • 16. 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
  • 17. id_tokenの中身 • jwt.io(by Auth0)とかjwt.ms(by MS) Copyright Naohiro Fujie, 2019 17
  • 18. 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
  • 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)の特徴(クセ) • 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" ] }
  • 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 Naohiro Fujie, 2019 24 クライアント 自動ログイン *1 メールアドレス+ パスワード QRコード 電話番号 *2 モバイル (標準ブラウザ) ○ モバイル (標準外ブラウザ) ○ PCブラウザ ○ ○ PC版アプリ ○ ○ ○ *1. 自動ログインの動作条件:https://developers.line.biz/ja/faq/#-2017-11-08 *2. 電話番号ログインの条件:PC版LINEでユーザ登録をした場合のみ
  • 28. 実習 • 以下に手順とコードを置いてあります • https://github.com/fujie/line_login • 各自手順に従い作業を進めてください • 不明点はスタッフへお問い合わせください Copyright Naohiro Fujie, 2019 28