ラベル OAuth の投稿を表示しています。 すべての投稿を表示
ラベル OAuth の投稿を表示しています。 すべての投稿を表示

2024年10月14日月曜日

そういえばGNAPがRFCになりました

こんにちは、富士榮です。

そういえばOAuth 3.0とかXYZとか言っていたGNAP(Grant Negotiation and Authorization Protocol)がRFC9635になりましたね。

それに伴いGNAP WGはクローズされた模様です。


うーん、まだ息してたんですね・・・(Justinに怒られそう)

ということで著者のJustinもブログ書いてますね。


まぁしかしOAuth2.0の周辺仕様が多くなりすぎたのでシンプルにしましょう、というのは良かったのですが、フレームワークとプロファイルという意味でマイクロ化された仕様が組み合わさるOAuth2.0は複雑化する一方で柔軟性を提供して来たわけで、歴史の長さも含め広く浸透して来ているわけです。
そこをシンプルではあるものの新しい仕組みで置き換えるのは、正しいかもしれませんが実際の普及という観点では非常に難しい話になりそうです。

今後、実際に使われていくかどうか、見守っていきましょう。

2024年5月20日月曜日

response_mode、”form_post"の実装

こんにちは、富士榮です。

EntraをはじめとするMicrosoftのIDスタックを使って開発をしていると必ずといっていいほど出てくるのがreponse_mode=form_postの壁です。特に非Microsoftのライブラリを使ってリライングパーティを開発する場合や、MicrosoftのIDスタックをリライングパーティとして非MicrosoftのIDaaSを構築する場合にはこのパラメータへの対応の有無で悩むことになります。

ということでresponse_modeって何?と言う話と自前でIdPを構築する際にform_postを実装する場合はどんな実装になるのか?を解説してみます。

response_modeとは?
OpenID Connect 1.0の仕様にはこのように定義されています。
OPTIONAL. Informs the Authorization Server of the mechanism to be used for returning parameters from the Authorization Endpoint. This use of this parameter is NOT RECOMMENDED when the Response Mode that would be requested is the default mode specified for the Response Type.

まぁ、元々はOAuth2.0のレスポンスの定義なので、こちらの仕様をみる方が適切といえそうです。

https://openid.net/specs/oauth-v2-multiple-response-types-1_0.html#ResponseModes

OPTIONAL. Informs the Authorization Server of the mechanism to be used for returning Authorization Response parameters from the Authorization Endpoint. This use of this parameter is NOT RECOMMENDED with a value that specifies the same Response Mode as the default Response Mode for the Response Type used. 

このOAuth2.0の仕様が発行されたのが2014年なのでその時点ではqueryとfragmentの2種類だけが本文には記載されており、追加モードとして今回の主役であるform_postの定義への参照が記載されています。


と、ここでちょっと待て、、と。

上記を見るとresponse_typeのデフォルトのresponse_modeの値を取る場合以外はこのパラメータを使うことは推奨しない、と明確に書いてありますね。

ということは、Azure AD B2Cが外部IdPと連携する際にresponse_typeの値に関わらずresponse_modeを必ず指定するのは推奨外の動作ってことですよね。。

また、先日書いたEntra IDの外部認証プロバイダ連携の場合はresponse_type=id_tokenでリクエストがされ、かつ外部認証プロバイダからはform_postでレスポンスが返されることを期待するにも関わらずresponse_modeが指定されないのはどうなんだ、、、という話です。(というか世の中にあるIdP製品やサービスでresponse_type=id_tokenだけをリクエストされてform_postでレスポンスするものは存在しないと思います)

この辺はMicrosoftさんちゃんと仕様を見ようよ・・・って思いますね。。

ちなみにresponse_type=id_tokenの場合のデフォルトのresponse_modeはfragmentです。(こちらに定義されています)

https://openid.net/specs/oauth-v2-multiple-response-types-1_0.html#id_token

The default Response Mode for this Response Type is the fragment encoding and the query encoding MUST NOT be used.


form_postとは?

気を取り直してresponse_mode=form_postの話に戻ります。response_modeは認可サーバからの認可レスポンスを返却するための方式を示すパラメータであることはわかりましたが、値にform_postが指定するというのはどう言うことなのか、についてはこちらの追加仕様に記載されています。

https://openid.net/specs/oauth-v2-form-post-response-mode-1_0.html

Abstractにこう記載されています。

This specification defines the Form Post Response Mode. In this mode, Authorization Response parameters are encoded as HTML form values that are auto-submitted in the User Agent, and thus are transmitted via the HTTP POST method to the Client, with the result parameters being encoded in the body using the application/x-www-form-urlencoded format.

まぁ、要するにHTML formにresponse情報を入れてredirect_uriにPOSTしますよ、ってことです。ws-federationやSAMLのHTTP POST Bindingですね。

ここでも話は横にそれますが、今でこそOAuth2.0やOpenID Connectは認可コードをリライングパーティに発行し、リライングパーティは認可サーバのTokenエンドポイントへ投げ込んでaccess_tokenやid_tokenを受け取る、いわゆるresponse_type=codeのコードフローが主流になっていますが、SAMLも当初はHTTP POSTやRedirect BindingではなくArtifact Bindingが主に使われていた時代がありました。当時はフィーチャーフォンのブラウザなど扱えるURL長に制限があったり、フロントに大きなPOSTデータを持ってくると通信量が増えてパフォーマンスに大きく影響が出るなどの問題があり、ArtifactといわれるコードをService Providerへ提供、Service ProviderがIdentity ProviderへSAMLトークンをとりにいく、という流れが必要だったためです。当時と今では事情がことなりますが、認可コードフローとのままですね。なんといってもOpenID Connectは、開発中はOpenID ABC(Artifact Binding and Connect)って名前でしたし、OpenID Connect Coreの定義をしている、OpenID FoundationのAB/ConnectワーキンググループはArtifact Binding Working GroupとConnect Working Groupから組成されており、ABはArtifact Bindingなわけです。


話を戻すと、Entra IDの外部認証プロバイダの際にも書いた通り、id_tokenとstateをformに乗せてPOSTしてあげるためのHTMLをレンダリングするコードを書けば良いってことになります。

node_expressとejsで書くとこんな感じです。

res.render("./form_post.ejs",
{
redirect_uri : req.body.redirect_uri,
id_token: id_token,
state: req.body.state
}
);

レンダリングされるhtmlテンプレートはこんな感じですね。(前回の記事では動きを見るために自動POSTしていませんでしたが、今回はJavaScriptで自動POSTする形にしています)

<html>
<head><title>Submit This Form</title></head>
<body onload="javascript:document.forms[0].submit()">
<form method="POST" action="<%= redirect_uri%>">
<input name="id_token" type="hidden" value="<%= id_token%>">
<input name="state" type="hidden" value="<%= state%>">
</form>
</body>
</html>


なぜform_postにこだわるのか?

しかし、form_postを使っているのって実態としてMicrosoftくらいしかいないんですよね・・・(Sign In with Appleも使ってたかも)

現状、ブラウザを経由してトークンのやり取りをする、つまりArtifactや認可コードを使わないパターンを使いたい大きな理由は先ほど挙げたフィーチャーフォンのブラウザの制限や通信速度・通信量の問題というよりも、エンタープライズなどIdPがファイアウォールの内側にありリライングパーティが外側にあるというケースやWalletがIdPになるケースなど、IdPが外部からのアクセスできない(Walletの場合はエンドポイントを持たない)という問題である場合が多いと思います。

その場合は当然Implicitを使う、つまりフラグメントにトークンを入れてJSでリライングパーティへ渡す、というやり方になるわけですが、これだとリライングパーティのredirect_uriがブラウザ上でJSをハンドリングする機能を実装することが前提になってしまいます。もちろんこれができるケースならば良いのですが、リライングパーティ向けの共通ライブラリを提供しようとすると単純にバックエンドでPOSTを受け取るAPIを作っておく方が楽なんじゃないかと思います。さらに言うと、これまでws-federationやSAMLのSP向けのライブラリを提供してきたベンダであれば少しパラメータを変えれば対応できると言う意味でform_postの方がありがたかった、と言うのが実情だったんだろうなぁ、、と聞いた話から推測しています(あくまで推測です)。まぁ、SameSiteの問題もあったりしますがこの辺は各社対応してきているので現状は大丈夫だと思いますが。


ということで、今回はresponse_modeとform_postの話をしましたが、みなさんが作るIDシステムやアプリケーションのシステム配置や要件によって適切な実装をしていきましょう。








2024年3月26日火曜日

OAuth2.0 Security Best Current Practiceを読んでみる(8)

こんにちは、富士榮です。

ようやくこのシリーズも終わりです。

引き続き攻撃パターンと緩和策です。最後の3つを読んでいきます。


攻撃パターンと緩和策

  • クリックジャック
    • 認可エンドポイントにアクセスした時に表示する画面に透明なiFrameを仕込むなどのクリックジャックの話です
    • 認可エンドポイントはMUSTとしてクリックジャック対策をしなければなりません
    • W3CのContent Security Policy Level2以上を適用すべきです
    • こんな風にする感じですね
    • HTTP/1.1 200 OK
    • Content-Security-Policy: frame-ancestors https://ext.example.org:8000
    • Content-Security-Policy: script-src 'self'
    • X-Frame-Options: ALLOW-FROM https://ext.example.org:8000
  • 認可サーバがフィッシングサイトにリダイレクトする
    • 前も出てきたかもしれませんが、正しくredirect_uriが設定されていたとしても攻撃者によってフィッシングサイトに誘導されてしまう可能性はあります。
    • 例えば、無効なスコープの値を指定することでフィッシングサイトへ誘導するケースや、有効出会っても攻撃者によってコントロールされたclient_id、redirect_uriを使った誘導(同意拒否をしても誘導される。他にもprompt=noneで誘導する)ケースがあげられています
    • 認可サーバでこれらを防ぐためにはprompt=noneのケースをのぞき、必要に応じてユーザ認証を行う必要があります
    • また、リスクに応じて追加のアクションを講じるのも一つの手段です
    • 基本的にredirect_uriが信頼できない状況ではリダイレクトするべきではありませんが、信頼できない場合にユーザがリダイレクトするかしないかの判断をするような実装を行なっても良い(MAY)ということです
  • ブラウザ内の通信フローに対する攻撃
    • 認証応答がリダイレクトではなくpostMessageなどで送信されるケースにおいて悪意のある通信先に対して通信が行われるケースがあります
    • 例えば、送信先の制限が不十分な実装をするケースなどが挙げられています。ワイルドカードで送信先が設定されていますね
    • window.opener.postMessage(
    •   {
    •     code: "ABC",
    •     state: "123"
    •   },
    •   "*" // any website in the opener window can receive the message
    • )
    • 他にも送信先のURIの検証が不十分で攻撃者の設定した値になってしまったり、送信元の検証が不十分なケースも想定されるのでURI検証やCSRF対策はしっかりとしておく必要があります
    • その意味で推奨される実装としては、
      • 明確なクライアントオリジンを示す
      • window.opener.postMessage(
      •   {
      •     code: "ABC",
      •     state: "123"
      •   },
      •   "https://client.example" // use explicit client origin
      • )
      • メッセージのバリデーションを行う
      • window.addEventListener("message", (e) => {
      •   // validate exact authorization server origin
      •   if (e.origin === "https://honest.as.example") {
      •     // process e.data.code and e.data.state
      •   }
      • })
    • といった実装が必要となります

