モバイル オープン API を活用するための 認証基盤の実装例 株式会社オージス総研 テミストラクトソリューション部 氏縄 武尊 2017 OGIS-RI Co., Ltd.
自己紹介 氏縄武尊 (Ujinawa Takeru) Work 株式会社オージス総研テミストラクトソリューション部 4 年目認証 認可 ID 管理 PKI OpenID Foundation Japan EIWGメンバー Favorite Spec: OpenID Connect, OAuth2.0, SCIM AWS: IAM, CloudTrail, Lambda 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 2
統合認証ソリューションを 年やってきました ThemiStruct-WAM シングルサインオン認証基盤ソリューション ThemiStruct-IDM ID 管理ソリューション ThemiStruct-CM 電 証明書発 管理ソリューション ワンタイムパスワードソリューション ThemiStruct-OTP システム監視ソリューション ThemiStruct-MONITOR ThemiStruct Identity Platform AWS 対応版 クラウド IoT 時代の All in one 統合認証パッケージ 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 3
ThemiStruct Identity Platform の構成 ThemiStruct Identity Platform は Amazon Web Services のマネージドサービス上で稼働するため 一定のアベイラビリティ スケーラビリティを実現することができます また 以下の構成のセットアップを約 2 時間で完了できるインストーラを提供しています 認証基盤の利用 DNS CDN WAF API 定義 API ロジック ログ保管 監視 利用者 Amazon Route 53 Amazon CloudFront AWS WAF Amazon API Gateway AWS Lambda Amazon RDS AWS CloudWatch 暗号鍵保管 サンプルの利用者向け画 Amazon S3 管理者用のコンソール Amazon EC2 Amazon RDS ID セッション 設定ストア AWS KMS 短時間でのセットアップ 認証基盤の管理 新バージョンやパッチの配信 構築者 ThemiStruct Identity Platform インストーラ 管理者 AWS CodeCommit 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 4
アイデンティティ連携を実現する標準技術たち これらの技術は標準化が進み 製品 サービスへの実装も浸透している 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 5
各種仕様の用語説明 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 6
RP(Relying Party) アプリケーション ID 情報要求 ID 情報 認証情報ユーザの情報 OP(OpenID Provider) 認証サーバ 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 7
SAML SP(Service Provider) アプリケーション ID 情報要求 ID 情報 認証情報ユーザの情報 SAML IdP(Identity Provider) 認証サーバ 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 8
AS(Authorization Server) 認可サーバ Resource Owner Client With アクセストークン RS(Resource Server) アプリケーション API Call API サービス ユーザ 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 9
SCIM Client With アクセストークン SCIM Server With アクセストークン SCIM Client ID 管理サーバ ユーザ情報登録要求 ユーザ属性ストア ユーザ情報要求 アプリケーション 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 10
設定 実装例 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 11
モバイル向けアプリの導入 提供の形態 外部サービスの利 SaaS が提供するモバイル向けアプリを利用 従業員向けサービス 顧客向けサービス モバイルウェブの開発と提供 ネイティブアプリの開発 提供 サードパーティとの連携 API を提供し サードパーティがアプリを開発 提供 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 12
認証 アクセス認可の実装の考え方 従業員向けサービス 顧客向けサービス 外部サービスの利 SaaS が提供するモバイル向けアプリを利用 OpenID Connect や SAML を使った SaaS への SSO モバイルウェブの開発と提供 ネイティブアプリの開発 提供 OAuth 2.0 Implicit Grant を用いたバックエンド API へのアクセス認可 OAuth 2.0 for Native Apps のプラクティスを用いたバックエンド API へのアクセス認可 サードパーティとの連携 API を提供し サードパーティがアプリを開発 提供 OAuth 2.0 を用いた API 連携時認証 アクセス認可 Implicit, Authz Code, Authz Code+PKCE (OIDF FAPI WG の動向の考慮も必要 ) 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 13
認証 アクセス認可の実装の考え方 従業員向けサービス 顧客向けサービス 外部サービスの利 SaaS が提供するモバイル向けアプリを利用 OpenID Connect や SAML を使った SaaS への SSO モバイルウェブの開発と提供 ネイティブアプリの開発 提供 OAuth 2.0 Implicit Grant を用いたバックエンド API へのアクセス認可 OAuth 2.0 for Native Apps のプラクティスを用いたバックエンド API へのアクセス認可 サードパーティとの連携 API を提供し サードパーティがアプリを開発 提供 OAuth 2.0 を用いた API 連携時認証 アクセス認可 Implicit, Authz Code, Authz Code+PKCE (OIDF FAPI WG の動向の考慮も必要 ) 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 14
モバイルウェブアプリケーションの例 スケジュール閲覧 API スケジュール登録 API スケジュール管理アプリ スケジュール API 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 15
モバイルウェブアプリケーションの例 このアプリ誰だろう (Client ID) どこに対してトークン渡せば良いんだろう (Redirect URI) スケジュール管理アプリ スケジュール API 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 16
モバイルウェブアプリケーションの例 この API サーバ誰だろう (Resource Server ID) トークンの検証 スケジュール管理アプリ スケジュール API 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 17
モバイルウェブでのバックエンド API アクセス認可 OAuth 2.0 Implicit Grant を用いたバックエンド API へのアクセス認可 1 3 モバイルウェブ (JavaScript) 2 4 5 8 認証 認可サーバー 6 7 バックエンド API AS RS 外部サービスの利用 SaaSが提供するモバイル 従業員向けサービス 顧客向けサービス 向けアプリを利用 モバイルウェブの開発と提供 ネイティブアプリの開発 提供 サードパーティとの連携 APIを提供し サードパーティ がアプリを開発 提供 1. ブラウザでモバイルウェブを起動 ログイン 2. リダイレクトにより OAuth 認可を要求 3. ユーザー認証を実 4. バックエンド API アクセス用のアクセストークンを返却 5. アクセストークンをつけてバックエンド API にアクセス 6.~7. アクセストークンの情報を確認 ( ユーザー Scope 有効期限 など ) 8. バックエンド API が情報を使ってモバイルウェブが動作 ブラウザ Client 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 18
モバイルウェブでのバックエンド API アクセス認可 OAuth 2.0 Implicit Grant を用いたバックエンド API へのアクセス認可 1 モバイルウェブを Client として登録 JavaScript のアプリケーションを Client にするための実装 3 モバイルウェブ (JavaScript) 2 4 5 8 認証 認可サーバー 6 7 バックエンド API AS 外部サービスの利用 SaaSが提供するモバイル 従業員向けサービス 顧客向けサービス 向けアプリを利用 モバイルウェブの開発と提供 ネイティブアプリの開発 提供 サードパーティとの連携 APIを提供し サードパーティ がアプリを開発 提供 1. ブラウザでモバイルウェブを起動 ログイン 2. リダイレクトによりOAuth 認可を要求 検証を うための RS の登録 3. ユーザー認証を実 トークンの権限設定 (Scope) 登録 RS 4. バックエンドAPIアクセス用のアクセストークンを返却 5. アクセストークンをつけてバックエンド API にアクセス 6.~7. アクセストークンの情報を確認 ( ユーザー Scope 有効期限 など ) アクセストークンを検証するリクエスト 8. バックエンド API が情報を使ってモバイルウェブが動作 ブラウザ Client 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 19
モバイルウェブでのバックエンド API アクセス認可 OAuth 2.0 Implicit Grant を用いたバックエンド API へのアクセス認可 1 モバイルウェブを Client として登録 JavaScript のアプリケーションを Client にするための実装 3 モバイルウェブ (JavaScript) 2 4 5 8 認証 認可サーバー 6 7 バックエンド API AS 外部サービスの利用 SaaSが提供するモバイル 従業員向けサービス 顧客向けサービス 向けアプリを利用 モバイルウェブの開発と提供 ネイティブアプリの開発 提供 サードパーティとの連携 APIを提供し サードパーティ がアプリを開発 提供 1. ブラウザでモバイルウェブを起動 ログイン 2. リダイレクトによりOAuth 認可を要求 検証を うための RS の登録 3. ユーザー認証を実 4. バックエンドAPIアクセス用のアクセストークンを返却 トークンの権限設定 (Scope) 登録 RS 5. アクセストークンをつけてバックエンドAPIにアクセス アクセストークンを検証するリクエスト 6.~7. アクセストークンの情報を確認 ( ユーザー Scope 有効期限 など ) 8. バックエンド API が情報を使ってモバイルウェブが動作 ブラウザ Client 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 20
Resource Server の ID/Secret を確認 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 21
モバイルウェブでのバックエンド API アクセス認可 OAuth 2.0 Implicit Grant を用いたバックエンド API へのアクセス認可 1 モバイルウェブを Client として登録 JavaScript のアプリケーションを Client にするための実装 3 モバイルウェブ (JavaScript) 2 4 5 8 認証 認可サーバー 6 7 バックエンド API AS 外部サービスの利用 SaaSが提供するモバイル 従業員向けサービス 顧客向けサービス 向けアプリを利用 モバイルウェブの開発と提供 ネイティブアプリの開発 提供 サードパーティとの連携 APIを提供し サードパーティ がアプリを開発 提供 1. ブラウザでモバイルウェブを起動 ログイン 2. リダイレクトによりOAuth 認可を要求 検証を うための RS の登録 3. ユーザー認証を実 4. バックエンドAPIアクセス用のアクセストークンを返却 トークンの権限設定 (Scope) 登録 RS 5. アクセストークンをつけてバックエンドAPIにアクセス アクセストークンを検証するリクエスト 6.~7. アクセストークンの情報を確認 ( ユーザー Scope 有効期限 など ) 8. バックエンド API が情報を使ってモバイルウェブが動作 ブラウザ Client 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 22
Scope の ID を指定 トークンの期限を設定 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 23
モバイルウェブでのバックエンド API アクセス認可 OAuth 2.0 Implicit Grant を用いたバックエンド API へのアクセス認可 1 モバイルウェブを Client として登録 JavaScript のアプリケーションを Client にするための実装 3 モバイルウェブ (JavaScript) 2 4 5 8 認証 認可サーバー 6 7 バックエンド API AS 外部サービスの利用 SaaSが提供するモバイル 従業員向けサービス 顧客向けサービス 向けアプリを利用 モバイルウェブの開発と提供 ネイティブアプリの開発 提供 サードパーティとの連携 APIを提供し サードパーティ がアプリを開発 提供 1. ブラウザでモバイルウェブを起動 ログイン 2. リダイレクトによりOAuth 認可を要求 検証を うための RS の登録 3. ユーザー認証を実 4. バックエンドAPIアクセス用のアクセストークンを返却 トークンの権限設定 (Scope) 登録 RS 5. アクセストークンをつけてバックエンドAPIにアクセス アクセストークンを検証するリクエスト 6.~7. アクセストークンの情報を確認 ( ユーザー Scope 有効期限 など ) 8. バックエンド API が情報を使ってモバイルウェブが動作 ブラウザ Client 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 24
リダイレクト URL を指定 ( トークンの返し先 ) 要求したい Scope も指定する 登録が完了すると ClientID が発 される 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 25
モバイルウェブでのバックエンド API アクセス認可 OAuth 2.0 Implicit Grant を用いたバックエンド API へのアクセス認可 1 モバイルウェブを Client として登録 JavaScript のアプリケーションを Client にするための実装 3 モバイルウェブ (JavaScript) 2 4 5 8 認証 認可サーバー 6 7 バックエンド API AS 外部サービスの利用 SaaSが提供するモバイル 従業員向けサービス 顧客向けサービス 向けアプリを利用 モバイルウェブの開発と提供 ネイティブアプリの開発 提供 サードパーティとの連携 APIを提供し サードパーティ がアプリを開発 提供 1. ブラウザでモバイルウェブを起動 ログイン 2. リダイレクトによりOAuth 認可を要求 検証を うための RS の登録 3. ユーザー認証を実 4. バックエンドAPIアクセス用のアクセストークンを返却 トークンの権限設定 (Scope) 登録 RS 5. アクセストークンをつけてバックエンドAPIにアクセス アクセストークンを検証するリクエスト 6.~7. アクセストークンの情報を確認 ( ユーザー Scope 有効期限 など ) 8. バックエンド API が情報を使ってモバイルウェブが動作 ブラウザ Client 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 26
単純にアクセストークンを取得するだけならライブラリ読み込み +100 弱の JavaScript コードで実現可能 一部抜粋 <script src="oidc-client.js"></script> <script> var settings = { authority: 'https://example.com/oauth/v2/authz', client_id: 'SampleClientId', redirect_uri: 'https://rp.example.com/', response_type: 'token', scope: 'read write' }; var manager = new Oidc.UserManager(settings); パラメータの設定 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 27
単純にアクセストークンを取得するだけならライブラリ読み込み +100 弱の JavaScript コードで実現可能 一部抜粋 function authorizationrequest() { manager.signinredirect() ; } if (window.location.hash.indexof('#state=') == 0 window.location.hash.indexof('&state=') > 0) { manager.signinredirectcallback().then(function (u) { // ログイン成功時処理 }).catch(function (e) { // ログイン失敗時処理 }) ; } ボタン選択時に呼び出されるように設定 認可レスポンス返却時の処理 トークンの検証処理等はライブラリ内で われる 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 28
モバイルウェブでのバックエンド API アクセス認可 OAuth 2.0 Implicit Grant を用いたバックエンド API へのアクセス認可 1 モバイルウェブを Client として登録 JavaScript のアプリケーションを Client にするための実装 3 モバイルウェブ (JavaScript) 2 4 5 8 認証 認可サーバー 6 7 バックエンド API AS 外部サービスの利用 SaaSが提供するモバイル 従業員向けサービス 顧客向けサービス 向けアプリを利用 モバイルウェブの開発と提供 ネイティブアプリの開発 提供 サードパーティとの連携 APIを提供し サードパーティ がアプリを開発 提供 1. ブラウザでモバイルウェブを起動 ログイン 2. リダイレクトによりOAuth 認可を要求 検証を うための RS の登録 3. ユーザー認証を実 4. バックエンドAPIアクセス用のアクセストークンを返却 トークンの権限設定 (Scope) 登録 RS 5. アクセストークンをつけてバックエンドAPIにアクセス アクセストークンを検証するリクエスト 6.~7. アクセストークンの情報を確認 ( ユーザー Scope 有効期限 など ) 8. バックエンド API が情報を使ってモバイルウェブが動作 ブラウザ Client 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 29
TokenIntrospection リクエスト Token Introspection レスポンス curl "https://ip.example.com/oauth/v2/token/introspect" -X POST -H "Content-Type:application/x-www-form-urlencoded" -H "Authorization: Basic U2FtcGxlUlNJRDpTYW1wbGVSU1NlY3JldA==" -d "token=sampleaccesstoken" -i' { "active": true, ResourceID, Secret の Basic 認証ヘッダ 検証したいアクセストークン "client_id": "Gvg5PtkkPIHpPRiAXCZluxcHYaSrGO8q", "token_type": "Bearer", "scope": [ "read", "write" ], "sub": "Azv9E0aLI1s6JVbAuzCAzPR9k2b0KiZQyOxJiuPLiy52", "iss": "https://ip.example.com/oauth/v2", "exp": 1507803616, "iat": 1507800016, "extension_field": "" } 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 30
TokenIntrospection リクエスト curl "https://ip.example.com/oauth/v2/token/introspect" -X POST -H "Content-Type:application/x-www-form-urlencoded" -H "Authorization: Basic U2FtcGxlUlNJRDpTYW1wbGVSU1NlY3JldA==" -d "token=sampleaccesstoken" -i' Token Introspection レスポンス { "active": true, "client_id": "Gvg5PtkkPIHpPRiAXCZluxcHYaSrGO8q", "token_type": "Bearer", "scope": [ "read", "write" ], "sub": "Azv9E0aLI1s6JVbAuzCAzPR9k2b0KiZQyOxJiuPLiy52", "iss": "https://ip.example.com/oauth/v2", "exp": 1507803616, "iat": 1507800016, "extension_field": "" } 許可された権限 期限 ユーザの識別子 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 31
モバイルウェブアプリケーションの例 ユーザ属性登録 保管 スケジュール管理アプリ スケジュール API 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 32
モバイルウェブアプリケーションの例 ユーザ属性要求 スケジュール管理アプリ スケジュール API 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 33
モバイルウェブでのバックエンド API アクセス認可 OAuth 2.0 Client Credentials Grant を用いたバックエンド API からのアクセス認可とユーザ情報取得 1 3 モバイルウェブ (JavaScript) ブラウザ 2 4 アクセストークンを要求するリクエスト 5 8 6 認証 認可 RS サーバー 7 9 10 11 AS 12 バックエンド API Client 外部サービスの利用 SaaSが提供するモバイル 従業員向けサービス 顧客向けサービス 向けアプリを利用 モバイルウェブの開発と提供 ネイティブアプリの開発 提供 サードパーティとの連携 APIを提供し サードパーティ がアプリを開発 提供 1. ブラウザでモバイルウェブを起動 ログイン 2. リダイレクトにより OAuth 認可を要求 3. ユーザー認証を実 ユーザ情報を取得するためのリクエスト 4. バックエンドAPIアクセス用のアクセストークンを返却 5. アクセストークンをつけてバックエンド API にアクセス 6.~7. アクセストークンの情報を確認 ( ユーザー Scope 有効期限 など ) 8. バックエンド API が情報を使ってモバイルウェブが動作 9.~10. バックエンド API が OAuth 認可を要求 11.~12. バックエンド API がユーザ属性を要求 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 34
トークンリクエスト curl "https://ip.example.com/oauth/v2/token" -X POST -H "Content-Type:application/x-www-form-urlencoded" -H "Authorization: Basic U2FtcGxlQ2xpZW50SUQ6U2FtcGxlQ2xpZW50U2VjcmV0" -d "grant_type=client_credentials&scope=tsipacouunt:get" クライアント用のトークンをリクエスト ユーザ取得のための権限を要求 トークンレスポンス { "access_token":"sampleaccesstoken", "token_type":"bearer", "expires_in":"600" } 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 35
ユーザリクエスト curl "https://ip.example.com/account/v2/users/sampleuserid" -X GET -H "Content-Type:application/scim+json" -H "Authorization: Bearer SampleAccessToken" ユーザレスポンス 取得したアクセストークンでユーザ情報を要求 { "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:user" ], "id": "SampleUserId", "username": "SampleUser", "nickname": "sample", "active": true, 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 36
認証 アクセス認可の実装の考え方 従業員向けサービス 顧客向けサービス 外部サービスの利 SaaS が提供するモバイル向けアプリを利用 OpenID Connect や SAML を使った SaaS への SSO モバイルウェブの開発と提供 ネイティブアプリの開発 提供 OAuth 2.0 Implicit Grant を用いたバックエンド API へのアクセス認可 OAuth 2.0 for Native Apps のプラクティスを用いたバックエンド API へのアクセス認可 サードパーティとの連携 API を提供し サードパーティがアプリを開発 提供 OAuth 2.0 を用いた API 連携時認証 アクセス認可 Implicit, Authz Code, Authz Code+PKCE (OIDF FAPI WG の動向の考慮も必要 ) 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 37
ネイティブアプリでのバックエンド API アクセス認可 OAuth 2.0 for Native Apps のプラクティスを用いたバックエンド API へのアクセス認可 Authz Code Grant の利用 ( トークンの更新も可 ) アプリ内ブラウザの使用 PKCE の利用による Code 横取りの予防 1 3 アプリ内ブラウザ 5 ネイティブアプリ 2 4 Client 7 6 10 認証 認可サーバー 8 9 バックエンド API AS RS 外部サービスの利用 SaaSが提供するモバイル 従業員向けサービス 顧客向けサービス 向けアプリを利用 モバイルウェブの開発と提供 ネイティブアプリの開発 提供 サードパーティとの連携 APIを提供し サードパーティ がアプリを開発 提供 1. ネイティブアプリを起動 ログイン 2. アプリ内ブラウザを使い OAuth 認可を要求 (PKCE を併用 ) 3. ユーザー認証を実 4. アクセストークンを取得するための Code を返却 5. アプリ内ブラウザからネイティブアプリに Code を返却 6. Code をアクセストークンに交換 (PKCE を併用 ) 7. アクセストークンをつけてバックエンド API にアクセス 8.~9. アクセストークンの情報を確認 ( ユーザー Scope 有効期限 など ) 10. バックエンド API が情報を使ってネイティブアプリが動作 バックエンド API の振る舞いは モバイルウェブ ネイティブアプリで共通 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 38
ネイティブアプリでのバックエンド API アクセス認可 OAuth 2.0 for Native Apps のプラクティスを用いたバックエンド API へのアクセス認可 Authz Code Grant の利用 ( トークンの更新も可 ) アプリ内ブラウザの使用 PKCE の利用による Code 横取りの予防 1 3 2 4 ネイティブアプリケーションを OAuth Client にするための実装方法 アプリ内ブラウザ 5 ネイティブアプリ Client 7 6 10 認証 認可サーバー 8 9 バックエンド API AS RS 外部サービスの利用 SaaSが提供するモバイル 従業員向けサービス 顧客向けサービス 向けアプリを利用 モバイルウェブの開発と提供 ネイティブアプリの開発 提供 サードパーティとの連携 APIを提供し サードパーティ がアプリを開発 提供 1. ネイティブアプリを起動 ログイン 2. アプリ内ブラウザを使い OAuth 認可を要求 (PKCE を併用 ) 3. ユーザー認証を実 4. アクセストークンを取得するための Code を返却 5. アプリ内ブラウザからネイティブアプリに Code を返却 6. Code をアクセストークンに交換 (PKCE を併用 ) 7. アクセストークンをつけてバックエンド API にアクセス 8.~9. アクセストークンの情報を確認 ( ユーザー Scope 有効期限 など ) 10. バックエンド API が情報を使ってネイティブアプリが動作 バックエンド API の振る舞いは モバイルウェブ ネイティブアプリで共通 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 39
ファイル名 AuthStateManager.java build.gradle MainActivity.java TokenActivity.java 説明 ユーザの認可状態を管理するライブラリ ライブラリの入手先は AppAuth-Android Android Studio のパッケージに同梱されている Java 環境におけるビルドシステム 認可サービスへ接続するための設定をして 認可リクエストを送信する画 認可レスポンスを受け取り 認可コードとトークンを交換する また取得した Access Token を使用して API にアクセスする画 AppAuth-Android: https://github.com/openid/appauth-android 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 40
AppAuth-Android 内にサンプルの実装有りその中のどこを使えば自社アプリに組み込めるかについては弊社でも実装ガイドの準備有り 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 41
認証 アクセス認可の実装の考え方 従業員向けサービス 顧客向けサービス 外部サービスの利 SaaS が提供するモバイル向けアプリを利用 OpenID Connect や SAML を使った SaaS への SSO モバイルウェブの開発と提供 ネイティブアプリの開発 提供 OAuth 2.0 Implicit Grant を用いたバックエンド API へのアクセス認可 OAuth 2.0 for Native Apps のプラクティスを用いたバックエンド API へのアクセス認可 サードパーティとの連携 API を提供し サードパーティがアプリを開発 提供 OAuth 2.0 を用いた API 連携時認証 アクセス認可 Implicit, Authz Code, Authz Code+PKCE (OIDF FAPI WG の動向の考慮も必要 ) 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 42
AS(Authorization Server) 認可サーバ Client With アクセストークン RS(Resource Server) アプリケーション API Call API サービス 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 43
AS(Authorization Server) 認可サーバ Client アプリケーション API Call With アクセストークン RS(Resource Server) API サービス ここまで話した内容に比べるとクライアントと API サービスの信頼関係が浅い 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 44
異なるレベルの API 提供に対応できる API 連携認証システム機能の必要性 外部サービスの利用 SaaSが提供するモバイル 従業員向けサービス 顧客向けサービス 向けアプリを利用 モバイルウェブの開発と提供 ネイティブアプリの開発 提供 サードパーティとの連携 APIを提供し サードパーティ がアプリを開発 提供 API 提供が進むと提供側の意図と矛盾が生じない認証 認可が課題となる 使う Scope, 有効時間 認証方式 などを設定 ( 利用側の意図 ) 使う Scope, 有効時間 認証方式 などを設定 ( 提供する側の意図 ) 重要情報へのアクセス 重要な操作の実 時は有効時間を制限 多要素認証や再認証を要求するなど API のレベルに合わせた認証 認可が必要に Client Scope Resource (API) client_a app1:read api.1 アプリ 1 client_b app1:write api.2 api.3 client_c app2:funca app2:funcb api.1 api.2 api.3 アプリ 2 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 45
Client と RS の要求によって発生する矛盾 スケジュール管理 API を使ってスケジュール管理アプリを作りたい 一回認証したら 時間使いたい いろんな API を呼び出したい 閲覧は 時間できても良い 他の の予定を変更する場合は一定期間で再度認可を いたい アプリケーション APIサービス実装 API read: 予定閲覧 write: 予定登録 special: 他の の予定の変更可 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 46
Client と RS の要求によって発生する矛盾 スケジュール管理 API を使ってスケジュール管理アプリを作りたい read も write も special も使いたい! 利便性の都合上期間も めで! 認可サーバ readと write と special の権限で Scopeを作って欲しい! それぞれ条件は! アプリケーション APIサービス実装 API read: 予定閲覧 write: 予定登録 special: 他の の予定の変更可 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 47
Client と RS の要求によって発生する矛盾 スケジュール管理 API を使ってスケジュール管理アプリを作りたい read も write も special も使いたい! 利便性の都合上期間も めで! 認可サーバ readと write と special の権限で Scopeを作って欲しい! それぞれ条件は! アプリケーション APIサービス実装 API read: 予定閲覧 write: 予定登録 special: 他の の予定の変更可 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 48
期限を めにセット (1 時間 ) このスコープではリフレッシュトークン利用許可 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 49
期限を短めにセット (10 分 ) このスコープではリフレッシュトークンを使ってほしくない 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 50
Client と RS の要求によって発生する矛盾 スケジュール管理 API を使ってスケジュール管理アプリを作りたい read も write も special も使いたい! 利便性の都合上期間も めで! 認可サーバ readと write と special の権限で Scopeを作って欲しい! それぞれ条件は! アプリケーション APIサービス実装 API read: 予定閲覧 write: 予定登録 special: 他の の予定の変更可 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 51
リフレッシュトークンを使いたい read と special の Scope を利用したい 期限は めにしたい (1 時間 ) 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 52
Client が read の Scope を要求した際のトークンレスポンス { "access_token":"sampleaccesstoken", "token_type":"bearer", "expires_in":"3600", "refresh_token":"samplerefreshtoken" } Client が read と special の Scope を要求した際のトークンレスポンス { "access_token":"sampleaccesstoken", "token_type":"bearer", "expires_in":"600" } 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 53
おわりに 認可処理の中 の具体イメージ 連携されている情報はどのようなものなのか 実装の簡単なイメージ 課題に対する実現の具体イメージ モバイルウェブからバックエンドAPIを叩く際の認可 ネイティブアプリからバックエンドAPIを叩く際の認可 サードパーティからAPIを叩く際の認可 2017 OGIS-RI Co., Ltd. 2017/10/19 モバイル オープン API を活用するための認証基盤の実装例 54
ご清聴ありがとうございました お問い合わせ先 株式会社オージス総研 TEL: 03-6712-1201 / 06-6871-7998 mail: info@ogis-ri.co.jp 2017 OGIS-RI Co., Ltd. 55