SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
実装して理解する
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

Mais conteúdo relacionado

Mais procurados

オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
 

Mais procurados (20)

BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
認証の課題とID連携の実装 〜ハンズオン〜
認証の課題とID連携の実装 〜ハンズオン〜認証の課題とID連携の実装 〜ハンズオン〜
認証の課題とID連携の実装 〜ハンズオン〜
 
Keycloak入門
Keycloak入門Keycloak入門
Keycloak入門
 
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
OpenID Connect入門
OpenID Connect入門OpenID Connect入門
OpenID Connect入門
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツ
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
 
SpringBootTest入門
SpringBootTest入門SpringBootTest入門
SpringBootTest入門
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawawsOAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
 
SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
FIDO認証によるパスワードレスログイン実装入門
FIDO認証によるパスワードレスログイン実装入門FIDO認証によるパスワードレスログイン実装入門
FIDO認証によるパスワードレスログイン実装入門
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
 

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

クラウドにおける Windows Azure Active Directory の役割
クラウドにおける Windows Azure Active Directory の役割クラウドにおける Windows Azure Active Directory の役割
クラウドにおける Windows Azure Active Directory の役割
junichi anno
 
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
Tatsuo Kudo
 
OpenID TechNight - Ping Identity 製品紹介
OpenID TechNight - Ping Identity 製品紹介OpenID TechNight - Ping Identity 製品紹介
OpenID TechNight - Ping Identity 製品紹介
Daisuke Fuke
 

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

OpenID Connect のビジネスチャンス
OpenID Connect のビジネスチャンスOpenID Connect のビジネスチャンス
OpenID Connect のビジネスチャンス
 
『OpenID ConnectとSCIMのエンタープライズ実装ガイドライン』解説
『OpenID ConnectとSCIMのエンタープライズ実装ガイドライン』解説『OpenID ConnectとSCIMのエンタープライズ実装ガイドライン』解説
『OpenID ConnectとSCIMのエンタープライズ実装ガイドライン』解説
 
OpenID ConnectとSCIMによるエンタープライズでのID連携活用に向けて
OpenID ConnectとSCIMによるエンタープライズでのID連携活用に向けてOpenID ConnectとSCIMによるエンタープライズでのID連携活用に向けて
OpenID ConnectとSCIMによるエンタープライズでのID連携活用に向けて
 
Keycloakの紹介と最新開発動向
Keycloakの紹介と最新開発動向Keycloakの紹介と最新開発動向
Keycloakの紹介と最新開発動向
 
認証技術、デジタルアイデンティティ技術の最新動向
認証技術、デジタルアイデンティティ技術の最新動向認証技術、デジタルアイデンティティ技術の最新動向
認証技術、デジタルアイデンティティ技術の最新動向
 
今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID
 
OpenID ConnectとSCIMのエンタープライズ利用ガイドライン
OpenID ConnectとSCIMのエンタープライズ利用ガイドラインOpenID ConnectとSCIMのエンタープライズ利用ガイドライン
OpenID ConnectとSCIMのエンタープライズ利用ガイドライン
 
Spring Social でソーシャルログインを実装する
Spring Social でソーシャルログインを実装するSpring Social でソーシャルログインを実装する
Spring Social でソーシャルログインを実装する
 
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
 
OpenIDファウンデーション・ジャパンKYC WGの活動報告 - OpenID Summit 2020
OpenIDファウンデーション・ジャパンKYC WGの活動報告 - OpenID Summit 2020OpenIDファウンデーション・ジャパンKYC WGの活動報告 - OpenID Summit 2020
OpenIDファウンデーション・ジャパンKYC WGの活動報告 - OpenID Summit 2020
 
IDaaSにSign in with Appleをつないでみた
IDaaSにSign in with AppleをつないでみたIDaaSにSign in with Appleをつないでみた
IDaaSにSign in with Appleをつないでみた
 
クラウドにおける Windows Azure Active Directory の役割
クラウドにおける Windows Azure Active Directory の役割クラウドにおける Windows Azure Active Directory の役割
クラウドにおける Windows Azure Active Directory の役割
 
Yahoo! JAPANのOpenID Certified Mark取得について
Yahoo! JAPANのOpenID Certified Mark取得についてYahoo! JAPANのOpenID Certified Mark取得について
Yahoo! JAPANのOpenID Certified Mark取得について
 
Azure AD B2CにIdPを色々と繋いでみる
Azure AD B2CにIdPを色々と繋いでみるAzure AD B2CにIdPを色々と繋いでみる
Azure AD B2CにIdPを色々と繋いでみる
 
Azure ADとIdentity管理
Azure ADとIdentity管理Azure ADとIdentity管理
Azure ADとIdentity管理
 
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
 
既存RailsアプリをSSO化して、本番環境で活用した話【WESEEK Tech Conf #12】
既存RailsアプリをSSO化して、本番環境で活用した話【WESEEK Tech Conf #12】既存RailsアプリをSSO化して、本番環境で活用した話【WESEEK Tech Conf #12】
既存RailsアプリをSSO化して、本番環境で活用した話【WESEEK Tech Conf #12】
 
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_insideAuthlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
 
OpenID TechNight - Ping Identity 製品紹介
OpenID TechNight - Ping Identity 製品紹介OpenID TechNight - Ping Identity 製品紹介
OpenID TechNight - Ping Identity 製品紹介
 
OCHaCafe#5 - 避けては通れない!認証・認可
OCHaCafe#5 - 避けては通れない!認証・認可OCHaCafe#5 - 避けては通れない!認証・認可
OCHaCafe#5 - 避けては通れない!認証・認可
 

Mais de Naohiro Fujie

Mais de Naohiro Fujie (20)

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