ということで、ようやくこれで最後まで読みました。
実装する暇がなかなか取れませんが、徐々にやっていきたいと思います。

2024年3月23日土曜日

OAuth2.0 Security Best Current Practiceを読んでみる(7)

こんにちは、富士榮です。

すこし空きましたがこちらも続けていきます。

引き続き攻撃パターンと緩和策です。前回は307リダイレクトまで行きましたので続き13個目/18個のTLSを終端するリバースプロキシから行きたいと思います。


攻撃パターンと緩和策

  • TLSを終端するリバースプロキシ
    • 一般的なWebサーバの構成だとリバースプロキシ(と言うよりもロードバランサーでやることが多いかと)でTLSの終端処理をした上で実際のWebサーバへリクエストをディスパッチすることが多いと思います
    • その際にhttpヘッダーにIPアドレスや証明書とのバインディングの情報などさまざまな情報を付与することがありますが、不正にヘッダを改竄することが攻撃につながる可能性があります(典型的にはX-Forwarded-Forなど)
    • と言うことでちゃんとhttpヘッダのサニタイズをしましょう(MUST)ということです
    • また、リバースプロキシと実際のWebサーバの間のネットワークに攻撃者がアクセスできてしまった場合を仮定して内部ネットワークにおいてもアクセス制御をちゃんとしましょう
  • リフレッシュトークンの保護
    • リフレッシュトークンを使うとアクセストークンが発行できるので、攻撃者にとってはリフレッシュトークンは確かに魅力的な攻撃対象です
    • RFC6749でも転送中や保存中の保護やクライアント認証の実施などの対策を示していますが、ここでは更に高度な保護の方法について考えます
    • クライアントのリスク評価を行った上でリフレッシュトークンの発行の可否を判断する必要があります(MUST)。リフレッシュトークンを発行しない場合は認可コードフローなどでアクセストークンを発行するように構成することができます
    • リフレッシュトークンを発行する際はユーザの同意に基づき、特定のスコープ・リソースサーバへ紐付けられる必要があります(MUST)
    • コンフィデンシャルクライアントの場合はクライアント認証を必須としていますが、パブリッククライアントの場合はmTLS(RFC8705)やDPoP(RFC9449)を使ってリフレッシュトークンとクライアントのインスタンスを紐づける必要があります
    • ローテーションを行って無効にされたリフレッシュトークンも認可サーバは保持しておき、万一不正なクライアントが古いリフレッシュトークンを使おうと試みた場合は古いリフレッシュトークンだけでなく、アクティブなリフレッシュトークンについても無効化するなど予防措置を講じることもできます
    • リフレッシュトークンに紐づくスコープの情報をトークンに埋め込むことで認可サーバは取消対象となるリフレッシュトークンの判別をしやすくなる可能性もあります
    • その場合はデジタル署名を施すなどトークン自体の改竄を防ぐメカニズムも導入する必要があります(MUST)
    • また、パスワード変更やログアウトなどのイベントをトリガーにリフレッシュトークンを無効化することも検討しても良いと思います
    • 通常リフレッシュトークンには有効期限をつけますが、一律で設定しても良いですし、リスクレベルに応じて変更するなどの工夫をしても良いと思います
  • リソースオーナーになりすましたクライアント
    • 認可サーバがclient_credentialsフローをサポートする場合、アクセストークンの発行対象がユーザなのかクライアントなのかを判別することが難しくなるケースがあります
    • 具体的にはクライアント登録を行う際にクライアントIDを任意に決定できる場合、ユーザの識別子(sub)と同じ値をクライアントIDとして登録することで、リソースサーバが当該のアクセストークンがユーザに対して発行されたのかクライアントに対して発行されたのかを混同してしまい、望まぬクライアントがユーザのリソースにアクセスできてしまう可能性があります
    • このことを避けるためにはユーザの識別子とクライアントIDの名前空間を分離して識別可能にしたり、他のプロパティを使ってトークンの発行対象がユーザなのかクライアントなのかを判別できるようにしないといけません

ということで今回はここまでです。
しかし読めば読むほど本当にそんな実装してる認可サーバあるの??って思いますが、こういう形でちゃんと文章として出すことが大切なんだろうなぁ、、と思っています。

2024年3月22日金曜日

IETF 119で発表されたJOSE、COSE、OAuth関連のスペック

こんにちは、富士榮です。

IETF 119がブリスベンで本日まで開催されています。

実は私はIETFは参加したことがない(昨年の横浜も忙しくて行けなかった・・・)のですが、参加している人たちから色々と情報が流れてきています。

Mike Jonesさんが以下のポストをしています。

Eight Specifications Published in Preparation for IETF 119

https://self-issued.info/?p=2503

ポストによると主にMikeが絡んでいるスペック中心ではありますが、以下のスペックに関するUpdateがあったとのことです。

実装を追いかけている人は必読ですね。

2024年3月3日日曜日

OAuth2.0 Security Best Current Practiceを読んでみる(6)

 こんにちは、富士榮です。

すこし空きましたがこちらも続けていきます。

引き続き攻撃パターンと緩和策です。前回はリソースサーバでのアクセストークンの漏洩まで行きましたので続き10個目/18個の盗まれたアクセストークンの悪用から行きたいと思います。


攻撃パターンと緩和策

  • 盗まれたアクセストークンの悪用
    • これはすでに手遅れ?そもそも攻撃なのか?という感じもしますが、万一アクセストークンが盗まれてしまったとしても被害を最小限に食い止める努力は必要です
    • 基本は送信者制限(Sender Constraint Token)と対象者制限(Audience Restriction)をすべきであるっていう話です
    • 送信者制限(Sender Constraint Token)はその名前の通り、特定の送信者から送信されたアクセストークンのみをリソースサーバが受け付けるようにする、ということです。これはいわゆるべアラ(Bearer)トークンとは対称となる概念ですね
      • 参考)Bearer Tokenとは?
      • 方式としてはmTLS(RFC8705)とDPoP(RFC9449)があります
      • どちらの方式にしても鍵を使ったトークンとのバインディングをするので当たり前ですが秘密鍵の保護は大切です
    • 対象者制限(Audience Restriction)もその名前の通り、特定のリソースサーバでのみアクセストークンが利用できるように制限を行います
      • こちらもアクセストークンが万一漏洩したとしても影響範囲を最小化するための対策です
      • 対象となるリソースサーバを表現するためにはURLなどを利用し、アクセストークン要求時のURLと実際のリソースサーバのURLの値が異なることを検知することによりフィッシング等で作成されたアクセストークンが利用されることを防ぎます
      • リソースを指定するにはRFC8707のresourceパラメータを使ったり、scopeにリソースに関する情報を埋め込むことも可能です
      • そしてこちらもmTLS(RFC8705)による対策も有効です
      • なお、対象者制限付きのアクセストークンを使うと、リソースサーバ単位で特化したアクセストークンを生成することができるので、機能的にもプライバシーの面でもメリットがあります。
    • なお、追加の議論として認可サーバがアクセストークンをどこであれば安全に利用できるのか?という情報を提供することもできますが注意しなければならないことが指摘されています
      • 一つはメタデータで公開する方法ですが、既知のリソースサーバの情報を公開してしまうことになりますし、メタデータの標準ではありません
      • もう一つはトークンレスポンスの中でリソースサーバのURIを合わせて送信するパターンがありますが、正規のリソースサーバへのレスポンスならそれでいいですが、偽造されたリソースサーバへ正規のリソースサーバのURIを送っても何の検証も期待できない面で微妙です
  • オープンリダイレクト
    • クライアント、認可サーバの両方の構成要素がオープンリダイレクトを引き起こしてしまう可能性があるので注意が必要です
    • クライアントがアクセス元となっている画面やページを記憶しておいてトークン取得後にコールバックURIから元のページへ戻す、という実装は一般的ですが、このリダイレクト機能の実装を行う際にオープンリダイレクトを許可してしまう実装にならないように注意する必要があります
    • 認可サーバは仕組み上リダイレクトを行うので、こちらも実装する上でオープンリダイレクトにならないように注意が必要です
    • 基本的にはRFC6749で正しいredirect_uriのみを受け付けてオープンリダイレクトを行わないことがMUSTとして規定されていますが、正しいredirect_uriを使った攻撃パターンも存在するので十分に注意が必要です
    • 例えば、動的クライアント登録を行う際の攻撃パターンとしてこのようなものが紹介されています
      • 無効なスコープを指定するなどしてフィッシングサイト等にリダイレクトさせるように誘導(エラーの際にどこに戻すのか?が結構重要なポイントになりますね。変なリクエストが来たからと言って指定されたredirect_uriに戻しちゃうとこう言うことが起きるのかと)
      • 有効な認可リクエストを送信、この際にredirect_uriは攻撃者の制御の元にあるURLを利用する。ユーザ認証の後、属性提供同意画面でユーザが拒否をしたとしてもredirect_uri(フィッシングサイト)へ戻される
      • この状態でprompt=noneでサイレントログインをするとフィッシングサイトへリダイレクトされてしまう
    • 難しい問題だと思いますが、ユーザをリダイレクトする前にちゃんとユーザを認証する、redirect_uriをちゃんと信頼できるかどうか検証する、など考えないといけません
  • 307 リダイレクト
    • 通常のリダイレクトはGETリクエストのみについてリダイレクトする302を使うと思いますが、代わりに307を使ってしまうとPOSTリクエストについてもリダイレクトしてしまいます。
    • 通常認可サーバに対するリクエストを受けるとユーザは認証行為を行うわけですが、その際クレデンシャル情報をPOSTすることになることが多いと思います。ここで307を使ってしまうと意図せずにクレデンシャル情報が別のサーバへ転送されてしまうので307を使うべきではありません

