Mais conteúdo relacionado
Semelhante a 実装して理解するLINE LoginとOpenID Connect入門 (20)
Mais de Naohiro Fujie (20)
実装して理解するLINE LoginとOpenID Connect入門
- 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サーバ)
利用者
(リソースオーナー)
スコープに基づき許可
(認可)
認可に基づき
アクセストークンを発行
アクセストークンを
提示してアクセス
リソースを所有
- 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連携は仕様のスコープ外
- 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エンドポイント」
- 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
- 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
- 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でユーザ登録をした場合のみ