SlideShare a Scribd company logo
OAuth 2.0 による
Web API の保護
2016.12.21
Japan Web API Community #1
Naohiro Fujie
@phr_eidentity
自己紹介
• Blog
• IdM実験室:http://idmlab.eidentity.jp
• Modules(codeplex)
• Generic REST MA for FIM/MIM:https://restmafim.codeplex.com/
• 記事 / 書籍
• 記事 : @IT/企業のID管理/シングルサインオンの新しい選択肢「IDaaS」の活用 他
• 監訳 : クラウド時代の認証基盤 Azure Active Directory 完全解説
• 共著 : クラウド環境におけるアイデンティティ管理ガイドライン
• その他
• JNSA アイデンティティ管理WG
• OpenID Foundation Japan 教育・翻訳WG、エンタープライズ・アイデンティティWG
• Microsoft MVP for Enterprise Mobility(Jan 2010 -)
© 2016 Naohiro Fujie 2
Agenda
1. WebAPI に求められるセキュリティ
• 利用者から見た課題
• API 提供者から見た課題
2. OAuth 2.0 の概要と課題への対応
3. デモ
• Azure AD による WebAPI の保護
• ADAL による API クライアントの実装
© 2016 Naohiro Fujie 3
WebAPI に求められる
セキュリティ
© 2016 Naohiro Fujie 4
WebAPI 利用・提供時の課題
• いかにして API クライアントを信頼するか?
• 利用者の視点
• API を通して提供される自身のデータを悪用されたくない
• API 提供者の視点
• 誰が利用しているのかを明確にしたい(例:課金)
• 人の識別
• API クライアントの識別
• 提供するデータを悪用されたくない
© 2016 Naohiro Fujie 5
http(s)でインターネット上に
公開しているので、Firewall
等による分離は難しい
API クライアントは便利だけ
ど、間接的に自身のデータへ
アクセスされるのは怖い
API の基本は単機能。ユーザ
認証・認可機能を API 毎に開
発したくない
適切な API クライアントから
だけアクセスさせたい
利用者から見た課題
© 2016 Naohiro Fujie 6
従来の Web アプリケーションの利用
• ユーザ自身によりコンテキストの使い分けが可能
• Facebookの友達からはアプリA、Twitter上のアイデンティティとの紐
づけをされても良いが、反対は嫌
• 情報は二重管理
© 2016 Naohiro Fujie 7
実名、電話番号を登録
ニックネームを登録
Twitterには同僚に知られたく
ない性癖を投稿しているので、
実名は登録したくない
Facebookの友達は近しい人
ばかりなので、実名や電話番
号を登録しておきたい
アプリA
ニックネームと電話番号を登録
アプリAにはニックネームと
電話番号を登録したい・・・
二重管理は面倒
上手く API を使って二重管理をやめたい
• アプリにFacebookとTwitterのIDとパスワードを登録する?
© 2016 Naohiro Fujie 8
実名、電話番号を登録
ニックネームを登録
アプリA
(APIクラ
イアント)
ニックネームと
電話番号を使わせたい
ユーザのID/PWDを使って
Facebookへアクセス
複数のサービスに同じ情報を
登録するのは面倒なので便利
なマッシュアップ・アプリを
使いたい
ユーザのID/PWDを使って
Twitterへアクセス
パスワード?
• アプリ上に個人のパスワードを登録するのは・・・
© 2016 Naohiro Fujie 9
実名、電話番号を登録
ニックネームを登録
アプリA
(APIクラ
イアント)
ニックネームと
電話番号を使わせたい
ユーザのID/PWDを使って
Facebookへアクセス
ユーザのID/PWDを使って
Twitterへアクセス
パスワードを登録しておくの
はかなり嫌・・・
漏えい?変更時の運用?
コンテキストが混ざる
• せっかく分けていたコンテキストがアプリで混ざる
© 2016 Naohiro Fujie 10
実名、電話番号を登録
ニックネームを登録
アプリA
(APIクラ
イアント)
ニックネームと
電話番号を使わせたい
電話番号だけが欲しいのに、
実名もとれてしまう?
このアプリ上でコンテキスト
が混ざってしまう
課題:パスワード、コンテキスト
パスワードを使わずに
どうやってユーザの代わりに
「望んだ範囲に限定して」
アクセスさせるか?
© 2016 Naohiro Fujie 11
実名、電話番号を登録
ニックネームを登録
アプリA
(APIクラ
イアント)
ニックネームと
電話番号を使わせたい
パスワードを登録しておくの
はかなり嫌・・・
漏えい?変更時の運用?
このアプリ上でコンテキスト
が混ざってしまう
API 提供者から見た課題
© 2016 Naohiro Fujie 12
従来の Web アプリケーションの利用
• ユーザが直接アプリを利用していたので識別は簡単
• 個々に認証機能や UI 開発が必要
© 2016 Naohiro Fujie 13
直接ログイン
直接ログイン
アプリA
直接ログイン
個々に運用・管理。
識別は簡単だが、個々に機能
開発が必要
API を公開してシンプルにしたい
• ユーザが直接アプリを利用していたので識別は簡単
• 個々に認証機能や UI 開発が必要
© 2016 Naohiro Fujie 14
アプリA
(APIクラ
イアント) シンプルな機能・データ提供
だけを API で行いたい
利用
アプリ経由で利用
アプリ経由で利用
アクセス元の特定・真贋が難しい
• アクセス元アプリの信頼性の担保が難しい
© 2016 Naohiro Fujie 15
アプリA
(APIクラ
イアント) 誰がどのアプリ経由が使って
いるのかわからない?
利用
アプリ経由で利用
アプリ経由で利用このアプリは信頼できるの
か?
特定アプリ以外からの
アクセスを防げない?
課題:利用元の特定と管理
• どうやって「許可された」
アプリからのみ
アクセスを許可
するか?
© 2016 Naohiro Fujie 16
アプリA
(APIクラ
イアント)
利用
アプリ経由で利用
アプリ経由で利用このアプリは信頼できるの
か?
特定アプリ以外からの
アクセスを防げない?
誰がどのアプリ経由が使って
いるのかわからない?
OAuth 2.0 の概要と
課題への対応
© 2016 Naohiro Fujie 17
OAuth の概要と基本的な考え方
• 目的
• リソースへのアクセスを安全に認可(委譲)すること
• 基本的な考え方
• リソース(API を通して提供される機能やデータ)の持ち主はユーザ
である
• ユーザの同意に基づき API クライアントに対してリソースへのアクセ
ス権限を認可(委譲)する
• 認証(検証)された API クライアントに対してのみリソースを提供す
る
© 2016 Naohiro Fujie 18
構成要素
• 保護対象リソース
• API を経由して提供される機能やデータなどのリソース
• リソース・オーナー
• 保護対象となるリソースの持ち主(ユーザ)
• クライアント
• 保護対象リソースへアクセスする主体(API クライアント)
• 認可サーバ
• 保護対象リソースへのアクセスを認可するためのサーバ
© 2016 Naohiro Fujie 19
保護対象リソース
(API 、データ)
各構成要素の関係性
© 2016 Naohiro Fujie 20
クライアント
認可サーバ
リソース・オーナー
所有
登録
認可 利用
登録
保護
利用
保護対象リソース
(API 、データ)
実際の動き(認可コードグラント)
© 2016 Naohiro Fujie 21
クライアント
認可サーバ
リソース・オーナー
所有
登録
認可 利用
登録
保護
利用
1.利用したい
2.認可要求
3.認可要求
(同意)
4.認可コードの
発行
5.認可コードの
提供
6.認可コードと
アクセストークン
の交換
8.アクセストー
クンの検証
7.アクセストー
クンの提示
9.リソースの
提供
シーケンス(認可コードグラント)
© 2016 Naohiro Fujie 22
リソース・オーナー
(利用者/UserAgent)
クライアント
(アプリケーション)
認可サーバ
(OAuthサーバ)
保護対象リソース
(API・データ)
フロー開始
ユーザ認証・同意
認可エンドポイントへリダイレクト
(クライアントID、スコープを含む)
クライアントへリダイレクト
(認可コードを含む)
アクセストークンを要求
(認可コード、クライアントID、Secretを含む)
アクセストークンを発行
リソース要求(アクセストークンを含む)
アクセストークンの検証
リソースの提供
クライアントに許可する範囲
(スコープ)指定が可能
オーナー(ユーザ)の同意に
基づくアクセスが可能
許可されたクライアントのみ
からアクセスする為の認証
パスワードではなく、アクセ
ストークンでリソース利用
アクセストークンから利用
者を確認(JWTの場合)
ポイント
• スコープの指定とオーナーによる同意
• スコープが変わると再同意とアクセス・トークンの再取得が必要
• 登録されたクライアントだけにトークンを発行
• クライアントIDとクライアントSecretによる認証
• 期限付きのコード・トークンを利用(パスワードの保存なし)
• 認可コード
• アクセス・トークンとの交換用(ごく短時間有効)
• アクセス・トークン
• リソースへのアクセスに利用(短時間有効)
• リフレッシュ・トークン
• アクセス・トークンとの交換用(それなりの期間有効)
• アクセス・トークンの期限切れが発生した際に再度オーナーのインタラクションが無しにアク
セス・トークンを再取得
• アクセス・トークンの使い方により利用ユーザの特定も可能
• JWT(JSON Web Token)を利用する場合(Azure AD はこれ)
© 2016 Naohiro Fujie 23
デモ
Azure Active Directory による WebAPI の保護
Active Directory Authentication Library による API クライアントの実装
© 2016 Naohiro Fujie 24
保護対象リソース
(ASP.NET WebAPI)
デモ構成
© 2016 Naohiro Fujie 25
クライアント
(ASP.NET MVC
+ADAL)
認可サーバ
(Azure AD)
リソース・オーナー
(Azure AD 利用者)
所有
登録
認可 利用
登録
保護
利用
Azure AD の OAuth と ADAL
• Azure AD(Azure Active Directory)の OAuth
• Facebook などコンシューマの OAuth 実装との差は「Azure AD 以
外のリソース」へのアクセスを認可する点
※Facebook などは自身が OAuth サーバでありリソースサーバ
• そのため、Resource パラメータが必須となっている
• ADAL(Active Directory Authentication Library)
• Azure AD、AD FS 向けの認証ライブラリ
• .NET 以外にも Java や JavaScript、Ruby、objective-C などに対応
• OAuth、OpenID Connect、ws-federation への対応
• トークンのキャッシュの自動管理(必要に応じてリフレッシュ・トー
クンでアクセス・トークンを再取得)など、超便利
© 2016 Naohiro Fujie 26
WebAPI の作成
© 2016 Naohiro Fujie 27
プロジェクトの作成
© 2016 Naohiro Fujie 28
Web API を選択
© 2016 Naohiro Fujie 29
Azure ADドメインを指定
© 2016 Naohiro Fujie 30
完成
© 2016 Naohiro Fujie 31
Azure ADに自動で登録される
© 2016 Naohiro Fujie 32
※テスト用)非HTTPS化しておく
© 2016 Naohiro Fujie 33
API Client の作成
© 2016 Naohiro Fujie 34
プロジェクトの作成
© 2016 Naohiro Fujie 35
MVC を選択
© 2016 Naohiro Fujie 36
Azure ADドメインを指定
© 2016 Naohiro Fujie 37
完成
© 2016 Naohiro Fujie 38
Azure ADに自動で登録される
© 2016 Naohiro Fujie 39
取り敢えず実行するとユーザ認証
© 2016 Naohiro Fujie 40
プロファイル取得に関する同意
(Azure AD リソースへのアクセス)
© 2016 Naohiro Fujie 41
サインイン完了
© 2016 Naohiro Fujie 42
API アクセス
© 2016 Naohiro Fujie 43
API Client ⇒ WebAPI へアクセス許可
© 2016 Naohiro Fujie 44
登録された WebAPI を選択
© 2016 Naohiro Fujie 45
スコープを選択
© 2016 Naohiro Fujie 46
許可設定
© 2016 Naohiro Fujie 47
API Client のキーを生成(client_secret)
© 2016 Naohiro Fujie 48
保存するとキーが表示される
© 2016 Naohiro Fujie 49
nuget で ADAL をインストール
© 2016 Naohiro Fujie 50
Web.config に必要な情報を入れる
© 2016 Naohiro Fujie 51
Web.config に設定する情報
• appSetting に以下を追加
• Azure AD ポータルで取得したAPI Client のキー
• <add key="ida:ClientSecret"
value="WrVNTezVxZBjXPQBEMQ6VhKuJ9Ell1+An1cLCHZGmAo=" />
• アクセス先の API の識別子(リソースID)
• <add key="ida:ResourceId"
value="https://pharaoh.onmicrosoft.com/testWebAPI" />
© 2016 Naohiro Fujie 52
Startup.Auth へのコード追加
• Using ディレクティブ
• using Microsoft.IdentityModel.Clients.ActiveDirectory;
• OpenIdConnectAuthenticationOptions
// WebAPIリソースへのアクセスを要求
Resource = ConfigurationManager.AppSettings["ida:ResourceId"],
Notifications = new OpenIdConnectAuthenticationNotifications
{
// ADALのトークンキャッシュにアクセストークンを乗せるため、認可コードでアクセストークンを取得
AuthorizationCodeReceived = async (context) =>
{
string code = context.Code;
AuthenticationContext authContext = new AuthenticationContext(authority);
AuthenticationResult result = await authContext.AcquireTokenByAuthorizationCodeAsync(
code,
new Uri(postLogoutRedirectUri),
new ClientCredential(
clientId,
ConfigurationManager.AppSettings["ida:ClientSecret"]));
}
}
© 2016 Naohiro Fujie 53
HomeController へのコード追加
• Using ディレクティブ
• using System.Configuration;
• using Microsoft.IdentityModel.Clients.ActiveDirectory;
• using System.Net.Http;
• using System.Net.Http.Headers;
© 2016 Naohiro Fujie 54
HttpClient httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", result.AccessToken);
HttpResponseMessage response =
httpClient.GetAsync("http://localhost:1867/api/values").Result;
if (response.IsSuccessStatusCode){
ViewBag.Message =
response.Content.ReadAsStringAsync().Result;
}
} catch (AdalException ex) {
ViewBag.Message = ex.Message;
}
return View();
}
public async System.Threading.Tasks.Task<ActionResult> About()
{
string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
string clientSecret = ConfigurationManager.AppSettings["ida:ClientSecret"];
string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];
string tenantId = ConfigurationManager.AppSettings["ida:TenantId"];
string authority = aadInstance + tenantId;
var resourceId = ConfigurationManager.AppSettings["ida:ResourceId"];
try
{
ClientCredential credential = new ClientCredential(clientId, clientSecret);
AuthenticationContext authContext = new AuthenticationContext(authority);
AuthenticationResult result =
await authContext.AcquireTokenSilentAsync(
resourceId,
credential,
UserIdentifier.AnyUser);
© 2016 Naohiro Fujie 55
API Client を起動すると WebAPI への
アクセスについて同意を求められる
© 2016 Naohiro Fujie 56
サインイン完了
© 2016 Naohiro Fujie 57
WebAPI を実行
© 2016 Naohiro Fujie 58
参考資料
• 脱オンプレミス! クラウド時代の認証基盤 Azure Active
Directory 完全解説
• 著 : Vittorio Bertocci
• 監訳 : 安納 順一、富士榮 尚寛
• ¥3,996
• Kindle 版もあり〼
• http://amzn.to/2h01o2h
© 2016 Naohiro Fujie 59
まとめ
• OAuth を使って安全に API を使いましょう
• 利用者にとって
• パスワードの氾濫を防ぐ
• 権限の絞り込みを適切に行う
• API 提供者にとって
• 適切な API クライアントへ提供する
• Azure AD、ADAL を使うと結構簡単に実装できます。
• 本買ってね
© 2016 Naohiro Fujie 60

More Related Content

What's hot (20)

SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)
Naohiro Fujie
 
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
Hitachi, Ltd. OSS Solution Center.
 