まだまだ続きます(長い)。
とは言え、実装していかないとここの対策についてイメージがわかないと思うので、一通り眺めたら実装にしつつ確認していきたいと思います。

2024年2月21日水曜日

OAuth2.0 Security Best Current Practiceを読んでみる(5)

こんにちは、富士榮です。

すこし空きましたがこちらも続けていきます。

引き続き攻撃パターンと緩和策です。前回はアクセストークンインジェクションまで行きましたので続き7個目/18個のクロスサイトリクエストの偽造から行きたいと思います。


攻撃パターンと緩和策

  • CSRF(クロスサイトリクエストフォージェリ)
    • 攻撃者としては正規のクライアントが攻撃者の制御下にあるリソースにアクセスさせたいので、redirect_uriに不正にリクエストをインジェクションしようとします
    • 緩和策
      • 基本はstate/nonce/PKCEを正しくセッションに紐づけた形で利用することにつきます
        • しかしながら例えば、クライアントがPKCEを使う場合は当然のことながら認可サーバがPKCEをサポートしていることを確認しないといけません
        • 同じくstateを使う場合はstateの改ざんやスワッピングに対する耐性を持つような実装にしないと意味がありません
      • 認可サーバは自身がPKCEをサポートしていることをクライアントが検知するための仕組みを提供する必要があります(MUST)
      • 基本はメタデータを使うことになりますが、別のメカニズムで検知方法を提供しても問題はありません(MAY)
      • stateやnonce(response_typeがid_tokenの場合)は認可レスポンスやトークンレスポンスを攻撃者が読み取れる環境においてはリプレイアタックなどに使われる可能性がありますが、その点はPKCEを使うことで対応ができます
  • PKCEダウングレード攻撃
    • PKCEをサポートしているものの、全てのフローがPKCE対応しているわけではない認可サーバはPKCEダウングレード攻撃を受ける可能性があります
    • 例えばこんな実装です
      • 認可リクエストにcode_challengeがあったらPKCEを有効にする、という判定ロジックが認可サーバに組み込まれている(逆にいうとcode_challengeが指定されない場合はPKCE対応しない)
      • 上記の前提があるにも関わらずCSRF対策としてstateを使わない(PKCEを使うことを前提としてしまっている)
    • まぁ、当然ですがこうなるとCSRF対策をしていないのと同じです
    • 攻撃者はクライアントと認可サーバの間に入り、code_challengeを丸ごと削除してしまいセッションを乗っ取るわけです
    • 緩和策
      • この攻撃を受けている際の特徴は、認可リクエストにcode_challengeがない(削除されている)にも関わらずトークンエンドポイントへのアクセス時はcode_verifierが指定されることにあります
      • code_challengeが削除されていることを検知するために認可サーバは認可コードとcode_challengeを紐づけて管理しないといけません。このことによりトークンエンドポイントに認可コードがPOSTされたタイミングでcode_challengeとの紐付けが有効かどうかを検証することが可能となります
      • 加えて認可サーバは、認可エンドポイントへのリクエストにcode_challengeが指定されなかったにも関わらずトークンエンドポイントへcode_verifierが指定された場合はリクエストを拒否しないといけません(MUST)
  • リソースサーバでのアクセストークンの漏洩
    • リソースサーバが偽造されている場合(アクセストークンフィッシング)
      • 基本はredirect_uri(リソースサーバ)とクライアントの紐付きがゆるいケースにおいて発生します
    • リソースサーバが侵害されている場合
      • ログの盗難やシステムの完全な掌握までさまざまなパターンがありますが、リソースサーバが侵害されるとアクセストークンが盗難されてしまいます。当たり前ですが
    • 緩和策
      • 基本的にSender Contraintトークンを使うという対策に尽きます
      • 同じくAudience Restrictionも大切な対策です
      • またこれも原則ですがリソースサーバでアクセストークンは他の機密情報と同じようにPlain textで保存したり他のシステムへ転送するなどは避け厳重に扱う必要があります

今回も3つ紹介しました。
まだあと半分くらいありますね。。

2024年2月14日水曜日

OAuth2.0 Security Best Current Practiceを読んでみる(3)

こんにちは、富士榮です。

前回前々回とOAuth2.0 Security Best Current Practiceについてみてきました。

今回は攻撃パターンと緩和策についてみていきます。18パターンも定義されているので今回は最初の3つを紹介していきます。


攻撃パターンと緩和策

このセクションでは攻撃ごとに緩和策が記載されています。ここまでのベストプラクティス、攻撃モデルを考慮して、自身の実装を分析し該当する攻撃パターンが当てはまる可能性があるなら緩和策を考える、という使い方になると思います。
  • redirect_uriの検証が不十分
    • 基本は完全一致を検証することになりますが、パターンマッチングのロジックによってはエンコードされた値などをうまくハンドリングできていないケースなどもあり得そうです。
    • 認可コードグラント
      • redirect_uriにワイルドカードを使うケースが主に取り上げられています。
      • 例えば、「https://*.somesite.example/*」という値がredirect_uriとして登録されていた場合、「https://attacker.example/.somesite.example」も通してしまう可能性があります
      • また、CNAMEレコードのメンテナンスについても言及されています。使われていないCNAMEレコードのポイント先のURLを攻撃者が取得することで意図しないredirect_uriへ誘導されてしまう可能性があります
    • インプリシットグラント
      • 認可コードグラントで述べた攻撃はインプリシットでも同様に発生する可能性があります
      • さらにインプリシットの場合、Locationヘッダにフラグメントがついていない場合、フラグメントを再付与してしまう問題により被害を大きくする可能性があります。例えばオープンリダイレクトにより転送された先にアクセストークンを付与してしまうことで攻撃者が用意した転送先にアクセストークンを直接的に送信してしまうことが発生します
    • 緩和策
      • これはシンプルにredirect_uriの完全一致を確認する、につきます
        • ※localhostの場合を除きますが
  • リファラーヘッダーを介した資格情報の漏洩
    • 認可コード、stateパラメータ、さらにインプリシットの場合はフラグメントに設定されるアクセストークンが認可リクエスト・認可レスポンスのURIの内容に含まれることからリファラーヘッダを介して攻撃者に情報が知られてしまう可能性があります
    • OAuthクライアントからの漏洩
      • 通常OAuthクライアントは認可サーバからの認可レスポンスを受け取るとクライアント側の画面をレンダリングする訳ですが、そのページ上に例えば攻撃者のページがリンクとして存在していて強制クリックさせたり、iFrame内の広告などとして埋め込まれていると、リファラーヘッダーを介して認可コード、state、場合によってはアクセストークンなどが意図せずに漏洩します
    • 認可サーバからの漏洩
      • 認可サーバから漏れるような状態になっているとどうしようもない気もしますが、上記と同じように攻撃者のサイトへ誘導される仕組みがあると資格情報が漏洩します
    • 漏洩の結果として、認可コードによるアクセストークンの取得や、アクセストークンそのものの搾取による攻撃が成立してしまいます
    • 緩和策
      • OAuthの認可レスポンスの結果レンダリングされるページや、認可エンドポイントにサードパーティのリソースや外部サイトへのリンクを含まないようにする(まぁ、当たり前ですがたまに認可エンドポイントに広告載せたい事業者とかGAタグを埋め込む事業者いますよね・・・)
      • さらに安全にするには、
        • リファラーヘッダを抑制するリファラーポリシーを適用する
        • 認可コードグラントを利用する(インプリシットを使わない)
        • PKCEを使う
        • 認可コードは一度限りの利用にする(トークンエンドポイントに渡された段階で無効化する)
        • stateを一度限りの利用にする(リダイレクト先で評価された段階で無効化する)
        • 認可レスポンスをリダイレクトではなくform_postを利用する(repsonse_modeパラメータ)
  • ブラウザ履歴による資格情報の漏洩
    • 上記のリファラーヘッダと類似ですが、認可コードやアクセストークンがブラウザの履歴に残るケースが考えられます(これ、攻撃ではありませんがログイン画面をブックマークしちゃう人もいるんですよね・・・)
    • 認可コード
      • redirect_uriへの認可レスポンスが履歴に残るとcode=xxxの部分も残ってしまうことがあり、この認可コードを再利用されることがあります
      • 対策としては、リファラーヘッダのケースと類似ですが、
        • 認可コードを一度限りの利用にする
        • response_modeとしてform_postを利用する
      • となります
    • アクセストークン
      • こちらも前述のものと同じですが、フラグメントだけでなくクエリパラメータでアクセストークンを渡すケースがあり、ブラウザ履歴に情報の残ることがあります
      • 対策としては、
        • クエリパラメータでアクセストークンを渡さない
        • response_modeとしてform_postを利用する
      • となります

とりあえず今回はここまでです。
当たり前に聞こえますが広告とかGAタグは割と普通に実装されている気がするので十分に注意しましょう。







2024年2月12日月曜日

OAuth2.0 Security Best Current Practiceを読んでみる(2)

こんにちは、富士榮です。

前回に続き、OAuth2.0 Security Best Current Practiceを読んでいきます。

今回は2つ目のブロックである「攻撃モデルの更新」です。今回は短めです。


攻撃モデルの更新

RFC6819に定義されている攻撃モデルの最新化しているセクションです。ここで定義された攻撃モデルに対して次のセクションで緩和策が定義される、という流れになっています。
定義されているのは、以下の5つのモデルです。
  • A1)攻撃者がブラウザやサーバに任意のエンドポイントをセットアップできる環境にあるケース
    • まぁ正直これができる環境だともう何も信じられなくなりますが、攻撃者はユーザを独自の認可サーバに誘導したり、認可コードやトークンの搾取ができてしまう可能性を考慮する必要があります。
  • A2)通信ネットワークを完全に制圧されているケース
    • これも当然ですが盗聴やなりすましが容易にできてしまう可能性を考慮する必要があります。
  • A3)認可レスポンスを攻撃者が見れてしまうケース
    • レスポンスの改ざんはできなくても見られてしまうケースは想定しておかないといけません。オープンリダイレクタなどが典型ですね。
  • A4)同様に認可リクエストを攻撃者が見れてしまうケース
    • リクエストが漏えいすることで攻撃者に情報を与えてしまう、というのはよくあることですね。
  • A5)アクセストークンを攻撃者が取得できてしまうケース
    • リソースサーバが攻撃者によって侵害されてしまっているケースなどが考えられますね。
これらの攻撃モデルのうち、A3〜A5は通常A1もしくはA2と同時に発生します。また、ここは大切なポイントだと思いますが「複数の攻撃者が協力して攻撃する可能性」についても考慮しておく必要がるとも述べられています。

次回は最終回、攻撃パターンと緩和策について読んでいきたいと思います。

2024年2月11日日曜日

OAuth2.0 Security Best Current Practiceを読んでみる(1)

こんにちは、富士榮です。

昨日ポストした通り、OAuth2.0 Security Best Current PracticeがLast Callの段階に進みました。2024年2月22日までのレビュー期間を経て正式にRFCに向けたステップに進みます。

ということで少しだけこのドキュメントを見ていきたいと思います。

何に関するドキュメントなのか

Abstract、Introductionを軽く要約すると、
  • 対象はRFC6749(The OAuth 2.0 Authorization Framework)、RFC6750(The OAuth 2.0 Authorization Framework: Bearer Token Usage)、そしてRFC6819(OAuth 2.0 Threat Model and Security Considerations)の3点
  • OAuth2.0のフレームワークの活用が進むにつれ、当初想定していた以上に重要なシナリオ(金融やヘルスケア、行政サービスなど)でも利用されるようになってきた
  • 当然さまざまな攻撃パターンも編み出されてきており、基本的にはRFC6819により対応してきてはいるが継続的に対応していくことが重要となってきている
  • そのため、このドキュメントでは最新のセキュリティ上の推奨事項を提供する
ということになっています。

文章の構造

目次を眺めると、
  • ベストプラクティス
  • 攻撃モデルの更新
  • 攻撃パターンと緩和策
という形になっています。

まずはベストプラクティスに従いアーキテクチャを設計を行い、RFC6819発行時点に加えて最新化された攻撃モデルを念頭に置きつつ、各攻撃パターンに対する緩和策を実装していく、という流れでシステム化を進めていく、という使い方が想定されているのだと思います。

今回はベストプラクティスの部分を見ておきましょう。

ベストプラクティス

以下のベストプラクティスが定義されています。
  • リダイレクトベースのフローの保護
    • 全体
      • オープンリダイレクト対策として登録済みredirect_uriとの完全一致を検証すること
      • CSRF対策をすること。PKCEやstateですね
      • Mix up攻撃に対策すること
      • 資格情報を含む情報をリダイレクトする際は誤って転送しないようにすること
    • 認可コードグラントの場合
      • 認可コードインジェクション対策を行うこと。PKCEですね
    • インプリシットグラントの場合
      • トークン漏えい対策をしない限りは使わないこと
  • トークンリプレイ対策
    • アクセストークン
      • DPoP、mTLSなどの送信者制限トークンを利用すること
    • リフレッシュトークン
      • パブリッククライアントの場合は送信者制限を行うかローテーションを行うこと
  • アクセストークンの権限の制限
    • 必要最低限の権限に絞ること
    • 特定のリソースサーバで利用するようにAudienceを絞ること
  • リソースオーナーパスワードクレデンシャルグラント
    • 利用してはならない
  • クライアント認証
    • 可能な限りクライアント認証を実装すること
    • mTLSやprivate_key_jwtなどを用いることを推奨
  • その他
    • RFC8414のOAuth Authorization Server Metadataを使うことは有用であるため認可サーバはメタデータを公開することを推奨
    • リソースサーバがクライアントを混同するような可能性のある属性を許可してはいけない
    • クライアントとリソースサーバの間はTLSで保護されるべきである
    • 認可応答はlocalhostおよびリダイレクトを使うネイティブアプリ(カスタムURIスキーム)を除き暗号化されていないネットワークを許可してはならない
    • postMessageで認可応答を送信する場合は送信開始者と受信者の厳密な検証を行うこと
    • 認可エンドポイントはユーザーエージェントが直接アクセスするためCORSを許可してはいけない
結構たくさんありますが、原則的なことが多いので実装する際のチェックとして利用すると良いと思います。

次回は続きを紹介したいと思います。


2024年2月10日土曜日

OAuth 2.0 Security Best Practice, OpenID for Verifiable Credential Issuance ID-1など続々と

こんにちは、富士榮です。

先週は色々と仕様のアップデートが動いた週でした。


OAuth 2.0 Security Best Current Practice(OAuth2.0 BCP)

https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics


OAuth 2.0を実装する際のセキュリティに関するベストプラクティスに関するドキュメントです。(そのまま)


OpenID for Verifiable Credential Issuance

https://openid.net/review-of-proposed-implementers-draft-of-openid-for-verifiable-credential-issuance/


こちらは言わずと知れたVerifiable CredentialをOpenIDプロトコルに乗せて発行するための仕様ですね。Verifiable Presentationに関する仕様はすでにImplementers Draft 2まで出ていますが、発行側は初のImplementers Draftですね。ようやく実装者は本気で実装が開始できる段階まで来ている、ということです。


それぞれの細かい内容はおって紹介したいと思います。 

2024年1月28日日曜日

デジタル認証アプリがやってくる

こんにちは、富士榮です。


噂のデジタル認証アプリですが、パブコメが出てますね。

電子署名等に係る地方公共団体情報システム機構の認証業務に関する法律施行規則の一部を改正する命令案に対する意見募集について

https://public-comment.e-gov.go.jp/servlet/Public?CLASSNAME=PCMMSTDETAIL&id=290310311&Mode=0

2月末までの募集のようなのでぜひ皆さんみておくと良いと思います。

ざっくり見てみたいと思います。色々と課題もありそうです・・・

概要

OpenID Connect/OAuth2.0もちゃんと採用されていますね。


サービス提供領域

個人的に一番気になっていた民間PF事業者との棲み分けにについても記載されていますね。

準公共サービスの範疇をどこにおくのか、で既存事業者とのせめぎ合いがありそうな感じです。

システム構成

しかしながら、このシステムイメージ図を見ると色々と問題点が浮かび上がってきます。

パッと見た感じ普通のID連携モデルです。サービス事業者(先に述べた公共・準公共・民間)がデジタル庁の認証サーバ(OAuthの認可サーバ)に対してクライアント登録をするということになるはずです。このクライアント登録をする段階で公共・準公共・民間の区分で審査をした上で登録していく、という感じで運用していくことになるはずですね。
しかし、そうなると2点問題があるように感じます。

課題はなにか?

  1. 多段フェデレーションへの対応が困難
    • これはID連携モデルだけにとどまらずオンプレミスのActive Directoryフォレストの設計を行う上でも昔から考慮点となっていたところですが、デジタル庁の認可サーバに登録されるクライアントが更にID基盤として実際のサービスとID連携を行なっているケースがありえます。例えば、IDaaSなどのサービスを使っている事業者の場合、デジタル庁にクライアント登録されるのはIDaaSとなり、実際のサービスが登録されるわけではありません。このことにより準公共という触れ込みでデジタル庁に登録されたとしても、その先で民間のサービスとID連携をしてしまっていた、、というケースに対応できなくなります。この辺りはルールで縛りを入れる形になるんだと思いますが
  2. デジタル庁のIdPによる行動把握問題
    • フェデレーションモデルということは利用者(今回の場合はマイナンバーカードを持っている国民)がクライアントとなるサービスを使う都度、デジタル庁のIdPへリダイレクトされることになります。今回のケースではクライアントとなりえる公共・準公共・民間のサービスを認証対象となるユーザが使っていることをデジタル庁のIdPは知ることができる、という状態が発生します。まさにGoogle Knows You Better Than You Know Yourselfならぬ「デジタル庁はあなたよりあなた自身のことを知っている」なんてことになるのでは?という疑念を抱かせないように丁寧な説明が必須になると思います。


この辺りはパブコメだしますかね・・・
こういうユースケースこそVCを使ったIssuer(デジ庁IdP)→Wallet(個人のスマホ)→Verifier(民間を含むサービス)の3パーティモデルを使ってIssuerとVerifierを分離することが有効なのかもしれません。

いずれにしても4月に出てくるということなので楽しみにしておきましょう。

2024年1月7日日曜日

OpenID Providerを作る)まずは全体像から

こんにちは、富士榮です。

前回のポストに書いた通り、OpenID Providerを作っていきましょう。

なお、今回は一番オーソドックスなところから、ということで認可コードフロー(Authorization code flow)をベースに考えていきたいと思います。ちなみにOpenID Connect Core 1.0の仕様はOpenIDファウンデーションジャパンの翻訳・教育WGが日本語化していますので必要に応じて参照していきたいと思います。

まずは全体のイメージをおさらいしておきたいと思います。
下図が認可コードフローの全体シーケンスです。よく見るやつですね。なお、そもそも論となりますがOpenID Connectの究極の目標は「Relying PartyがIDトークンを取得すること」です。その過程においてユーザ認証を行なったり、APIアクセスするためのアクセストークンを取得することもありますが、まずは周辺の仕様を削ぎ落としてど真ん中だけを考えることが理解を進めるためには必要だと思います。


シーケンスは大きくは4つのフェーズで構成されますが、実際の認可コードフローのコアとなるのは2番目、3番目のフェーズです。
各フェーズでやっていることは以下の通りです。
  1. ディスカバリ
    • OpenID Providerが提供している機能やエンドポイントなどの情報をRelying Partyに提供する(ディスカバリエンドポイントを通してメタデータを提供する)
  2. 認可※OpenID ConnectのベースとなるOAuth2.0を踏襲するため認可と呼称されるが仕様上は認証リクエスト・レスポンス(Authentication Request/Response)
    • 認可コードをRelying Partyに提供する(認可エンドポイント)
  3. トークン発行
    • 認可コードを受け取りIDトークンをRelying Partyに提供する(トークンエンドポイント)
  4. ユーザ情報提供
    • ユーザ情報をRelying Partyへ提供する(userInfoエンドポイント)
    • OAuth文脈において認可サーバから見ると保護対象リソースとなるためアクセストークンを使って認可される