Pod Security AdmissionによるKubernetesのポリシー制御(Kubernetes Novice Tokyo #21 発表資料)
Pod Security AdmissionによるKubernetesのポリシー制御(Kubernetes Novice Tokyo #21 発表資料)Pod Security AdmissionによるKubernetesのポリシー制御(Kubernetes Novice Tokyo #21 発表資料)
Pod Security AdmissionによるKubernetesのポリシー制御(Kubernetes Novice Tokyo #21 発表資料)
NTT DATA Technology & Innovation
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
Nov Matake
 
ブロックチェーンを用いた自己主権型デジタルID管理
ブロックチェーンを用いた自己主権型デジタルID管理ブロックチェーンを用いた自己主権型デジタルID管理
ブロックチェーンを用いた自己主権型デジタルID管理
LFDT Tokyo Meetup
 
今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID
Naohiro Fujie
 
Keycloakの最近のトピック
Keycloakの最近のトピックKeycloakの最近のトピック
Keycloakの最近のトピック
Hitachi, Ltd. OSS Solution Center.
 
FIDO認証によるパスワードレスログイン実装入門
FIDO認証によるパスワードレスログイン実装入門FIDO認証によるパスワードレスログイン実装入門
FIDO認証によるパスワードレスログイン実装入門
Yahoo!デベロッパーネットワーク
 
OpenID ConnectとSCIMの標準化動向
OpenID ConnectとSCIMの標準化動向OpenID ConnectとSCIMの標準化動向
OpenID ConnectとSCIMの標準化動向
Tatsuo Kudo
 
20231109_OpenID_TechNight_OpenID_Federation.pdf
20231109_OpenID_TechNight_OpenID_Federation.pdf20231109_OpenID_TechNight_OpenID_Federation.pdf
20231109_OpenID_TechNight_OpenID_Federation.pdf
OpenID Foundation Japan
 
Azure ADとIdentity管理
Azure ADとIdentity管理Azure ADとIdentity管理
Azure ADとIdentity管理
Naohiro Fujie
 
Kongの概要と導入事例
Kongの概要と導入事例Kongの概要と導入事例
Kongの概要と導入事例
briscola-tokyo
 
OpenID Connect 4 SSI (DIFCon F2F)
OpenID Connect 4 SSI (DIFCon F2F)OpenID Connect 4 SSI (DIFCon F2F)
OpenID Connect 4 SSI (DIFCon F2F)
Torsten Lodderstedt
 
分散型IDと検証可能なアイデンティティ技術概要
分散型IDと検証可能なアイデンティティ技術概要分散型IDと検証可能なアイデンティティ技術概要
分散型IDと検証可能なアイデンティティ技術概要
Naohiro Fujie
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
Hiroyuki Wada
 
いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authlete
いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authleteいまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authlete
いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authlete
Tatsuo Kudo
 
Keycloakのステップアップ認証について
Keycloakのステップアップ認証についてKeycloakのステップアップ認証について
Keycloakのステップアップ認証について
Hitachi, Ltd. OSS Solution Center.
 
シングルサインオンの歴史とSAMLへの道のり
シングルサインオンの歴史とSAMLへの道のりシングルサインオンの歴史とSAMLへの道のり
シングルサインオンの歴史とSAMLへの道のり
Shinichi Tomita
 
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
NTT DATA Technology & Innovation
 
OpenID Connect のビジネスチャンス
OpenID Connect のビジネスチャンスOpenID Connect のビジネスチャンス
OpenID Connect のビジネスチャンス
OpenID Foundation Japan
 
SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)
Naohiro Fujie
 
Pod Security AdmissionによるKubernetesのポリシー制御(Kubernetes Novice Tokyo #21 発表資料)
Pod Security AdmissionによるKubernetesのポリシー制御(Kubernetes Novice Tokyo #21 発表資料)Pod Security AdmissionによるKubernetesのポリシー制御(Kubernetes Novice Tokyo #21 発表資料)
Pod Security AdmissionによるKubernetesのポリシー制御(Kubernetes Novice Tokyo #21 発表資料)
NTT DATA Technology & Innovation
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
Nov Matake
 
ブロックチェーンを用いた自己主権型デジタルID管理
ブロックチェーンを用いた自己主権型デジタルID管理ブロックチェーンを用いた自己主権型デジタルID管理
ブロックチェーンを用いた自己主権型デジタルID管理
LFDT Tokyo Meetup
 
今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID
Naohiro Fujie
 
OpenID ConnectとSCIMの標準化動向
OpenID ConnectとSCIMの標準化動向OpenID ConnectとSCIMの標準化動向
OpenID ConnectとSCIMの標準化動向
Tatsuo Kudo
 
20231109_OpenID_TechNight_OpenID_Federation.pdf
20231109_OpenID_TechNight_OpenID_Federation.pdf20231109_OpenID_TechNight_OpenID_Federation.pdf
20231109_OpenID_TechNight_OpenID_Federation.pdf
OpenID Foundation Japan
 
Azure ADとIdentity管理
Azure ADとIdentity管理Azure ADとIdentity管理
Azure ADとIdentity管理
Naohiro Fujie
 
Kongの概要と導入事例
Kongの概要と導入事例Kongの概要と導入事例
Kongの概要と導入事例
briscola-tokyo
 
OpenID Connect 4 SSI (DIFCon F2F)
OpenID Connect 4 SSI (DIFCon F2F)OpenID Connect 4 SSI (DIFCon F2F)
OpenID Connect 4 SSI (DIFCon F2F)
Torsten Lodderstedt
 
分散型IDと検証可能なアイデンティティ技術概要
分散型IDと検証可能なアイデンティティ技術概要分散型IDと検証可能なアイデンティティ技術概要
分散型IDと検証可能なアイデンティティ技術概要
Naohiro Fujie
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
Hiroyuki Wada
 
いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authlete
いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authleteいまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authlete
いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authlete
Tatsuo Kudo
 
シングルサインオンの歴史とSAMLへの道のり
シングルサインオンの歴史とSAMLへの道のりシングルサインオンの歴史とSAMLへの道のり
シングルサインオンの歴史とSAMLへの道のり
Shinichi Tomita
 
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
NTT DATA Technology & Innovation
 
OpenID Connect のビジネスチャンス
OpenID Connect のビジネスチャンスOpenID Connect のビジネスチャンス
OpenID Connect のビジネスチャンス
OpenID Foundation Japan
 

Viewers also liked (6)

ID管理/認証システム導入の理想と現実
ID管理/認証システム導入の理想と現実ID管理/認証システム導入の理想と現実
ID管理/認証システム導入の理想と現実
Naohiro Fujie
 
知らないと損するアプリ開発におけるStateMachineの活用法(full版)
知らないと損するアプリ開発におけるStateMachineの活用法(full版)知らないと損するアプリ開発におけるStateMachineの活用法(full版)
知らないと損するアプリ開発におけるStateMachineの活用法(full版)
Ken Morishita
 
The Social-Engineer Village at DEF CON 24 : Does Cultural Differences Become ...
The Social-Engineer Village at DEF CON 24 : Does Cultural Differences Become ...The Social-Engineer Village at DEF CON 24 : Does Cultural Differences Become ...
The Social-Engineer Village at DEF CON 24 : Does Cultural Differences Become ...
Tomohisa Ishikawa, CISSP, CSSLP, CISA, CISM, CFE
 
AWS Black Belt Online Seminar 2016 AWS Key Management Service
AWS Black Belt Online Seminar 2016 AWS Key Management Service AWS Black Belt Online Seminar 2016 AWS Key Management Service
AWS Black Belt Online Seminar 2016 AWS Key Management Service
Amazon Web Services Japan
 
capybara で快適なテスト生活を
capybara で快適なテスト生活をcapybara で快適なテスト生活を
capybara で快適なテスト生活を
Ryunosuke SATO
 
HLSについて知っていることを話します
HLSについて知っていることを話しますHLSについて知っていることを話します
HLSについて知っていることを話します
Moriyoshi Koizumi
 
ID管理/認証システム導入の理想と現実
ID管理/認証システム導入の理想と現実ID管理/認証システム導入の理想と現実
ID管理/認証システム導入の理想と現実
Naohiro Fujie
 
知らないと損するアプリ開発におけるStateMachineの活用法(full版)
知らないと損するアプリ開発におけるStateMachineの活用法(full版)知らないと損するアプリ開発におけるStateMachineの活用法(full版)
知らないと損するアプリ開発におけるStateMachineの活用法(full版)
Ken Morishita
 
AWS Black Belt Online Seminar 2016 AWS Key Management Service
AWS Black Belt Online Seminar 2016 AWS Key Management Service AWS Black Belt Online Seminar 2016 AWS Key Management Service
AWS Black Belt Online Seminar 2016 AWS Key Management Service
Amazon Web Services Japan
 
capybara で快適なテスト生活を
capybara で快適なテスト生活をcapybara で快適なテスト生活を
capybara で快適なテスト生活を
Ryunosuke SATO
 
HLSについて知っていることを話します
HLSについて知っていることを話しますHLSについて知っていることを話します
HLSについて知っていることを話します
Moriyoshi Koizumi
 
Ad

Similar to OAuth2.0によるWeb APIの保護 (20)

Authentication and Authorization of The Latest Keycloak
Authentication and Authorization of The Latest KeycloakAuthentication and Authorization of The Latest Keycloak
Authentication and Authorization of The Latest Keycloak
Hitachi, Ltd. OSS Solution Center.
 
FIWARE の ID 管理、アクセス制御、API 管理
FIWARE の ID 管理、アクセス制御、API 管理FIWARE の ID 管理、アクセス制御、API 管理
FIWARE の ID 管理、アクセス制御、API 管理
fisuda
 
Microsoft Azure のセキュリティ
Microsoft Azure のセキュリティMicrosoft Azure のセキュリティ
Microsoft Azure のセキュリティ
junichi anno
 
株式会社カサレアル 山本による講演「認証・認可におけるKeycloakの活用」の資料
株式会社カサレアル 山本による講演「認証・認可におけるKeycloakの活用」の資料株式会社カサレアル 山本による講演「認証・認可におけるKeycloakの活用」の資料
株式会社カサレアル 山本による講演「認証・認可におけるKeycloakの活用」の資料
CASAREAL, Inc.
 
認証技術、デジタルアイデンティティ技術の最新動向
認証技術、デジタルアイデンティティ技術の最新動向認証技術、デジタルアイデンティティ技術の最新動向
認証技術、デジタルアイデンティティ技術の最新動向
Tatsuo Kudo
 
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Hitachi, Ltd. OSS Solution Center.
 
KeycloakでAPI認可に入門する
KeycloakでAPI認可に入門するKeycloakでAPI認可に入門する
KeycloakでAPI認可に入門する
Hitachi, Ltd. OSS Solution Center.
 
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_insideAuthlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
Tatsuo Kudo
 
Azure AD B2CにIdPを色々と繋いでみる
Azure AD B2CにIdPを色々と繋いでみるAzure AD B2CにIdPを色々と繋いでみる
Azure AD B2CにIdPを色々と繋いでみる
Naohiro Fujie
 
Amazon QuickSight の組み込み方法をちょっぴりDD
Amazon QuickSight の組み込み方法をちょっぴりDDAmazon QuickSight の組み込み方法をちょっぴりDD
Amazon QuickSight の組み込み方法をちょっぴりDD
Amazon Web Services Japan
 
Azure AD によるリソースの保護 how to protect and govern resources under the Azure AD
Azure AD によるリソースの保護 how to protect and govern resources under the Azure ADAzure AD によるリソースの保護 how to protect and govern resources under the Azure AD
Azure AD によるリソースの保護 how to protect and govern resources under the Azure AD
junichi anno
 
CLT-009_Windows 10 アプリとシングルサインオン ~Microsoft Passport の意義とその実装方法~
CLT-009_Windows 10 アプリとシングルサインオン ~Microsoft Passport の意義とその実装方法~CLT-009_Windows 10 アプリとシングルサインオン ~Microsoft Passport の意義とその実装方法~
CLT-009_Windows 10 アプリとシングルサインオン ~Microsoft Passport の意義とその実装方法~
decode2016
 
Introduction to application architecture on asp.net mvc
Introduction to application architecture on asp.net mvcIntroduction to application architecture on asp.net mvc
Introduction to application architecture on asp.net mvc
Atsushi Fukui
 
【日商USA】webinar 2022.6.24 RSAカンファレンス2022 フィードバック
【日商USA】webinar 2022.6.24 RSAカンファレンス2022 フィードバック【日商USA】webinar 2022.6.24 RSAカンファレンス2022 フィードバック
【日商USA】webinar 2022.6.24 RSAカンファレンス2022 フィードバック
Sojitz Tech-Innovation USA
 
Serverless AWS構成でセキュアなSPAを目指す
Serverless AWS構成でセキュアなSPAを目指すServerless AWS構成でセキュアなSPAを目指す
Serverless AWS構成でセキュアなSPAを目指す
Masayuki Kato
 
「Windows Phone アプリ と 認証」のまとめ
「Windows Phone アプリ と 認証」のまとめ「Windows Phone アプリ と 認証」のまとめ
「Windows Phone アプリ と 認証」のまとめ
junichi anno
 
「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #api
「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #api「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #api
「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #api
Tatsuo Kudo
 
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawawsOAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
Tatsuo Kudo
 
DevOps with Dynatrace
DevOps with DynatraceDevOps with Dynatrace
DevOps with Dynatrace
Harry Hiyoshi
 
How FIDO Works
How FIDO WorksHow FIDO Works
How FIDO Works
Keiko Itakura
 
FIWARE の ID 管理、アクセス制御、API 管理
FIWARE の ID 管理、アクセス制御、API 管理FIWARE の ID 管理、アクセス制御、API 管理
FIWARE の ID 管理、アクセス制御、API 管理
fisuda
 
Microsoft Azure のセキュリティ
Microsoft Azure のセキュリティMicrosoft Azure のセキュリティ
Microsoft Azure のセキュリティ
junichi anno
 
株式会社カサレアル 山本による講演「認証・認可におけるKeycloakの活用」の資料
株式会社カサレアル 山本による講演「認証・認可におけるKeycloakの活用」の資料株式会社カサレアル 山本による講演「認証・認可におけるKeycloakの活用」の資料
株式会社カサレアル 山本による講演「認証・認可におけるKeycloakの活用」の資料
CASAREAL, Inc.
 
認証技術、デジタルアイデンティティ技術の最新動向
認証技術、デジタルアイデンティティ技術の最新動向認証技術、デジタルアイデンティティ技術の最新動向
認証技術、デジタルアイデンティティ技術の最新動向
Tatsuo Kudo
 
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Hitachi, Ltd. OSS Solution Center.
 
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_insideAuthlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
Tatsuo Kudo
 
Azure AD B2CにIdPを色々と繋いでみる
Azure AD B2CにIdPを色々と繋いでみるAzure AD B2CにIdPを色々と繋いでみる
Azure AD B2CにIdPを色々と繋いでみる
Naohiro Fujie
 
Amazon QuickSight の組み込み方法をちょっぴりDD
Amazon QuickSight の組み込み方法をちょっぴりDDAmazon QuickSight の組み込み方法をちょっぴりDD
Amazon QuickSight の組み込み方法をちょっぴりDD
Amazon Web Services Japan
 
Azure AD によるリソースの保護 how to protect and govern resources under the Azure AD
Azure AD によるリソースの保護 how to protect and govern resources under the Azure ADAzure AD によるリソースの保護 how to protect and govern resources under the Azure AD
Azure AD によるリソースの保護 how to protect and govern resources under the Azure AD
junichi anno
 
CLT-009_Windows 10 アプリとシングルサインオン ~Microsoft Passport の意義とその実装方法~
CLT-009_Windows 10 アプリとシングルサインオン ~Microsoft Passport の意義とその実装方法~CLT-009_Windows 10 アプリとシングルサインオン ~Microsoft Passport の意義とその実装方法~
CLT-009_Windows 10 アプリとシングルサインオン ~Microsoft Passport の意義とその実装方法~
decode2016
 
Introduction to application architecture on asp.net mvc
Introduction to application architecture on asp.net mvcIntroduction to application architecture on asp.net mvc
Introduction to application architecture on asp.net mvc
Atsushi Fukui
 
【日商USA】webinar 2022.6.24 RSAカンファレンス2022 フィードバック
【日商USA】webinar 2022.6.24 RSAカンファレンス2022 フィードバック【日商USA】webinar 2022.6.24 RSAカンファレンス2022 フィードバック
【日商USA】webinar 2022.6.24 RSAカンファレンス2022 フィードバック
Sojitz Tech-Innovation USA
 
Serverless AWS構成でセキュアなSPAを目指す
Serverless AWS構成でセキュアなSPAを目指すServerless AWS構成でセキュアなSPAを目指す
Serverless AWS構成でセキュアなSPAを目指す
Masayuki Kato
 
「Windows Phone アプリ と 認証」のまとめ
「Windows Phone アプリ と 認証」のまとめ「Windows Phone アプリ と 認証」のまとめ
「Windows Phone アプリ と 認証」のまとめ
junichi anno
 
「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #api
「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #api「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #api
「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #api
Tatsuo Kudo
 
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawawsOAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
Tatsuo Kudo
 
DevOps with Dynatrace
DevOps with DynatraceDevOps with Dynatrace
DevOps with Dynatrace
Harry Hiyoshi
 
Ad

More from Naohiro Fujie (20)

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

OAuth2.0によるWeb APIの保護

  • 1. OAuth 2.0 による Web API の保護 2016.12.21 Japan Web API Community #1 Naohiro Fujie @phr_eidentity
  • 2. 自己紹介 • Blog • IdM実験室:http://idmlab.eidentity.jp • Modules(codeplex) • Generic REST MA for FIM/MIM:https://restmafim.codeplex.com/ • 記事 / 書籍 • 記事 : @IT/企業のID管理/シングルサインオンの新しい選択肢「IDaaS」の活用 他 • 監訳 : クラウド時代の認証基盤 Azure Active Directory 完全解説 • 共著 : クラウド環境におけるアイデンティティ管理ガイドライン • その他 • JNSA アイデンティティ管理WG • OpenID Foundation Japan 教育・翻訳WG、エンタープライズ・アイデンティティWG • Microsoft MVP for Enterprise Mobility(Jan 2010 -) © 2016 Naohiro Fujie 2
  • 3. Agenda 1. WebAPI に求められるセキュリティ • 利用者から見た課題 • API 提供者から見た課題 2. OAuth 2.0 の概要と課題への対応 3. デモ • Azure AD による WebAPI の保護 • ADAL による API クライアントの実装 © 2016 Naohiro Fujie 3
  • 5. WebAPI 利用・提供時の課題 • いかにして API クライアントを信頼するか? • 利用者の視点 • API を通して提供される自身のデータを悪用されたくない • API 提供者の視点 • 誰が利用しているのかを明確にしたい(例:課金) • 人の識別 • API クライアントの識別 • 提供するデータを悪用されたくない © 2016 Naohiro Fujie 5 http(s)でインターネット上に 公開しているので、Firewall 等による分離は難しい API クライアントは便利だけ ど、間接的に自身のデータへ アクセスされるのは怖い API の基本は単機能。ユーザ 認証・認可機能を API 毎に開 発したくない 適切な API クライアントから だけアクセスさせたい
  • 7. 従来の Web アプリケーションの利用 • ユーザ自身によりコンテキストの使い分けが可能 • Facebookの友達からはアプリA、Twitter上のアイデンティティとの紐 づけをされても良いが、反対は嫌 • 情報は二重管理 © 2016 Naohiro Fujie 7 実名、電話番号を登録 ニックネームを登録 Twitterには同僚に知られたく ない性癖を投稿しているので、 実名は登録したくない Facebookの友達は近しい人 ばかりなので、実名や電話番 号を登録しておきたい アプリA ニックネームと電話番号を登録 アプリAにはニックネームと 電話番号を登録したい・・・ 二重管理は面倒
  • 8. 上手く API を使って二重管理をやめたい • アプリにFacebookとTwitterのIDとパスワードを登録する? © 2016 Naohiro Fujie 8 実名、電話番号を登録 ニックネームを登録 アプリA (APIクラ イアント) ニックネームと 電話番号を使わせたい ユーザのID/PWDを使って Facebookへアクセス 複数のサービスに同じ情報を 登録するのは面倒なので便利 なマッシュアップ・アプリを 使いたい ユーザのID/PWDを使って Twitterへアクセス
  • 9. パスワード? • アプリ上に個人のパスワードを登録するのは・・・ © 2016 Naohiro Fujie 9 実名、電話番号を登録 ニックネームを登録 アプリA (APIクラ イアント) ニックネームと 電話番号を使わせたい ユーザのID/PWDを使って Facebookへアクセス ユーザのID/PWDを使って Twitterへアクセス パスワードを登録しておくの はかなり嫌・・・ 漏えい?変更時の運用?
  • 10. コンテキストが混ざる • せっかく分けていたコンテキストがアプリで混ざる © 2016 Naohiro Fujie 10 実名、電話番号を登録 ニックネームを登録 アプリA (APIクラ イアント) ニックネームと 電話番号を使わせたい 電話番号だけが欲しいのに、 実名もとれてしまう? このアプリ上でコンテキスト が混ざってしまう
  • 11. 課題:パスワード、コンテキスト パスワードを使わずに どうやってユーザの代わりに 「望んだ範囲に限定して」 アクセスさせるか? © 2016 Naohiro Fujie 11 実名、電話番号を登録 ニックネームを登録 アプリA (APIクラ イアント) ニックネームと 電話番号を使わせたい パスワードを登録しておくの はかなり嫌・・・ 漏えい?変更時の運用? このアプリ上でコンテキスト が混ざってしまう
  • 13. 従来の Web アプリケーションの利用 • ユーザが直接アプリを利用していたので識別は簡単 • 個々に認証機能や UI 開発が必要 © 2016 Naohiro Fujie 13 直接ログイン 直接ログイン アプリA 直接ログイン 個々に運用・管理。 識別は簡単だが、個々に機能 開発が必要
  • 14. API を公開してシンプルにしたい • ユーザが直接アプリを利用していたので識別は簡単 • 個々に認証機能や UI 開発が必要 © 2016 Naohiro Fujie 14 アプリA (APIクラ イアント) シンプルな機能・データ提供 だけを API で行いたい 利用 アプリ経由で利用 アプリ経由で利用
  • 15. アクセス元の特定・真贋が難しい • アクセス元アプリの信頼性の担保が難しい © 2016 Naohiro Fujie 15 アプリA (APIクラ イアント) 誰がどのアプリ経由が使って いるのかわからない? 利用 アプリ経由で利用 アプリ経由で利用このアプリは信頼できるの か? 特定アプリ以外からの アクセスを防げない?
  • 16. 課題:利用元の特定と管理 • どうやって「許可された」 アプリからのみ アクセスを許可 するか? © 2016 Naohiro Fujie 16 アプリA (APIクラ イアント) 利用 アプリ経由で利用 アプリ経由で利用このアプリは信頼できるの か? 特定アプリ以外からの アクセスを防げない? 誰がどのアプリ経由が使って いるのかわからない?
  • 18. OAuth の概要と基本的な考え方 • 目的 • リソースへのアクセスを安全に認可(委譲)すること • 基本的な考え方 • リソース(API を通して提供される機能やデータ)の持ち主はユーザ である • ユーザの同意に基づき API クライアントに対してリソースへのアクセ ス権限を認可(委譲)する • 認証(検証)された API クライアントに対してのみリソースを提供す る © 2016 Naohiro Fujie 18
  • 19. 構成要素 • 保護対象リソース • API を経由して提供される機能やデータなどのリソース • リソース・オーナー • 保護対象となるリソースの持ち主(ユーザ) • クライアント • 保護対象リソースへアクセスする主体(API クライアント) • 認可サーバ • 保護対象リソースへのアクセスを認可するためのサーバ © 2016 Naohiro Fujie 19
  • 20. 保護対象リソース (API 、データ) 各構成要素の関係性 © 2016 Naohiro Fujie 20 クライアント 認可サーバ リソース・オーナー 所有 登録 認可 利用 登録 保護 利用
  • 21. 保護対象リソース (API 、データ) 実際の動き(認可コードグラント) © 2016 Naohiro Fujie 21 クライアント 認可サーバ リソース・オーナー 所有 登録 認可 利用 登録 保護 利用 1.利用したい 2.認可要求 3.認可要求 (同意) 4.認可コードの 発行 5.認可コードの 提供 6.認可コードと アクセストークン の交換 8.アクセストー クンの検証 7.アクセストー クンの提示 9.リソースの 提供
  • 22. シーケンス(認可コードグラント) © 2016 Naohiro Fujie 22 リソース・オーナー (利用者/UserAgent) クライアント (アプリケーション) 認可サーバ (OAuthサーバ) 保護対象リソース (API・データ) フロー開始 ユーザ認証・同意 認可エンドポイントへリダイレクト (クライアントID、スコープを含む) クライアントへリダイレクト (認可コードを含む) アクセストークンを要求 (認可コード、クライアントID、Secretを含む) アクセストークンを発行 リソース要求(アクセストークンを含む) アクセストークンの検証 リソースの提供 クライアントに許可する範囲 (スコープ)指定が可能 オーナー(ユーザ)の同意に 基づくアクセスが可能 許可されたクライアントのみ からアクセスする為の認証 パスワードではなく、アクセ ストークンでリソース利用 アクセストークンから利用 者を確認(JWTの場合)
  • 23. ポイント • スコープの指定とオーナーによる同意 • スコープが変わると再同意とアクセス・トークンの再取得が必要 • 登録されたクライアントだけにトークンを発行 • クライアントIDとクライアントSecretによる認証 • 期限付きのコード・トークンを利用(パスワードの保存なし) • 認可コード • アクセス・トークンとの交換用(ごく短時間有効) • アクセス・トークン • リソースへのアクセスに利用(短時間有効) • リフレッシュ・トークン • アクセス・トークンとの交換用(それなりの期間有効) • アクセス・トークンの期限切れが発生した際に再度オーナーのインタラクションが無しにアク セス・トークンを再取得 • アクセス・トークンの使い方により利用ユーザの特定も可能 • JWT(JSON Web Token)を利用する場合(Azure AD はこれ) © 2016 Naohiro Fujie 23
  • 24. デモ Azure Active Directory による WebAPI の保護 Active Directory Authentication Library による API クライアントの実装 © 2016 Naohiro Fujie 24
  • 25. 保護対象リソース (ASP.NET WebAPI) デモ構成 © 2016 Naohiro Fujie 25 クライアント (ASP.NET MVC +ADAL) 認可サーバ (Azure AD) リソース・オーナー (Azure AD 利用者) 所有 登録 認可 利用 登録 保護 利用
  • 26. Azure AD の OAuth と ADAL • Azure AD(Azure Active Directory)の OAuth • Facebook などコンシューマの OAuth 実装との差は「Azure AD 以 外のリソース」へのアクセスを認可する点 ※Facebook などは自身が OAuth サーバでありリソースサーバ • そのため、Resource パラメータが必須となっている • ADAL(Active Directory Authentication Library) • Azure AD、AD FS 向けの認証ライブラリ • .NET 以外にも Java や JavaScript、Ruby、objective-C などに対応 • OAuth、OpenID Connect、ws-federation への対応 • トークンのキャッシュの自動管理(必要に応じてリフレッシュ・トー クンでアクセス・トークンを再取得)など、超便利 © 2016 Naohiro Fujie 26
  • 27. WebAPI の作成 © 2016 Naohiro Fujie 27
  • 29. Web API を選択 © 2016 Naohiro Fujie 29
  • 34. API Client の作成 © 2016 Naohiro Fujie 34
  • 36. MVC を選択 © 2016 Naohiro Fujie 36
  • 43. API アクセス © 2016 Naohiro Fujie 43
  • 44. API Client ⇒ WebAPI へアクセス許可 © 2016 Naohiro Fujie 44
  • 45. 登録された WebAPI を選択 © 2016 Naohiro Fujie 45
  • 50. nuget で ADAL をインストール © 2016 Naohiro Fujie 50
  • 52. Web.config に設定する情報 • appSetting に以下を追加 • Azure AD ポータルで取得したAPI Client のキー • <add key="ida:ClientSecret" value="WrVNTezVxZBjXPQBEMQ6VhKuJ9Ell1+An1cLCHZGmAo=" /> • アクセス先の API の識別子(リソースID) • <add key="ida:ResourceId" value="https://pharaoh.onmicrosoft.com/testWebAPI" /> © 2016 Naohiro Fujie 52
  • 53. Startup.Auth へのコード追加 • Using ディレクティブ • using Microsoft.IdentityModel.Clients.ActiveDirectory; • OpenIdConnectAuthenticationOptions // WebAPIリソースへのアクセスを要求 Resource = ConfigurationManager.AppSettings["ida:ResourceId"], Notifications = new OpenIdConnectAuthenticationNotifications { // ADALのトークンキャッシュにアクセストークンを乗せるため、認可コードでアクセストークンを取得 AuthorizationCodeReceived = async (context) => { string code = context.Code; AuthenticationContext authContext = new AuthenticationContext(authority); AuthenticationResult result = await authContext.AcquireTokenByAuthorizationCodeAsync( code, new Uri(postLogoutRedirectUri), new ClientCredential( clientId, ConfigurationManager.AppSettings["ida:ClientSecret"])); } } © 2016 Naohiro Fujie 53
  • 54. HomeController へのコード追加 • Using ディレクティブ • using System.Configuration; • using Microsoft.IdentityModel.Clients.ActiveDirectory; • using System.Net.Http; • using System.Net.Http.Headers; © 2016 Naohiro Fujie 54
  • 55. HttpClient httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); HttpResponseMessage response = httpClient.GetAsync("http://localhost:1867/api/values").Result; if (response.IsSuccessStatusCode){ ViewBag.Message = response.Content.ReadAsStringAsync().Result; } } catch (AdalException ex) { ViewBag.Message = ex.Message; } return View(); } public async System.Threading.Tasks.Task<ActionResult> About() { string clientId = ConfigurationManager.AppSettings["ida:ClientId"]; string clientSecret = ConfigurationManager.AppSettings["ida:ClientSecret"]; string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"]; string tenantId = ConfigurationManager.AppSettings["ida:TenantId"]; string authority = aadInstance + tenantId; var resourceId = ConfigurationManager.AppSettings["ida:ResourceId"]; try { ClientCredential credential = new ClientCredential(clientId, clientSecret); AuthenticationContext authContext = new AuthenticationContext(authority); AuthenticationResult result = await authContext.AcquireTokenSilentAsync( resourceId, credential, UserIdentifier.AnyUser); © 2016 Naohiro Fujie 55
  • 56. API Client を起動すると WebAPI への アクセスについて同意を求められる © 2016 Naohiro Fujie 56
  • 58. WebAPI を実行 © 2016 Naohiro Fujie 58
  • 59. 参考資料 • 脱オンプレミス! クラウド時代の認証基盤 Azure Active Directory 完全解説 • 著 : Vittorio Bertocci • 監訳 : 安納 順一、富士榮 尚寛 • ¥3,996 • Kindle 版もあり〼 • http://amzn.to/2h01o2h © 2016 Naohiro Fujie 59
  • 60. まとめ • OAuth を使って安全に API を使いましょう • 利用者にとって • パスワードの氾濫を防ぐ • 権限の絞り込みを適切に行う • API 提供者にとって • 適切な API クライアントへ提供する • Azure AD、ADAL を使うと結構簡単に実装できます。 • 本買ってね © 2016 Naohiro Fujie 60