次回からそれぞれのフェーズについてgithubに公開したコードをベースに解説していきたいと思います。



2021年7月31日土曜日

新Sign in with SlackでAzure AD B2CにSlackでサインインできるようにする

こんにちは、富士榮です。


Sign in with SlackがOpenID Connectに対応したので、Azure AD B2Cに繋いでみました。

Slackのドキュメントはこちら



ふむふむ。昔のSlack連携はOAuth2.0でidentity.*というスコープが使われていたところがOpenID Connectに対応したってことですね。

ではやってみましょう。


まずはSlack側にアプリ定義を作成

こちらからSlackアプリ定義を作ります。メインはAzure AD B2C(今回のケースだとRelying Partyになります)に渡すためのclient_id、client_secretを作るための行為です。

Create an Appをクリックするとスクラッチから作るかapp manifestを使って作るかを聞かれますので、今回はスクラッチから作ることにします。


アプリ名と対象となるワークスペースを選択して次へ進みます。


ナビゲーションメニューからOAuth & Permissionsを開きます。


少し下にスクロールするとredirect_uriを設定するところがあるので、Azure AD B2CをRelying Partyとして使う場合のCallback Uriを設定します。以下の形式のUriです。

https://your-tenant-name.b2clogin.com/your-tenant-name.onmicrosoft.com/oauth2/authresp

これでSlack側への設定は終わりです。

左のナビゲーションメニューのBasic Informationからclient_id、client_secretが取得できるのでメモしておきましょう。後でAzure AD B2C側に設定します。


Azure AD B2CにIdentity Providerを設定する

次はAzure AD B2C側です。

IDプロバイダのメニューから新しいOpenID Connectプロバイダーをクリックして設定を開始します。

必要なのは以下の設定です。

  • 名前:適当に
  • メタデータURL:https://slack.com/.well-known/openid-configuration
  • クライアントID、シークレット:Slack側で取得した値
  • スコープ:openid profile email
  • 応答の種類:code
  • 応答モード:form_post
  • ドメインのヒント:なし
  • IDプロバイダーの要求のマッピング
    • ユーザーID:sub
    • 表示名:name
    • 名:given_name
    • 姓:family_name
    • 電子メール:email

上記を設定して保存をしたら設定はおしまいです。


ユーザーフローを実行してみる

早速ですが適当なユーザーフローを作ってテストしてみます。アプリはお馴染みのhttps://jwt.msを使います。

フローを実行するとSlackへリダイレクトされて権限に関する同意を要求されます。
その後、素直にAzure AD B2Cへ戻り、Slackから取得した属性が渡ってきていることが確認できます。



ということで、サクッと15分くらいでできてしまうので、ぜひみなさまも試してみてください。




2021年7月23日金曜日

必読!「デジタルアイデンティティー」

 こんにちは、富士榮です。


ついに発売されました。米OpenID Foundation理事長の崎村夏彦さんによるデジタルアイデンティティに関する集大成とも言える書籍、その名も「デジタルアイデンティティー 経営者が知らないサイバービジネスの核心」です。

献本いただきましたので早速熟読してみました。


もう一言では言い尽くせないのですが、何しろ素晴らしい。(ボキャブラリー不足、、汗)

ここまで体系的かつ広い視点でデジタルアイデンティティに関して俯瞰した書籍は洋書を含めて存在していなかったんじゃないか?と思います。(Phil Windleyの「Digital Identity」はもちろん良書ですが、如何せん2004年の書籍なので古くなってきています)


とにかくこちらから購入できるので、まだの人は今すぐポチるのです。


ざっと感想を含め見どころを。

  • 言葉の定義が経緯を含めとにかく丁寧に書かれている
    • これを見ると世の中に出回っている記事がどれだけ適当な理解で書かれているのかわかってしまいます。この辺がこの領域をわかりにくくしている原因の一つだと思います。
  • 技術仕様がなぜ必要なのか、OAuth/OpenID Connectがなぜ必要となったのか、など歴史的な経緯を含め解説されている
    • 頑張って仕様を読んでも、あくまで結果をみているだけなので、なぜこのような仕様になったのか?がわからず腹に落ちにくい点もあると思います。もちろん解説記事やイベントでのプレゼンテーションは存在するのですが、分散してしまっているので体系的に理解するのは至難の業です。
  • FAPIやeKYC&IDAなど若い仕様についても言及されている
    • 単純にフレームワークとしてのOAuth/OpenID Connectだけでは不足している実世界でのユースケースと対応するためのプロファイル群についても詳細に記載されている。
  • よく知っている事件を例に何が必要だったのかを解説しており、理解しやすい
    • ドコモ口座事件、SBI証券の不正出金の件、Facebookのアクセストークン漏洩事件などIT業界のみならず広く報道された事件の裏側がデジタルアイデンティティの側面から解説されており、腹落ちしやすい。
  • プライバシーと個人情報保護の関係、トラストフレームワークなどビジネス担当も技術担当も周辺知識として知っておく必要がある知識もカバーしている
    • まさにサブタイトルにもなっている「経営者がしならない〜」という点にも繋がりますが、システム担当だけでなくビジネス担当やまさに経営者の方も知らなかった、では済まされないプライバシー尊重に関する考え方についても非常に易しく書かれており、非技術者でも読みやすい。

書き始めるとキリがないので、この辺りでやめておきます。

また、大きな特徴として「他の文献への参照が異常に少ない」という点が挙げられると思います。これは常に第一線でデジタルアイデンティティに取り組んでこられた崎村さん自身が執筆している、ということが大きく影響していると思われます。つまり、本書は今後の文献では一次ソースとして扱われることになる、ということを示しています。その点においても必携・必読であるとも言えます。


ちなみに、OpenIDファウンデーション・ジャパンでは崎村さんをお招きして本書の見所解説などを直接お話しいただく出版記念イベントを企画している最中です。こちらは纏まりましたら改めてお知らせしたいと思います。(サインもらえるかも!)

2020年5月20日水曜日

Build速報!FacebookでAzure ADへログインする

こんにちは、富士榮です。

Buildですね。リモート開催になって日本からでも参加しやすくなって睡眠時間が削られる日々をお過ごしだと思います。

今回も色々とAzure ADに関する新機能の発表がありました。

詳しくはAlexのBlogを参照してもらえれば良いのですが、今回はAzure AD B2Bの直接フェデレーションへのFacebookログインの登場(Public Preview)の話です。

AlexのBlog)
https://techcommunity.microsoft.com/t5/azure-active-directory-identity/build-2020-fostering-a-secure-and-trustworthy-app-ecosystem-for/ba-p/1257360

Azure AD B2Bの直接フェデレーションについてはこれまでも取り上げてきましたが、Googleに対応してから約2年、ここに来てFacebookに対応しました。

Googleとの連携の件
https://idmlab.eidentity.jp/2018/08/azure-ad-b2bgoogleid.html

カスタムドメイン vs 直接フェデレーションの件
https://idmlab.eidentity.jp/2020/05/azure-adbyoid.html



もはやB2Bとは?というしかない状態なのですが、早速触ってみましょう。

外部アイデンティティプロバイダの設定

これまでも紹介したことのある画面です。Azure ADのポータルを開き、External Identitiesメニューから「すべてのIDプロバイダー」を開くと「Google」に加えて新たに「Facebook」が選べるようになっています。


ここでFacebookを追加して、AppIdとAppSecretを追加すれば基本は終わりなのですが、設定前に外部ユーザによるサインアップを許可しておく必要があります。
「外部コラボレーションの設定」メニューを見ると、新しく「ユーザーフローによるゲストセルフサービスサインアップを有効にする」という設定が追加されているので有効にしておきましょう。

後はFacebook Developerコンソールで作成したアプリケーションのAppIdとAppSecretを設定すれば終わりです。

Facebook側の設定方法はAzure AD B2Cのドキュメントに記載がありますので、1点を除いてこちらをそのまま使って大丈夫です。
https://docs.microsoft.com/en-us/azure/active-directory-b2c/identity-provider-facebook

その1点とは、そうですredirect_uriです。
直接フェデレーションの場合にFacebookに設定するredirect_uriはどうなるのか?というと、
https://login.microsoftonline.com/te/{テナントID}/oauth2/authresp
となります。

ここまで設定を進めると、ユーザーフローからAzure ADにアクセスするためのアプリケーション「aad-extensions-app」が自動的に登録されます。


ちなみに、このアプリケーションを削除すると面倒なことになるので、消さないようにしてください。
万一消してしまったらAzure AD B2Cでのb2c-extension-appと同じように回復をしてください。
参考)B2Cでの回復手順
https://docs.microsoft.com/ja-jp/azure/active-directory-b2c/extensions-app


ユーザーフローの登録

外部IDプロバイダの設定が終わったら、次はユーザーフローの登録です。
基本この辺りもAzure AD B2Cと同じです。


ユーザーフローの名称(ポリシー名となります)、利用するIDプロバイダ、連携する属性を設定していきます。
尚、属性は標準で用意されているもの以外に「カスタムのユーザー属性」メニューから自分で好きな属性を追加することもできます。

これでIDプロバイダとユーザーフローの登録はおしまいです。

アプリケーションの登録

次に、先ほど作成したユーザーフローを使ってサインアップやサインインを行う対象となるアプリケーションを登録します。
ポイントは、APIのアクセス許可で「User.Read」スコープに対して管理者による同意をしておくこと、です。現状のユーザーフローでのユーザ作成やログイン時にユーザ自身による同意が上手く取れない?のでこの設定は入れておく必要がありそうです。

ユーザーフローとアプリケーションの紐づけ

アプリケーションを作成したら、先に作成しておいたユーザーフローを使う様に構成をします。
先ほどのExternal Identitiesメニューに戻り、先ほど作成したユーザーフローを開きます。アプリケーションに関する設定項目がありますので、ここで作成したアプリケーションを指定します。

これで一通りの設定は終了です。

動作確認

では早速動かしてみます。

このアプリケーションにアクセスする為には、以下のパラメータをつけてAuthorizationエンドポイント(https://login.microsoftonline.com/{テナントID}/oauth2/authorize)へアクセスする必要があります。(通常のOpenID Connectのアプリケーションと同じです)

  • client_id={登録したアプリのClient Id}
  • response_type=id_token
  • scope=openid
  • nonce={生成したnonceの値。テストなら何でもOK}
  • redirect_uri={登録したアプリのredirect_url}

今回、アプリケーションとしてはhttps://jwt.msを使ったのでこんなURLになります。
https://login.microsoftonline.com/{テナントID}/oauth2/authorize?client_id={クライアントID}&response_type=id_token&scope=openid&nonce=hoge&redirect_uri=https:%2F%2Fjwt.ms

実行してみると、いつものサインイン画面になるので、まずはアカウントを作成します。

アカウントの作成画面に「Facebookアカウントでサインイン」というメニューが出来ています。
ここでFacebookアカウントでサインインすると、Azure ADへのアカウント登録を行う際に追加で登録するアカウントを入力する画面が出てきます。

続行するとアカウントがAzure AD上に登録されます。
アカウントタイプはゲスト、ソースはFacebookになっているのがわかります。


ちなみに登録後、サインインする場合はサインインオプションをクリックするとFacebookログインのメニューが出ていますので、そちらを使ってサインインします。


いかがでしょうか?
基本はAzure AD B2Cの機能の一部を通常のAzure ADの直接フェデレーション向けに開放しただけなので、Azure AD B2Cに慣れている方は直感的に理解できると思います。

しかし、冒頭にも書きましたが、こうなってくると「B2Bとは?」という疑問がやはり出てきますが大人しくしておきましょう。

おまけ

たまたまテストに使ったAzure ADにG-SuiteとのSSO設定があったので、SAMLの属性マッピングの調整をちょこっとして、GmailにAzure ADの直接フェデレーションを使ってFacebookアカウントでログインする、というくだらないものを作ってみたので動画を貼っておきます。

2019年6月28日金曜日

Identiverse 2019参加メモ(Day3)

こんにちは、富士榮です。

いよいよ3日目です。そろそろ疲れてきました。
これまでの日記はこちらから。



ということで今日もはじめて行きます。
まずはキーノートから。

◆キーノート

  • Digital Identity for the People by Richard Bird
    • Chief Customer Information Officerの人
    • 人々が自分のアイデンティティをデジタル社会に持つ時代になってきた
    • シートベルトなどと同じく、Consumer保護の考え方はデジタル社会が始まった当時は存在せず、後からポリシーがついてきた
    • GDPR、CCPAは果たしてConsumerの保護になっているのか?
      • 現実問題、施行後にも4億以上のアカウント漏洩が発生している
    • では何が足りないのか?
      • データ保護≠アイデンティティ保護
    • 結局のところ、アイデンティティの保護は人を守ること
      • いくらそのリンクをクリックしてはいけないと言ってもクリックする
      • 現実の数字として、
        • US国民の20%が家に鍵をかけない
        • 63%の強盗は押しいらなくても犯行ができてしまっている
    • デジタル社会で自分を守るということは?
      • データ保護とアイデンティティ保護は同一ではないことを認識する
      • MFAなどでアイデンティティを守ることが必要


  • Digital Identity - A Strategic Imperative by Grant Schneider
    • US FederalのCISOの人
    • 資料なしのプレゼンだったのであんまり拾えてないです
    • アイデンティティ管理はセキュリティのために非常に重要なものであると考えている
    • US連邦のサイバーセキュリティ戦略目標はデジタル社会におけるナショナルセキュリティと経済的なセキュリティを高めること、つまり「いかにして国家と国民の資産を保護するか」が命題
    • そのために、色々と守らなきゃダメ
      • Federal Cyber Security(税金や年金など)
      • 重大インフラのセキュリティ(金融システムや交通システムなど)
    • CEOやCIOがリスクマネージメントをできるように教育することも大事
    • もちろんプライバシーも大事なので、ペルソナの使い分けなども意識しないとだめ
    • アイデンティティ保証も大事だよ
  • The next wave of Identity Standard by Alex Simons
    • アイデンティティに関する標準の3つの波
      • オンプレミス
      • クラウドとモバイル
      • 分権とプライバシー by デザイン
    • オンプレミスにおける相互運用性と利便性の向上
      • 全てがFirewallの内側にある前提
      • ESSO、LDAPの組み合わせによるPasswordインジェクション
      • KerberosによるトークンベースのSSO
      • このころの攻撃はSlammerなどサーバの脆弱性を狙ったものが多かった
    • クラウドとモバイルの世界のためのアイデンティティ
      • SAML:広く使われるようになった最初の標準技術
      • OAuth1.0:実装が難しかったよね
      • OAuth2.0、OpenID Connect:現在のマイクロソフトのソフトウェアはPowerPointからAzureまでこの標準に従っている
        • 2019年6月のデータではAzure ADに接続されているアプリケーションの95%がOAuthもしくはOpenID Connectを使っている
      • このころになると攻撃手段が変わってきて、パスワード盗難がメインとなってきた
        • 81%のデータ漏洩の原因がパスワード盗難に起因している
      • こうなると多要素認証が必要となる
        • FIDO2。すでにWindows10やAndroidは準拠している
      • 次はパスワードレスの時代へ向かっている
        • Azure ADのパスワードレスのデモ(YubikeyでOffice365ポータルへログオンしてます)
        • 2019年7月にようやくAzure AD+FIDOのパブリックプレビューがリリースされる
        • 現状8億のユーザがパスワードレスを有効化している
        • 月間8500万ユーザがパスワードレスでログインしている
      • Token Binding
        • TLSだけじゃない
        • dPOPも
      • SCIM
        • 2019年6月のデータでは675万ユーザがSCIMでプロビジョニングされた
        • Mark Wahlが新しいSCIMのプロファイルを提案している
    • 分権とプライバシー by デザイン
      • 全ての人が自分のアイデンティティを自分でコントロールできる世界へ
      • DIDのデモ(昨日と同じもの) by Ankur Patel
      • まだまだこれから
    • とりあえず、今すぐやるべきこと
      • OpenID Connect、OAuthを使いましょう
      • モダンプロトコルに対応しましょう
      • パスワードレスの時代です
      • とにかく多要素認証を有効化しましょう。99%のID盗難は防げるよ

  • Standards: The Bedrock of Identity
    • パネルディスカッション
      • モデレーター:Pamela Dingle
      • パネリスト:Kim Cameron, Vittorio Bertocci, Brian Campbell, Annabel Backman
    • パネルはきつい。。。あんまり拾えてないです
    • それぞれがフォーカスしている/してきた標準仕様について紹介
    • そういえばVittorioはws-*の人だったなぁ
    • 標準化関連のミーティングはグローバルのあちこちで開催されるのは、みんなに参加してもらいたいから
    • しかしSAMLはなんで800ページにも及ぶ巨大なモノリスになってしまったのか
      • 何にでも対応できるように色々と組み込んでしまった
      • 結果、拡張が難しい巨大な仕様になってしまった
    • その反省を踏まえ、OAuth、OpenID Connectではシンプルなことをシンプルに実装できるように、という原則に則って設計をした
    • SecEventの話し。
      • SSOの世界ではリスクが顕在化した時にドミノ現象で伝搬してしまうので、リスクイベントの標準的な伝達方法が必要となった
    • プロトコル設計をする時はシンプルにすることが大事
      • DIDとOIDC、FIDOを組み合わせることで使いやすい姿を模索するなど
    • これからこの世界をドライブしていこうとしている人たちへメッセージは?
      • 標準化の世界へぜひ参加して
      • コミュニティへ参加すること。メーリングリストがあるので、そこでユースケースや考えたことを共有するところから。Don't be shy!
      • 言語の壁もあるかも知れないけど気にするな

◆ブレークアウトセッション

  • The Identity Architecture Panel
    • パネルディスカッション
      • モデレーター:Barber Amin
      • パネリスト:Kristina Williams, Greg Smith, Stephanie Kesler, Kim Cameron
    • やっぱりパネルはきつい・・・
    • ゼロ・トラストの世界。ブロックからモニター、緩和へ
    • 企業は従業員にとってのIdentity Providerが、管理者はSAMLを知っているわけではないし、我々(IDaaS事業者)はインフラの形を変え管理者が何もしなくても良い世界を作ろうとしている
    • プライバシーはコンシューマだけでなく従業員にとっても非常に重要
      • CIAMのアプローチでは管理者はアイデンティティを管理することができない
      • エンタープライズIAMの世界では管理者が従業員のアイデンティティを管理する
      • コンテキストに合わせた柔軟なユーザージャーニーが必要である
      • マイクロソフトは固定的なログインを柔軟にするためにIdentity Experience Framework(IEF)を提供している
      • IEFを使えば、コンテキストに合わせた柔軟なユーザージャーニーを提供することが可能である
      • 例えば、HRシステムの重要なデータへアクセスする際は追加の認証を要求する、なども考えなければならない
    • どのようにして開発者にプライバシーを保護を意識させるのか?
      • 教育なども重要
      • データの分類と評価がまずは大事
    • 昨年、テレコム企業の課金システムのリプレイスを行なった
      • アーキテクチャの全面書き換えを行った
      • 保護されたAPIやデータへのアクセスをトークンを使って制御することにした
    • CCPAがあるけど、何かアドバイスは?
      • まずはデータを特定して分類するところから始めましょう
    • DIDについて
      • iPhone上のデータは誰の持ち物?Appleもデータのコントロールできちゃうよね
      • 個人データは借財。これは長くは続かない。DIDとかブロックチェーンが解決の糸口になるかもしれない
      • 5年から10年くらいはかかるかな
    • 今後我々はどんなテクノロジーをキャッチアップしていけばいい?
      • AI(プライバシーも考慮して)
      • FIDO2
      • コンテキストに合わせたユーザージャーニー(IEF)
      • マシンラーニング
      • Decentralized Identity

  • Blurring the boundaries between CIAM and IAM / Microsoft
    • アイデンティティはセキュリティの要である
    • 社内外とのコラボレーションのあり方の変化
      • B2Bシナリオ
        • パートナー側でアイデンティティを管理する
        • つまりBYOID
      • B2Cシナリオ
        • セルフサインアップ
        • 同じくBYOID
    • こうやってみるとB2BもB2Cも同じ
      • アカウントを作って
      • 承認して
      • アクセスできるようになる
    • 共通しているのは人を中心に据えていること
    • サンプルケース1
      • 個人が複数のロールを担うことがある(不動産のオーナーだったり、売主だったり、従業員だったり)
      • 一つのGoogleアカウントでサインアップ〜サインインする(Azure AD B2B)
      • システム側でロールを切り替えられるような実装をすることで、役割ごとにユーザアカウントを個別に作る必要がなくなる
    • サンプルケース2
      • 大学のケース
      • 入学希望して、受験生となって、学生になって、卒業生になって、大学院に入ってまた学生になって、学校に就職して職員となって。。というライフサイクル単位でアカウントを作るのではなく、一つのアカウントの状態を変えていく
    • 共通するのは、一つのアカウントを関係性に応じて変化させていく、という考え方

  • Identity Proofing - What Happens Before Authentication by Capital One
    • Identity Proofingとは
      • 個人に関する情報を集めて検証するプロセス
      • アカウントをオープンする時に実行したりする
      • 認証とは異なる
    • なぜIdentity Proofingが重要なのか
      • 認証して認可してシステムやデータへアクセスさせるが、そもそも「誰?」という部分を知らなければならないため
    • NIST SP800-63Aにおける定義
      • Resolution
      • Validation
      • Verification
    • Identity Assurance Levelとは
      • 検証に使うエビデンスと方法の品質
    • 企業におけるシナリオ
      • 雇用時
        • バックグラウンドチェック
        • 対面での書類確認
        • 初期クレデンシャルの発行
      • クレデンシャルのリカバリ時
        • パスワードレスのシナリオの場合
        • 免許証などのドキュメントをビデオ会議で見せて確認する
    • コンシューマの世界におけるIdentity Proofing
      • スピードと正確性とコストが大切
      • 時間がかかると顧客はドロップしてしまう
    • 色々な方法
      • モバイルデバイスを使った確認
        • SMSへのコード送信
      • ドキュメントを使った確認
        • 券面のスキャン、バーコードのスキャン
        • 券面のスキャンはPhotoShop対策も合わせて必要
    • リスクベースアプローチが必要
      • Identity ProofingはRiskスコアと同義でもある
    • まとめ
      • 一般的にユーザが提供したり手動で入力した個人データは不正確である
      • システム横断で使えるRiskスコアが必要
      • データソースを増やして、検証の精度を高めるためには外部ベンダーとの協業が必要である(Capital Oneとか)

  • Frictionless Identity Verification by ADP
    • ADP自体はセキュリティの会社ではなく、HCMの会社
    • 40Mくらいのアクティブユーザー数がある
    • 次のチャレンジはユーザエクスペリエンスの改善
    • 現状、ADPのサービスに従業員がセルフ登録する方法は以下の通り
      • Federated SSO
      • Personal Code
      • Company Code
      • Codeless Registration(モバイル向け)
    • これまでIdentity Assuranceを担保するためにやってきたこと
      • Bot Protection(ロボットよけ)
      • AIベースのアイデンティティ確認
      • 知識ベースの認証
      • デバイスベースのリスク管理
      • 外部ベンダとの協業(Capital One)
    • 登録時のユーザージャーニーを整理し、70%のコンバージョンを実現した

  • So You Think You Can Two Factor by Nishant
    • 多要素認証を使う時
      • PSD2など法令により必須な時
    • 認証要素は非常に多岐にわたっている
    • これらを単純に提供するのは説明書なしで家具を組み立てさせるようなもの
    • どのように利用させる要素を考えるか
      • ユーザが使いやすいもの
      • コスト
      • 対応する脅威モデル
      • 効果
      • 法令遵守
    • 生体認証はセキュリティではなく、利便性のためにある
    • 生体情報(いわゆる身体的な特徴情報)はすでに必須ではない
    • ユーザの行動、デバイスID(Fingerpirnt)を使ったアノマリ検知も可能(機械学習ベース)
    • ユーザへの浸透(使い慣れているものを使う)
      • Googleは7年前から2要素認証を提供しているが利用している人は10%程度だった
      • Yubikeyに対応したら登録者が増えた、なぜならYubikeyを使っている人が増えたから
      • ユーザはリスクを理解しているわけではない
      • Googleは2要素認証を強制はしていない。なぜならサービスを使わせたいから
    • オムニチャネルの検討
      • UX向上の別の例
      • コンタクトセンターでの認証をスマホで行う、などチャネルを分離することによるUX向上とセキュリティ向上の両方を実現
    • プロセス自体の検討
      • 付与
        • 第1要素を付与する時に同時に2要素目の登録を行う
        • 間が空くと弱いタイミングができてしまう
      • バックアップを取得する
      • 緊急避難のパスを作っておく
      • リカバリプロセスを作っておく(例えばSMSや免許証での検証など)
      • 第2要素の破棄の方法を考えておく
    • まとめると以下が大事
      • ちゃんと使えること
      • 複数の方法を用意しておくこと
      • ユーザが受け入れられること
      • オムニチャネルの検討
      • 管理プロセスの検討

  • Why Governments are still important even in a Self-Sovereign Context by Adam Cooper
    • 近い将来、デジタルアイデンティティが人々のプライマリのIDになったと仮定するとどうなるだろうか
    • 政府機関の役割
      • 法律を整備する
      • アイデンティティドキュメントを交付する
      • 住民登録データを記録・保管する
    • SSIやDIDのような新しい仕組みはそれらの役割を代替するものではなく、相互運用するものである
    • 実際にアイデンティティを使う際にはアイデンティティそのものよりも適格であるかどうかの方がはるかに大切である
      • 例えば、支払い能力はあるか、など
    • そうなると、政府機関の提供するアイデンティティはトラストの源泉としての役割を持つ
    • 個人は自身のアイデンティティを提示する際に、信頼できて検証可能であることを望む
    • つまり、ポータブルで信頼に裏打ちされた状態において、自身でアイデンティティの管理を行える状態が望ましい
    • 結局トラストフレームワークが鍵となる

  • Developing World Identity
    • パネルディスカッション
      • モデレーター:Jeremy Grant
      • パネリスト:Adam Cooper, Vyjayanti Desal, Kaliya Young
    • ID4Dの取り組みの紹介(World Bank)
      • LIC(Low Income Countries)にフォーカスしている
        • ペルー、インド、パキスタン、タイなどで活動
      • デジタルIDは全ての基盤となる
        • Financial Inclusion
        • Healthcare
        • Women's Empowerment
        • Social Protection
        • Education
      • 他にもペーパーレス・トランザクション(Paymentなど)を行う上でも必要なものである
      • ID4Dの3つのアプローチ
        • Thought Leadership & Analytics
        • Country & Regional Action
        • Global Platform & Convening
      • 啓発活動を含め各種ドキュメントの発行なども行なったり、原則をプラクティスへ落とし込む活動をしている
      • グローバルで一つの大きなIDシステムを作ろうとしているわけではなく、各国がオープンなIDシステムをもち、相互運用性を持てるような世界を目指していく
    • Aadhaarの話(Kaliya)
      • 2000年代初頭、IDシステムをどうやって変えていくか考えた
      • 国民を登録する台帳は存在、ローカルガバメントが誕生・死亡の登録を管理していた
      • Nandan Nilekani氏が閣僚となり、インドのユニークIDのオーソリティを作ることとなった
      • 最低限実行可能なID基盤として以下をもつ
        • 名前、生年月日、性別、住所
        • 生体情報(写真、2つの虹彩情報、10の指紋情報)
        • (ボーナス。必要か?)電話番号、メールアドレス、銀行口座情報
      • 登録時はセントラルレポジトリへデータが送られ、ユニーク性のチェック後、IDが発行され、カードが送付される(なんのセキュリティ機能もないカード)
      • Aadhaarを使った認証の方式
        • Aadhaar番号と名前、住所
        • Aadhaar番号と生体情報
        • Aadhaar番号とワンタイムパスワード
        • Aadhaar番号と多要素認証
        • (KYC時は)Aadhaar番号と生体情報+eKYCドキュメントの名前と住所
      • 問題点
        • 住民のゴールデンレコードができてしまう
        • セキュリティ保護されていないカードが存在する
        • 地方の支局に行くと生体情報の確認ができないことがある
        • ワンタイムパスワードを使おうとしても携帯電話番号を持っていない人がいる
      • 良い点
        • みんなが持っている
        • ユニバーサルである



と、本編はここまでです。
この後、イベントのFounderであるPing IdentityのCEO、Andre主催のパーティに参加してきました。Newseumという報道関係の博物館を貸し切っての大イベントでした。
ちなみにベルリンの壁とかがありました。
しかし何と言っても目玉はID厨だけで構成されているバンド、ZZAuthです。
メンバが以上に豪華です。Eve Malar, Justin Ritcher, Alex Weinert, Pamela Dingle, Sofia-Cristineなどなど・・・





ということでいよいよ次回は最終日です。

2019年6月27日木曜日

Identiverse 2019参加メモ(Day2)

こんにちは、富士榮です。

昨日に引き続きワシントンDCで開かれているIdentiverse 2019への参加メモです。
※Identiverseとはなんぞや?という方は昨日のポストをご覧下さい。

2日目となる本日はKeynoteから始まるある意味本格的にイベントがスタートする日でした。しかしイベントをホストしているPing IdentityのCEOのAndre Durandさんのパワーはすごいですね。10年間この規模になるまでイベントを続けている気力もそうですし、毎回どこからともなく物凄いゲストを連れて来ているのが驚きです。以前はレオナルド・ディカプリオ主演の映画「キャッチ・ミー・イフ・ユー・キャン」の主人公のモデルとなったフランク・アバグネイル氏が出て来て金融詐欺(まさにID盗難)についてKeynoteで語ってくれたりしましたし、今回の目玉はもちろんSteve Wozniak氏ですが、さらにKeynoteスピーカーとしてイリノイ州議員のBill Foster氏が登場してデジタル・アイデンティティについて語る、という豪華なKeynoteから始まりました。

と言うことで2日目のおさらい+αをお届けしたいと思います。

◆キーノート

  • Weathering the Storm: Future Proofing with Identity by Andre Durand
    • Internetとmobilityの発達により、いたるところにアプリケーションが組み込まれる時代となった結果、脅威もいたるところに存在する、と言う状態となっている
    • このようなDisruptionに対して効果的に適応して生き延びていくには重大かつ予測可能な領域を見据えて効率的に投資をしていく必要がある
    • 例えば、自然現象を整理すると以下のように分類可能である
      • メキシコに落下した隕石による破壊は重大だが予測不可能だった
      • 竜巻による破壊の重大性はそれほど大きくなく、かつ予測も難しい
      • 嵐の重大性はそれほど大きくないが、予測はある程度可能である
      • 大型台風による破壊の重大性は大きく、予測も可能である
    • 我々はこの中の重大性が高く、予測可能な領域(大型台風)へ投資を集中しなければならない
    • 例えばこの領域としてあげられるのが、以下の項目である
      • イノベーションの速度
      • カスタマー体験
      • プライバシーとコンプライアンス
      • スマートなアイデンティティ(AI)
      • 境界の消滅
    • それぞれに対する対応は以下の通りである
      • イノベーションの速度
        • 基本方針はAgilityを持つこと
        • 標準に対応する
          • 使うもの;SAML、OAuth、OpenID Connect
          • 投資するもの:SCIM、PSD2、OpenBanking
          • 新しく出て来たもの:WebAuthn、Secevent
        • APIを有効活用する
        • クラウドを活用する
      • カスタマー体験
        • UXの質により顧客が支払う額は変わってくる
          • 86%の顧客がより良いカスタマー体験に対して支払う
          • 82%の顧客が貧弱なカスタマー体験により去る
        • アイデンティティに関する良いカスタマー体験とは、フリクションレスでパーソナライズされた世界のことである
        • より良い体験とは体験していることに気が付かないことである
          • パスワードレス:QR、NFC、BLE
          • 標準:WebAuthn、OpenID Connect
          • ウェアラブル:AppleWatch
      • プライバシーとコンプライアンス
        • FacebookやMicrosoftなど事故もあったけどコンプライアンスが重要って言っている
        • 同意の管理が主なキーワードとなる
      • スマートなアイデンティティ(AI)
        • 過去4年間で270%の成長を見せた
        • センサーとシグナルをスマートなアイデンティティ(Intelligent Identity)により機会と脅威に分類、パーソナライズした世界を実現することができる
      • 境界の消滅
        • クラウドの台頭、デバイスの普及によりネットワーク境界は消滅、アイデンティティが境界となっている
        • アイデンティティによりゼロトラストセキュリティを実現することができる
    • 結局のところ、勝者となるには以下のことが必要
      • ディスラプションを予測・理解する
      • 何が起きるかを予測する
      • プロアクティブにディスラプションを乗りこなす
    • 波を乗りこなしましょう!

  • Aspiring the Future by Bill Foster
    • 元々は科学者で議員
    • 議員の出身を科学者、法律家、政治家の3つに分けると、
      • US議会には科学者がほとんどいない
      • 中国の議会には科学者出身者が多い
      • EUはバランスが良い
    • 科学者の頃は陽子の減衰の研究をやったり、加速器を開発して衝突の観測をしたりしていた
    • 両親がキャピトルヒルで出会った、という過去もあり政治の道へ(科学と政治がUNIONIZED)
    • 2006年に秘書としてキャリアをスタートし、2008年に初当選した
    • セキュアなデジタルアイデンティティは重要である
      • オンラインセキュリティの要であると考えている
      • Fintechなどのテクノロジーに必要である
      • USはエストニアや韓国に対して後塵を拝している
    • 先般、大きな勝利を収めた
      • 電子健康レコードからユニーク識別子を消す、ことを廃止できた
      • 過去21年間にわたり、連邦はユニーク識別子を消して来た
      • このことにより毎年数千人が亡くなっていた
      • また、医者が麻薬を購入することが可能となっていた
    • 米国政府はデジタルアイデンティティの重要性を理解して来ている
      • 誰もJUNKやSPAMを望まず
      • 政府は個人の識別子を付与する役割を持つ
    • これからはAIが搭載されたスマートフォンが普及してくる
      • 多要素認証デバイスとしても利用できる
      • PIIを持ち運ぶこともできる
      • 選択的開示がもっと浸透してくる



  • Next Generation IDM: managing identities for people by Andrew Nash
    • おなじみAndrew Nashのセッション
    • アイデンティティ管理の歴史を振り返りつつ未来を語る
      • LDAP、X.400・・・
      • Identrus、Federal CA・・・
      • MS Passport、SAML、Liberty、Hailstorm・・・
      • OpenID、Infocard、7 Laws of Identity、PayPal・・・
      • OIX、OpenID Connect、NSTIC・・・
    • アイデンティティ情報は新しいユーザ体験の時代へ
      • CapitalOneのアカウントで他のサービスへサインアップ
      • 免許証で他のサービスへサインアップ
    • 新しいアイデンティティの姿とは
      • 自分の情報を
      • 自分のデバイスで
      • 同意に基づき、最低限の共有を行うことにより
      • KYCコストを削減したり、Identity Verificationの最適化を行う
    • Identity Providerが中心の世界からユーザが中心となる世界へ


  • Building Identity Professionals by Sarah Squire
    • IDPro枠ですね
    • 基本的な考え方として希少価値の高いものは高価である
    • アイデンティティオタクも同様である
    • みんなアイデンティティオタクになろう!そして市場価値を高めよう
    • IDProのメンバにサーベイしたところ、41%がIdentityのプロになるには5年から10年はかかると回答した
    • 学校では教えてくれない領域なのでどうすれば良いのか??
    • プロジェクトマネージャーも同じような状況なので、調べてみると、1996年にPMBOKが出てからPM人口が一気に増加したことがわかった
    • そこで、IDPro Body of Knowledgeの作成に取り掛かった
      • 基本的な考え方は、対象の領域について自分よりも知っている人間は誰か?というアプローチ
      • 40のセクションと88のサブセクションで構成
    • 今ではたくさんの企業会員、個人会員に支えられている。Come an Join us!

◆ブレークアウトセッション

ここからはブレークアウトセッションです。
  • A Modern Architecture for Customer Identity Services by GM
    • GMのIdentityアーキテクトによるGMの顧客ID管理のアーキテクチャの解説
    • サービスと顧客を接続するためにアイデンティティを整備する必要性があった
    • しかし、アイデンティティは見えないくらいがちょうどよく、シームレスな顧客体験が重要であると考えている(Invisible Identity)
    • その考えのもと、CIAMを以下の4つのコンポーネントに分離してデザインした
      • Identity
      • Profile
      • Preference
      • Intelligence
    • IDaaSにするかOnpremにするか悩んだけどアタックへの対応などはIDaaSに一日の長があるのでIDaaS(Azure AD?)を選んだ
    • OIDCなどの標準に対応するのはもうすでにオプションではなく必須である
    • 結局大事なのは、
      • 標準を乗りこなす
      • 統制の効いたアーキテクチャをデザイン・実行する
      • 戦略と同期する


  • Bring Your Own Identity: A Skeptical look at Social Login and Single SignOn by Gerry Gebel
    • 元Burtonグループの人でBYOI(今でいうBYOID)のコンセプトを2008年に発表した人
    • モチベーションとしては、
      • 多くのクレデンシャルがサービス提供者によって管理されている状況がいやだ
      • 登録プロセスが面倒だ
      • UXの改善が必要だ
    • プライバシーに関する再考も必要
      • モダンなテクノロジー(スマホなど)
      • Techジャイアント(MSやUberなど)
    • Identity/Credentialの集中化により容易になってしまうこと
      • トラッキング
      • 紐付け
      • データコントロールの弱さ
      • 透明性の欠如
      • 監視
    • 実際、US連邦政府による電話のモニタリングとかあったよね
    • 最近は進歩したのか?
      • VerizonやAT&Tは顧客データを売るのをやめた
      • Apple login?
      • UMA、SSI
    • 今、できることは?
      • アイデンティティとCredentialを分離する
      • Techジャイアントからログオフする


ここから午後のセッションはお休みしてスミソニアン博物館へ出かけました!

◆(おまけ)スミソニアン博物館(航空宇宙博物館)

スミソニアン博物館ってライト兄弟のイメージしかなかったんですが、一つの博物館を指しているのではなく、博物館群を指しているそうです。知りませんでした。今回は時間もなかったので航空宇宙博物館へ行ってきました。

入り口

入り口を入った瞬間にスタートレックがあるのはご愛嬌

月面着陸艇のレプリカ

ライト兄弟のフライヤー号!

他にも色々ありましたが、この辺りで。
しかし日差しが強く、外はものすごく暑かったです。。

◆夕方からのブレークアウトセッション

夕方になり、セッションへ復帰しました。
  • Microsoft Presents: Designing for Decentralized identity and claim-based identity management by Ankur Patel
    • IONの話です。デモもあり面白かったです。
    • 感じている課題感としては、アプリケーション毎にUsernameとパスワードを保持していることによる不便さや結果発生する漏洩、監査が困難になることによる余計なコストの発生など
    • カスタマーのニーズを追っていくとそれぞれ以下のテーマがある
      • 個人
        • プライバシー
        • 個人でデータをコントロールしたい
        • 情報漏洩から保護してほしい
      • 組織
        • 信頼できVerifyできるアイデンティティ
        • コラボレーション(B2BのID管理は大変)
        • GDPR、KYC、AMLのコストを削減したい
      • 政府
        • クロスボーダー、クロスエージェンシーのID
        • 難民向けのID付与
        • 社会的、経済的なインクルージョン
    • IONを使ったデモ
      • シナリオは、
        • 学位の付与(学生証)
        • 学割で本が購入できる
    • IONの設計思想
      • ユーザは一つ以上のDIDを持つことができる
      • DIDはDLTの系をまたいで解決できる必要がある
      • DIDのパーミションはユーザだけがアクセスできる鍵により管理される
      • 属性情報はオフチェインに保存される
      • ユーザは複数のIdentityHubを持つ
    • 次のステップ
      • 簡単に使えるようにする:エコシステムの構築
      • 性能とスケーラビリティ:IONがまさに目指すところ
      • DIFへの参加とコラボレーション・コントリビューション




ここまでです。

この後、OpenID Foundation x Financial Data Exchangeの会食があり参加させてもらいましたが、みなさんAPI保護、KYCなどについて熱く議論をしていて非常に面白かったです。この辺は書けませんが。

後、会食からの帰り道にホワイトハウスも眺めてきました。
G20でトランプ大統領は大阪にいるはずなので、入れ替わりだな・・・とか思ったりしつつw
夜なので、あんまり綺麗に写りませんでしたが。


ということでまた明日。