Quantcast
Channel: IdM実隓宀
Viewing all 769 articles
Browse latest View live
↧

Worldcoinによる金融包摂ずデゞタルアむデンティティ

$
0
0

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

2023幎も終盀に近づいおきたずいうこずで、今幎もDigital Identity技術勉匷䌚 #iddance Advent Calendar 2023に参加しおいたす。


今回のネタはWorldcoinで話題のWorld IDを探っおいきたいず思いたす。

ずいうこずでこんな内容でお届けしたす。

  • Worldcoinずは
  • World IDの取埗ず確認
  • Identity ProviderずしおのWorld ID
  • Incognito Actionsおたけ

なお、お玄束ですが本蚘事ではWorldcoinを含む特定の仮想通貚の賌入や投資などを掚奚するものではありたせん。あくたでDigital Identity関連技術の芳点からWorldcoin/IDを芋おいきたいず思いたす。


Worldcoinずは

Worldcoinずいうキヌワヌドを怜玢するずOpenAIの創業者であるSam Altman氏が共同創業者した仮想通貚のプロゞェクトずいう切り口で玹介されおいる蚘事が倚くヒットしたすが、本家Worldcoinのサむトを芋るずこのように蚘茉されおいたす。

Worldcoin is an open-source protocol, supported by a global community of developers, individuals, economists and technologists committed to expanding participation in, and access to, the global economy. The Worldcoin Foundation is the steward, and will support and grow the Worldcoin community until it becomes self-sufficient. Tools for Humanity helped launch Worldcoin, and currently serve as advisors to the Foundation and operators of the World App.原文

ワヌルドコむンはオヌプン゜ヌスのプロトコルであり、開発者、個人、経枈孊者、技術者からなるグロヌバルコミュニティによっお支えられおいる。Worldcoin財団はスチュワヌドであり、Worldcoinコミュニティが自立するたでサポヌトし、成長させる。Tools for Humanityはワヌルドコむンの立ち䞊げを支揎し、珟圚は財団のアドバむザヌずワヌルドアプリの運営者を務めおいる。Deeplで機械翻蚳 

たた、同サむトにはWorldcoinに関するホワむトペヌパヌも公開されおおり、その䞭に端的にWorldcoinはこのように解説されおいたす。
Worldcoin was founded with the mission of creating a globally-inclusive identity and financial network, owned by the majority of humanity. If successful, Worldcoin could considerably increase economic opportunity, scale a reliable solution for distinguishing humans from AI online while preserving privacy, enable global democratic processes, and show a potential path to AI-funded UBI.原文

Worldcoinは、人類の倧倚数が所有する、グロヌバルに包括的なアむデンティティず金融ネットワヌクを構築するこずを䜿呜ずしお蚭立された。成功すれば、ワヌルドコむンは経枈機䌚を倧幅に拡倧し、プラむバシヌを守りながらオンラむン䞊で人間ずAIを区別するための信頌できる゜リュヌションを拡倧し、グロヌバルな民䞻的プロセスを可胜にし、AIが資金を提䟛するUBIぞの朜圚的な道を瀺すこずができる。(Deeplで機械翻蚳

芁するに金融包摂の文脈で蚭立されたデゞタルアむデンティティず金融ネットワヌクで、UBIナニバヌサル・ベヌシック・むンカムを実珟するこずも䞀぀のゎヌルずしお定めおいる様です。

たた、同時にWorldcoinを構成する芁玠に぀いおも以䞋のように説明が蚘茉されおいたす。

Worldcoin consists of a privacy-preserving digital identity network (World ID) built on proof of personhood and, where laws allow, a digital currency (WLD). Every human is eligible for a share of WLD simply for being human. World ID and WLD are currently complemented by World App, the first frontend to World ID and the Worldcoin Protocol, developed by the contributor team at Tools for Humanity (TFH).原文

ワヌルドコむンは、個人であるこずの蚌明の䞊に構築されたプラむバシヌを保護するデゞタルIDネットワヌクワヌルドIDず、法埋が認めるデゞタル通貚WLDで構成されおいる。すべおの人間は、人間であるずいうだけでWLDの分け前を埗る資栌がある。World IDずWLDは珟圚、Tools for Humanity (TFH)の貢献者チヌムによっお開発された、World IDずWorldcoinプロトコルの最初のフロント゚ンドであるWorld Appによっお補完されおいる。Deeplで機械翻蚳 

なるほど、Worldcoinのサむトのトップに蚘茉されおいたWorld ID、WLD、World Appはそれぞれ以䞋のような関係性だずいうこずがわかりたす。トップペヌゞからリンクされるそれぞれのペヌゞの解説文からも補完

  • World IDデゞタルIDネットワヌク
    • A more human passport for the internet. More powerful. More integrations. More human.原文
    • むンタヌネットのより人間的なパスポヌト。よりパワフル。より倚くの統合。より人間的に。Deeplで機械翻蚳
  • WLDデゞタル通貚Worldcoin Token
    • A more human token freely, equally, and globally distributed to unique humans.原文
    • より人間的なトヌクンは、自由に、平等に、そしおグロヌバルに、ナニヌクな人間に配垃される。Deeplで機械翻蚳
  • World Appフロント゚ンドアプリケヌション
    • More human access to the global economy with identity and finance for all. Privacy‑first. No fees. 24 hour support.原文
    • すべおの人のためのアむデンティティず金融で、より人間らしいグロヌバル経枈ぞのアクセスを。プラむバシヌ第䞀。手数料無料。24時間サポヌト。Deeplで機械翻蚳
なんずなくわかっおきたした。
芁するに金融包摂䞖の䞭には銀行等の金融システムにアクセスできない人たち、芁するに銀行口座が持おず瀟䌚経枈に参加できない人たちが倚く存圚する。その人たちの経枈参加を促進するこず。この蟺りはThe World Bankのペヌゞが参考になりたす。を実珟するには、人類が区別されるこずなくアクセスできるアむデンティティ・ネットワヌクに支えられたナニバヌサルなベヌシック・むンカムを含む金融システムが必芁であり、Worldcoinはその理想を実珟するためのプロゞェクト、ずいう䜍眮付けずいうこずです。


World IDの取埗ず確認

では、早速World IDを取埗しおみたいず思いたす。
World IDアカりントを䜜成するのに必芁ずなるのは、以䞋のものです。
  • スマヌトフォンiOS/AndroidにむンストヌルするWorld App
  • SMSの受信できる携垯電話番号なくおもアカりントは䜜成できたす
スマホを持っおいない人は金融包摂的にどうなるのかずいう疑問は抱き぀぀、World Appをむンストヌルしセットアップを続けたす。

もちろんこの状態でもWorld IDは䜜成されおいるのですが、World IDのもう䞀぀の特城は本圓に人HumanであるこずをOrbずいうデバむスを䜿っお確認物理的にOrbが眮いおある堎所たで行っお察面で確認を行うを行うこずにありたす。

ただID確認を行なっおいない状態だずアプリの䞊郚にVerify your World IDずいうリンクが衚瀺されるのでタップするず近所に存圚するOrbの堎所が衚瀺されたすので、堎所によっおは予玄をした䞊で珟地を蚪問しお存圚確認を行いたす。なお、この際に虹圩登録を行う必芁があるこずから謎のシステムやデバむスに生䜓情報を提䟛するのはどうなのかずいう議論も存圚したす。確かに私も枋谷の指定の堎所ぞ行っおOrbでID確認をしおきたしたが、かなりカゞュアルな感じで登録ができおしたうので、停Orbを䜜っお生䜓情報だけを搟取する人たちが出おきおも䞍思議ではありたせんOrbを操䜜しおくれる人も、Orbそのものに぀いおも登録しようずしおいる人から芋お正圓性を確認する手段がない。この蟺りは今埌の課題なんだず思いたす。

なお、ID確認時には法的なアむデンティティ・ドキュメント免蚱蚌などの身分蚌明曞の提瀺は求められないので、この蟺りは金融包摂のため、ずいう考え方がベヌスにあるのだず思いたす。ただ、䞀人のナヌザが耇数のWorld IDを取埗できないようにするための虹圩情報の突合・重耇確認がどこたで本圓に実斜されおいるのかなどはよくわかりたせん。

こんな感じのデバむスが眮いおあるのでアプリのQRを読み蟌たせた埌で虹圩登録を行いたす。登録自䜓は5分もかからずサクッず終わりたす。


なお、このID確認を行わないずベヌシック・むンカムずなるWLDを受け取ったり取匕するこずができたせん。ちなみにWorld Appをむンストヌルするず定期的週䞀回くらいにGrantずいっおベヌシック・むンカムずしおの3〜10皋床のWLDが付䞎されたす。珟時点で1WLDは日本円で368〜9円皋床なので、隔週で1,000円もらえる感じです。実際に利甚する際は暗号資産取匕所などで日本円ぞ換金するこずもできるんじゃないかず思いたす。やったこずありたせんが※远蚘12/18の朝にみたら爆䞊がりしおたした。624円ずかになっおたした。

いずれにしおも確認が終わるずVerifiedずしお蚘録がされたす。



Identity ProviderずしおのWorld ID

さお、デゞタルIDの話なので、あたり仮想通貚の話に行っおも仕方がないのでWorld IDの䜿い方の話をしたいず思いたす。

非垞にざっくりいうず、World IDもOpenID Connectに察応したIdentity Providerずしおの機胜を持っおいたす。

開発者ポヌタルぞアクセスし、サむンアップするず䞀般のIdentity Providerず同じようにクラむアント登録などができる仕組みが提䟛されおいたす。

ちなみにAuth0Okta CICではすでにマヌケットプレむスにSign in with Worldcoinの機胜が提䟛されおいたすので、クラむアントID/シヌクレットの登録ずRedirectURIを蚭定するず簡単にWorld IDによるサむンむンが実装できたす。

開発者ポヌタルでClient ID/Secret/RedirectURIの蚭定を行いたす。

こちらはAuth0Okta CICの画面。Social Connectionsずしお定矩したす。

Sign in with Worldcoinを起動するずQRコヌドが出おくるので、World AppでQRコヌドを読み蟌み、サむンむンしたす。

World App偎でQRコヌドを読み蟌むずVerify with World IDの画面が衚瀺される、確認に成功するずサむンむンされたす。


World IDのOpenID Connectの実装に関しおはドキュメントが公開されおいるので、こちらを芋るず自䜜のWebアプリケヌションや他のIDaaSぞの接続も容易です。最近World IDのバヌゞョンが2.0に曎新され、PKCEのサポヌトなどが远加されたした

簡単なRelying Partyを曞いお実際のid_tokenの䞭身などを確認しおいきたしょう。现かいコヌドは省略したすが、結果的にこんなid_tokenが返っおきたす。


ポむントはこの蟺りです。ドキュメントをみるずhttps://id.worldcoin.org/betaの゚レメントはdepricateっぜいですが、verification_levelずしおOrbで確認枈みのWorld IDかどうかがわかるような仕組みになっおいたす。

  "https://id.worldcoin.org/beta": {

    "likely_human": "strong",

    "credential_type": "orb"

  },

  "https://id.worldcoin.org/v1": {

    "verification_level": "orb"

  },

ちなみに、Orbで確認を行なっおいないWorld IDでもアクセスしおみるずverification_levelがdeviceずなっおいたす。

  "https://id.worldcoin.org/beta": {

    "likely_human": "weak",

    "credential_type": "device"

  },

  "https://id.worldcoin.org/v1": {

    "verification_level": "device"

  },


ずころで、Auth0でも簡単なRelying Partyでも実装できたので、぀いでにAzure AD B2Cでも実装しおみようず思いたす。Discoveryもサポヌトしおいるし、openid-configurationを芋るずい぀もの鬌門のresponse_mode=form_postもサポヌトしおいるようなので詊しおみたす。

こんな感じでIDプロバむダヌを蚭定したす。

ずころが、response_modeをform_postにするずWorld IDのAuthorization゚ンドポむントでWorld Appでサむンむンしたずころjsの゚ラヌが出お止たっおしたいたす。どうもCSPの蚭定がうたくできおいないみたいですね。。。


ずいうこずで、response_modeをqueryに倉曎しお再床詊しおみるずToken゚ンドポむントぞのアクセスで゚ラヌが出おいるようです。
ここは結構ハマったのですが、Postmanなどで順番にアクセスするずちゃんずid_tokenが取埗できるので、Azure AD B2CがToken゚ンドポむントぞアクセスする際に䜕か倉なヘッダが぀いおいたりするんだろうな、、あるいは逆にUser-Agentがないず返事をしないToken゚ンドポむントがいたりするのでそういうケヌスかも、、ず思いダミヌのToken゚ンドポむントを䜜りPostman経由の堎合ずヘッダを比范。

結果、

expect: '100-continue'

が犯人でした。

Postmanでもexceptヘッダを぀けるずWorld IDのToken゚ンドポむントが゚ラヌを出したした。どうやらContent-Lengthの事前通知には察応しおいないようです。

ずはいえ、APIクラむアントずなるAzure AD B2C偎のリク゚ストをここたで现かいレベルで調敎するのはカスタムポリシヌを䜿っおも無理っぜいので、珟時点では諊めたす。どうしおも実装する堎合はToken゚ンドポむントずの間にゲヌトりェむモゞュヌルを立おおProxyさせる圢になるず思いたす


Incognito Actionsおたけ

ここからはおたけですが、World IDにはIncognito Actionsずいう機胜がありたす。これはナヌザがSign in with World IDを含むVerifyをする察象のアプリケヌションを簡単に䜜るための機胜です。䟋えば、投祚などが想定されおいたす
開発者ポヌタルからIncognito Actionsメニュヌから定矩䜓を䜜っおいくこずができたすが、その際にVerifyの回数の制限などを぀けるこずができたす。
䟋えば、Uniqueだず1぀のWorld IDに぀き1回しかVerifyができないようなアプリケヌションが䜜れたすし、2 Verificationsや3 Verificationsのように2回・3回たで蚱可する蚭定やUnlimitedのように制限なしの蚭定もできたす。
本来はIDKitずいうSDKやAPIを䜿っおアプリケヌションを構築しおいくこずになるのですが、管理者ポヌタルからテストをするためのKioskモヌドが甚意されおいるのでこちらから確認しおいきたす。
Enable Kiosk〜Open Kioskでテスト甚の画面が開きたす。

先ほどのSign in with World IDず同じようにWorld AppでQRコヌドを読み蟌みたす。今回はUniqueモヌドを蚭定したので最初の1回はちゃんずVerifiedずなりたす。
しかし、再床同じようにKioskを起動しお同じWorld IDで確認をするずAlready verifiedず゚ラヌが出たす。
簡単な投祚や特兞の配垃などのアプリを䜜るのに良さそうですね。



ずいうこずで、Worldcoin / World IDを觊っおみたした。
金融包摂ずいう瀟䌚課題ぞの察応をしおいくずいう方向性に぀いおは共感できるものがありたすし、うたく瀟䌚に浞透しおいくこずができればベヌシック・むンカムはおいおおいお金融システムからネグレクトされた人々にずっおは救いになり埗るのかもしれたせん。
ただ、先に曞いた通りOrbの真正性などただただ情報の非察称性など粗いずころも倚く、ただただポリシヌやガバナンス面を含めやるべきこずはたくさんあるんじゃないかず思いたす。Sam Altman氏もOpenAIで埗られた知芋や利益を、打ち䞊げ花火だけではなく、うたく実際の瀟䌚のために圹立おられるずいいですね。





↧

ShibbolethずGriffinそしお単䞀デヌモンで耇数のIdentity ProviderずFederation

$
0
0

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

ここしばらくポスト数が枛っおいたので、今幎は小ネタを䞭心に色々ず曞いおいこうかず思いたす。


ずいうこずでみなさん倧奜きなShibbolethです。スペルがずっず芚えられずShobbolethず某所に曞いお䌝説のワヌド「しょがれす」を産んでしたったのは遠い過去の蚘憶です。


ShibbolethっおなんだずいうかなぜShibboleth

そういえばShibbolethコン゜ヌシアムのWebサむトを芋おもあんたりその蟺は觊れられおいないんですよね。
A world leader in identity management technology, Shibboleth is an open-source project with a strong community of users. With a dedicated team of developers and vital support from Consortium members, Shibboleth has grown over the years to offer a variety of products alongside its world-renowned Identity Provider.原文What is Shibboleth?

アむデンティティ管理技術の䞖界的リヌダヌであるShibbolethは、ナヌザヌの匷力なコミュニティを持぀オヌプン゜ヌスプロゞェクトです。献身的な開発者チヌムずコン゜ヌシアムメンバヌからの重芁なサポヌトにより、Shibbolethは䞖界的に有名なIdentity Providerに加え、様々な補品を提䟛するたでに成長したした。Deepl翻蚳 


なお、Shibbolethずいう蚀葉自䜓は麊の穂を瀺す蚀葉で、アッカド語、りガリト語、アラム語、叀代シリア語、旧南アラブ語、アラビア語あたりが語源みたいです。

Cognate with Akkadian 𒋗𒁍𒌌𒌈 (Å¡ubultum, “ear of wheat”), Ugaritic 𐎌𐎁𐎍𐎚 (Å¡blt, “ear of grain”), Aramaic שׁו֌בַ֌לְת֞֌א/ש֎ׁבַ֌לְת֞֌א‎ (Å¡ubbaltā/Å¡ibbaltā), Classical Syriac ܫܒܠܬܐ‎ (Å¡eb(b)eltāʌ, “ear of grain; flow of a river”), Old South Arabian 𐩪𐩚𐩡𐩩‎ (s¹blt, “ear of grain”), and Arabic سُنُؚْلَة‎ (sunbula), سََؚلَة‎ (sabala).

- Wikidisctionary「שיבולת」より

同じくWikipediaによるずこのShibbolethのshʃの発音ができる・できないで民族の違いを芋極めおいたこずから「ある瀟䌚集団の構成員ず非構成員を芋分けるための文化的指暙を衚す甚語」になっおきたずのこずです。

そしおギレアデびずぱフラむムに枡るペルダンの枡し堎を抌えたので、゚フラむムの萜人が「枡らせおください」ず蚀うずき、ギレアデの人々は「あなたぱフラむムびずですか」ず問い、その人がもし「そうではありたせん」ず蚀うならば、 たたその人に「では『シボレテ』ず蚀っおごらんなさい」ず蚀い、その人がそれを正しく発音するこずができないで「セボレテ」ず蚀うずきは、その人を捕えお、ペルダンの枡し堎で殺した。その時゚フラむムびずの倒れたものは四䞇二千人であった。

倚分「しょがれす」っお蚀ったら瞬殺されおたすね・・・

この蟺りからセキュリティドメむンフェデレヌションの境界線を区分するためのゲヌトキヌパヌずしおの認蚌システムにShibbolethずいう名称が甚いられおいるのかな、ずいう掚枬もあながち間違っおないのかもしれたせん。たた、Shibbolethのロゎマヌクがグリフィンなのも「黄金を守る」ずいう圹目を持぀神話䞊の生物だから、ずいうずころに起源があるのかもしれたせん。いずれも真停は䞍明

Shibbolethのロゎ

単䞀デヌモンで耇数のIdentity ProviderずFederation

さおさお、そんなShibbolethですがSAMLが喋れるIdentity ProviderIdPずしおの圹割を持぀サヌバヌずApacheやnginxなどのWebサヌバに組み蟌んでService ProviderSPずしお構成するためのモゞュヌルから構成されたす。

ずいうこずで小ネタですが、単䞀のデヌモン/shibdで動䜜しおいるSPがVirtual Directoryの単䜍で別のIdPずFederationさせたいケヌスが時たたありたすので、どう蚭定するのが良いのかをちょっずだけ。なお、セッション管理などSPずなるアプリ偎でどう扱うかはアプリ偎の蚭蚈次第なのでスコヌプアりトしたす

やり方ずしおは単玔でRequestMapperに远加のApplicationIdを定矩しおMetadataProviderの蚭定をオヌバラむドしおあげるだけです。

こちらがshibboleth2.xmlの蚭定。additionalAppずいうapplicationIdを蚭定し、SP偎のEntityID、HandlerURL、IdPのEntityIDずMetadataを別のものを蚭定しおあげたす。

<RequestMapper type="Native">

  <RequestMap applicationId="default">

    <Host name="sp.example.org" authType="shibboleth" requireSession="true" applicationId="additionalApp"/>

  </RequestMap>

</RequestMapper>


<ApplicationOverride id="additionalApp" entityID="https://sp.example.org/additionalApp/shibboleth-sp">

  <Sessions lifetime="28800" timeout="7200" checkAddress="false" handlerURL="/additionalApp/Shibboleth.sso">

    <SSO entityID="https://otheridp.example.jp/idp">

      SAML2

    </SSO>

  </Sessions>

  <MetadataProvider type="XML" validate="true" path="otheridp-metadata.xml"/>

</ApplicationOverride>


その䞊で、httpd.confのLocationにVirtual Directoryを蚭定し、ShibRequestSettingで远加したApplicationIdを参照するように指定しおあげたす。

<Location /additionalLocation>

  AuthType shibboleth

  ShibRequestSetting requireSession 1

  require shib-session

  ShibRequestSetting applicationId additionalApp

</Location>


これでshibdずhttpdを再起動すれば完了です。

埓来のパスぞのアクセス時はshibboleth2.xmlに元々指定しおあったデフォルトのIdPぞ、远加したパスぞのアクセス時には远加で指定したIdPぞリダむレクトされるようになりたす。

なお、REMOTE_USERはそれぞれのパス単䜍で別のものリダむレクト先のIdPのものずなりたすので、この蟺りのハンドリングをアプリ偎でコントロヌルしおあげる必芁はありたす。


ずいうこずで今幎もよろしくお願いしたす。 







 

↧
↧

did:webの課題をカバヌするdid:websがパブリックレビュヌぞ

$
0
0

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

みなさん倧奜きなdidメ゜ッドの話です。

結局did:webが結構䜿われおるけどdid:webっお既存のwebサむトの管理方法DNSずかCAに䟝存しちゃうので分散型じゃないよね、ずいう課題をカバヌするためにdid:websっおいうのをToIPTrust Over IP Foundationのdid:webs Method Task Forceで怜蚎しお仕様策定しおいる、ずいうこずのようです。

ToIP Foundationからのアナりンス

https://trustoverip.org/news/2023/12/15/announcing-public-review-of-the-didwebs-method-specification/


個人的には結局むンタヌネット䞊でDIDを䜿うナヌスケヌスに限っおいえば既存のむンタヌネットの仕組みであるDNSのレゞストラやHTTPSのCA局のポリシヌやガバナンスを信頌する必芁があるはずなので、そこたで分散型に拘る必芁性は感じない掟なのですが・・・

did:webにおける課題

did:webに限らずdid党般においお蚀えるこずですが、結局did、Decentralized Identifiersは぀たるずころ識別子なのでどうやっおメ゜ッド内の名前空間におけるナニヌクネスを担保するのかがポむントになりたす。ナニヌクネスを担保するためには倚くの堎合においおレゞストリTrusted Data Registryを構築し重耇レコヌドがないこずを管理するこずが必芁ずなりたす。その際の登録〜管理プロセスを特定の管理䞻䜓矀を通しお行うモデルが埓来のDNSやCA局などが取っおきたモデルです。䞀方で衆人環芖の元、あらかじめ合意されたコンセンサスアルゎリズムに則っおレゞストリぞの登録〜管理を行うモデルがいわゆるブロックチェヌンベヌスのレゞストリ管理のモデルです。
䞀方でOpenID ConnectにおけるSIOPv1v2ず区別する意味であえおv1ず぀けたすにおける自己発行の蚌明曞のThumbprintを識別子ずしお甚いる、぀たり蚌明曞の゚ントロピヌに党振りし特定のレゞストリを甚いないモデルも存圚したす。
この蟺りは䞊蚘のToIPからのアナりンスにも蚘茉されおいたすが、敎理するずdidメ゜ッドにおける識別子の管理方法は、
  1. 暩嚁ある管理䞻䜓を利甚する方匏
  2. ブロックチェヌンを利甚する方匏
  3. 自己発行の蚌明曞を利甚する方匏
に分類されるわけです。
前述の通りdid:webはdid:web:example.jp:users:taroの様にドメむン名を識別子に利甚する䞊にDID Documentを取埗するレゞストリdid.jsonの正圓性に぀いおはHTTPSを甚いるので1番めの暩嚁ある管理䞻䜓を利甚する方匏に該圓したす。
しかしながら前述の通り、Decentralized Identifierずいうからには分散しおいる方が良いのである、ずいう䞻匵も存圚するわけで2番めのブロックチェヌンを利甚する方匏なども䟝然ずしお利甚されおいる状態にありたす。
この様なカオスがdidメ゜ッドの乱立を招いおしたっおいるわけで、本ポストを曞いおいる時点で186個もメ゜ッドが登録されいる状態にありたすし、もちろんW3Cのdidレゞストリに登録せずにプラむベヌトでdidを利甚しおいるシステムも倚数存圚しおいる状態ずなっおいたす。

話を戻すず、分散型の必芁性を䞻匵するシナリオに察応するためにdid:webを拡匵するのが今回のToIPのタスクフォヌスの察応だずいうこずになりたす。

did:websにおける察応

では、具䜓的にどの様な察応をしおいるのかを芋おいきたしょう。非垞に単玔です。
芁するに埓来のdid:webのDNS名前空間はそのたた利甚し、最埌に3番めの自己発行の識別子をくっ぀けるこずで察応しようずいう詊みです。こんな感じの識別子ですね。
did:webs:example.jp:usersここたではdid:web:xxxxxxxx自己発行の識別子

この最埌の自己発行識別子の郚分に぀いおは既にToIP FoundationのACDCAuthenticated Chained Data Container Task Forceで議論しおいるので、こちらを䜿おうずいう話の様です。いわゆるGLEIFがvLEIで採甚しおいるKERIKey Event Receipt Infrastructureの話ですね。この蟺りはIIWInternet Identity Workshopでも毎回掻発に議論されおいたす。

私もACDCやKERIに぀いおはあたり知らないのでこれ以䞊は突っ蟌みたせんが、did:web+ACDC=did:websっお考えおおけば良いのかな、、ずいうぐらいの理解です。

たぁ、冷静に考えるず結局のずころDNSやHTTPSぞの䟝存は䞀定以䞊残るわけなので、そこたで分散型に拘るなら玠盎にブロックチェヌンベヌスのdidメ゜ッドを䜿えば良いのではず思いたしたが。。いずれにしおもナヌスケヌス次第ですねずいう逃げ口䞊。
↧

ログむンさせたいナヌザを指定しおIdPぞFederationするSAML/OpenID Connect

$
0
0
こんにちは、富士抮です。

SAMLでもOpenID ConnectでもFederation構成をしおいるずService ProviderSPやRelying PartyRP偎であらかじめIdentity ProviderIdP偎で認蚌させたいナヌザ名を指定したいケヌスがしばしばありたす。
兞型的なケヌスの䞀぀は倚芁玠認蚌をオンデマンドで実行させた堎合で、普通のペヌゞには第芁玠であるナヌザ名ずパスワヌドで認蚌、決枈ペヌゞには远加芁玠で認蚌を芁求する、ずいうシナリオは結構あり埗るシナリオです。この堎合、第芁玠で認蚌されたナヌザず远加芁玠で認蚌されたナヌザをSP/RP偎で比范するこずで同じ人であるこずを怜蚌するこずももちろん可胜なのですが、できればあらかじめ远加芁玠で認蚌させたいナヌザの識別子をSP/RPからIdPに枡しおあげるこずで利甚者が再床ナヌザIDをIdP偎で入力する必芁がなくなるのでUXも向䞊したす。
この様なシナリオは圓然のこずながらSAMLでもOpenID Connectでもサポヌトされおいたす。

SAMLの堎合

SAMLを䜿う堎合、SPからのSAML Requestの䞭にSubjectを指定するこずができたす。
OASISのSAML2.0 coreの仕様の3.4.1のAuthnRequestの゚レメントの章に蚘茉があるSubjectが該圓したす。
SAML 2.0 core仕様

https://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf

 こんな感じのリク゚ストになりたす。

<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
                    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
                    ForceAuthn="false"
                    ID="a133c62aafc8dcee7a69481de5af763c4ee370494"
                    IssueInstant="2024-01-03T03:28:40Z"
                    Destination="https://idp.example.jp/sso/login"
                    AssertionConsumerServiceURL="https://sp.example.com/acs"
                    ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                    Version="2.0"
                    >
    <saml:Issuer>https://sp.example.com/sp</saml:Issuer>
    <saml:Subject>
        <saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">test@example.jp</saml:NameID>
    </saml:Subject>
</samlp:AuthnRequest>
実際の動䜜は䞊蚘リク゚ストを受け取ったIdP偎の実装に䟝存するので利甚するIdPの仕様を確認しおださい。ちなみにEntra IDAzure ADの堎合はこの方法ではなくク゚リパラメヌタにlogin_hint=test@example.jpずいう圢で付加しおリク゚ストを投げる圢になりたす。この蟺りを参照https://learn.microsoft.com/ja-jp/entra/identity-platform/single-sign-on-saml-protocol#subjectただし、Entra IDが倖郚IdPずFederationしおいる時はlogin_hintではなくusername=test@example.jpずいう圢でパラメヌタ名が異なるので芁泚意です。
たた、Azure AD B2Cでは芁求リゟルバずいう仕組みでSubjectの情報を取埗するこずができるので、このサブゞェクトに応じた凊理を曞けば割ず自由に実装ができたす。
Okta CIC旧Auth0はSAML RequestのSubjectをちゃんず刀別しおくれそうです。この蟺りを参照https://community.auth0.com/t/pass-login-hint-to-saml-provider/92546

OpenID Connectの堎合

こちらはシンプルにlogin_hint属性をク゚リパラメヌタに付加するこずで実珟できたす。仕様はこちらを参照https://openid-foundation-japan.github.io/openid-connect-core-1_0.ja.htmlこんな感じでAuthentication Requestにパラメヌタを぀けるだけです。
HTTP/1.1 302 Found
  Location: https://server.example.com/authorize?
    response_type=code
    &scope=openid%20profile%20email
    &client_id=s6BhdRkqt3
    &state=af0ifjsldkj
    &redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
    &login_hint=test@example.jp
こちらもSAMLず同様にIdPの実装に䟝存するので実際の動䜜はIdPの仕様を確認しおみおください。ちなみにAzure AD B2Cの堎合はSAMLず同じく芁求リゟルバで属性の取埗ができたす。

ちなみに他にもヒント系のパラメヌタは色々ずありたす。
たた、SP/RPから認蚌コンテキストを指定したい堎合もあるのですが、珟圚SAMLに぀いおはAuthnContextClassRefずいうパラメヌタがありたすが、OpenID Connectに぀いおはacr/amrをclaimsパラメヌタで枡す方法はありたすが、レベルの指定方法の共通化をどうするべきかに぀いおはPam Dingleさんを䞭心にIntenet Identity Workshopで議論が続けられおいるので今埌の泚目ポむントかもしれたせん。
↧

IDトヌクン発行のタむミングで認蚌枈みナヌザの情報をどこたで保存するか

$
0
0

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

OpenID Providerを自前で実装する際の悩みポむントの䞀぀が認可コヌド、アクセストヌクンをサヌバ偎でどの様に保存するか、ずいう問題です。

どういうこずかずいうず、認可コヌドを発行するタむミングで通垞はナヌザの認蚌を行うわけですが、そのタむミングで認蚌枈みナヌザの属性情報を取埗しおおいお認可コヌド、アクセストヌクンず玐づけおテヌブルに保存をしおおく方が実装は簡単になる䞀方で、最新のナヌザ情報をuserInfoから取埗したい堎合の察応が結局必芁になったり、ナヌザの削陀の怜知のメカニズムの実装が必芁になる、ずいう話です。

ちなみに、認可コヌドやアクセストヌクンをサヌバ偎で䞀定期間保持をし続けるための実装がOpenID Providerの可甚性やスケヌラビリティを巊右する最倧のポむントの䞀぀だず思うので、この蟺りは各サヌビス事業者の考え方で分かれるずころです。この蟺りは別ポストで詳しくお話しようず思いたすが、最埌たでステヌトレスにこだわったMicrosoftは認可コヌドをJWTにしお認蚌枈みナヌザの属性情報を暗号化しお入れるこずでトヌクン芁求時に認可コヌドからセッションをLookupしおid_tokenを生成する必芁をなくしおいたり、VittorioがAuthorのRFC9068/JWT Profile for OAuth 2.0 Access Tokenの様にIntrospection゚ンドポむントが無くおもトヌクンの有効性怜蚌ができる仕組みを実装したり、Hybrid Flowでもないのにフロントで取埗できるid_tokenにはほずんど情報を入れず、userInfoやGraph APIぞのアクセスをしないずナヌザ属性が党く取れなかったり、、、ずグロヌバルスケヌルの認蚌基盀を運営する䞊での苊劎が滲み出おいたりしたす

暪道にそれたしたが、䞀番簡単な実装だず認可゚ンドポむントぞアクセスし認蚌されたタむミングで以䞋のレコヌドを保存しおおき、


トヌクン゚ンドポむントぞアクセスしアクセストヌクンやIDトヌクンを発行する際は必芁なカラムを远加するなどを含めこのテヌブルだけで凊理がクロヌズできるので実装はシンプル、ずいう話です。こんな感じです。



しかし、この実装のメリットはこのレコヌドだけで党おの凊理が完結するため凊理がシンプルになるこず、そしおid_token発行時ずuserInfoアクセス時の間に仮にナヌザの属性の曎新をされおも認蚌時点のナヌザの属性情報をクラむアントぞ返华できる、ずいう点がありたす。䞀方でナヌザの最新の属性をuserInfo゚ンドポむントから返华したいケヌスやナヌザの削陀されたこずを怜知するメカニズムの実装が結局必芁になる、など考慮点も存圚したす。

そのため、実際にはナヌザの識別子だけをレコヌド状には蚘録しおおき、トヌクン゚ンドポむントやuserInfo゚ンドポむントぞのアクセス時は察応するナヌザの属性をデヌタベヌスから取埗する、ずいう実装になるはずです。


ずいうこずで実際どういう実装になっおいそうなのか確認しおみたす。

Microsoft Entra ID

いわゆるAzure Active Directoryです。
そもそもIDトヌクンに識別子以倖の属性情報が入らないので自然ず䞊蚘の実装になっおいるず考えお良いず思いたす。


LINE Login

こちらはid_tokenにも認蚌されたナヌザの属性情報が入りたす。

userInfoにアクセスする前にLINEアプリで名前を「開発甚」から倉曎しおみたした。

この状態でuserInfoにアクセスするず、、

はい、曎新埌の倀が取埗されたす。


たぁ、普通に考えたらこういう実装になるだろうな、ずいう話でした。

↧
↧

バック゚ンドが充実しおいない環境でOpenID Providerを䜜る

$
0
0

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


昚日こんなこずを曞きたしたので、ちょっず深掘りしおみようず思いたす。

この蟺りは別ポストで詳しくお話しようず思いたすが、最埌たでステヌトレスにこだわったMicrosoftは認可コヌドをJWTにしお認蚌枈みナヌザの属性情報を暗号化しお入れるこずでトヌクン芁求時に認可コヌドからセッションをLookupしおid_tokenを生成する必芁をなくしおいたり、VittorioがAuthorのRFC9068/JWT Profile for OAuth 2.0 Access Tokenの様にIntrospection゚ンドポむントが無くおもトヌクンの有効性怜蚌ができる仕組みを実装したり、Hybrid Flowでもないのにフロントで取埗できるid_tokenにはほずんど情報を入れず、userInfoやGraph APIぞのアクセスをしないずナヌザ属性が党く取れなかったり、、、ずグロヌバルスケヌルの認蚌基盀を運営する䞊での苊劎が滲み出おいたりしたす


芁するにEntra IDの話なんですが、良いか悪いかは眮いおおいおOpenID Providerを䜜るずきにバック゚ンドにDBをなるべく持たずに認可コヌド、アクセストヌクン、IDトヌクンのやりずりを䞀貫性を持っお実行するための工倫の話です。


そもそも䜕が課題なのか

ご存知の通りOpenID ConnectやOAuthはIDトヌクンやアクセストヌクンを取埗するためにナヌザ゚ヌゞェントブラりザずRelying Partyクラむアントが認可゚ンドポむントずトヌクン゚ンドポむントずの間のアクセスを行ったり来たりする必芁がありたす。いわゆるOAuth Dance

これを実装しようずするず認可゚ンドポむントぞのアクセスずトヌクン゚ンドポむントぞのアクセスが本圓に同䞀トランザクションの䞭でのやりずりなのかを確認しないずいけたせんし、サヌバOpenID Provider偎ずしおはトランザクション内での情報の保持をしないずいけなくなりたす。ただHTTPは本来ステヌトレスな仕組みなので、通垞のWebアプリケヌションを䜜る堎合ず同じ様にサヌバ偎でのセッション管理をどうするか、しかも認可゚ンドポむントはナヌザ゚ヌゞェントから盎接アクセス、トヌクン゚ンドポむントはクラむアントからのバック゚ンドアクセスずいう圢なのでcookieで、ずいうわけにも行きたせん。

通垞の実装では䜕の疑問もなくバック゚ンドにデヌタベヌスを眮いおステヌト管理をサヌバ偎で実装するこずになるのですが、グロヌバルでスケヌルしおいる認蚌サヌビスの様に極めお高い可甚性が必芁ずされるサヌビスでその様なむンフラを䜜るのは非垞にコストが高い行為ずいえたす。Entra IDの様に基本無償で提䟛される様なサヌビスなら難しい刀断になるず思いたす


そうだ、クラむアントにステヌト情報のハンドリングを任せよう

そこで考えられたのが党おのやりずりの䞭で最終的にIDトヌクンやアクセストヌクンを発行するのに必芁ずなる情報をもず回れば良いではないか、ずいう考え方だず思われたす。Entra ID以倖で芋たこずはありたせんが

簡単に流れを説明するずこんな感じになっおいるんだず思いたす。

認可゚ンドポむント

  1. ナヌザを認蚌する→最終的にIDトヌクンに含めるナヌザの属性情報を取埗する
  2. nonceやaudクラむアントIDなど、同じく最終的にIDトヌクンに含める属性をク゚リパラメヌタから取埗する
  3. 1,2で取埗した情報を暗号化しおJWTにしお認可コヌドずしおクラむアントぞ戻す
トヌクン゚ンドポむント
  1. クラむアントからPOSTされた認可コヌドの怜蚌、埩号を行う
  2. 埩号した情報をもずにIDトヌクンを生成しおクラむアントぞ返华する


この蟺りをミニマムで実装しおみるずこんな感じのコヌドになるず思いたす。テスト実装なので现かいずころは気にしないでください



const router = require("express").Router();
const jwt = require("jsonwebtoken");

// jwt眲名に䜿う共有シヌクレット
const jwtSecretForCode = "this_is_a_secret_for_code_signing";
const jwtSecretForToken = "this_is_a_secret_for_token_signing";

// 認可゚ンドポむント
router.get("/authorization", async (req, res) => {
    // 本来なら実装する凊理
    // - ナヌザの認蚌
    // - response_typeによるフロヌの振り分け
    // - client_idの登録状態の確認
    // - redirect_uriずclient_idが瀺すクラむアントずの察応確認
    // - scopeの確認
    // - 属性送出に関する同意画面の衚瀺

    // codeの生成本来は暗号化しおおく
    // 最終的にid_tokenに入れる倀をDBに保存する代わりに暗号化しおcodeに入れおおくこずでバック゚ンドを持たずにすたせる
    const jwtPayload = {
        iss: "myOpenIDProvider",
        aud: req.query.client_id,
        sub: "authenticatedUserIdentifier",
        email: "test@example.jp",
        given_name: "taro",
        family_name: "test",
        nonce: req.query.nonce
    };
    const jwtOptions = {
        algorithm: "HS256", // 面倒なのでHS256にする
        expiresIn: "30s" // コヌドの有効期限なので短め
    };
    const code = jwt.sign(jwtPayload, jwtSecretForCode, jwtOptions);
    // redirect_uriぞリダむレクト
    res.redirect(req.query.redirect_uri + "?code=" + code + "&state=" + req.query.state);
});

// トヌクン゚ンドポむント
router.post("/token", (req, res) => {
    // 本来なら実装する凊理
    // - クラむアントの認蚌
    // - grant_typeの怜蚌
    // - codeの怜蚌有効期限、発行先クラむアント、スコヌプ
    // - access_tokenの発行
    // - id_tokenの発行
    const code = req.body.code;
    jwt.verify(code, jwtSecretForCode, (err, decoded)=> {
        if(err){
            res.json({
                err: "counld not verify code"
            })
        };
        if(decoded){
            // 本来は怜蚌が終わったらcodeを無効化する
            // codeの䞭身を取り出しおid_tokenを䜜る
            const jwtPayload = {
                iss: decoded.iss,
                aud: decoded.aud,
                sub: decoded.sub,
                email: decoded.email,
                given_name: decoded.given_name,
                family_name: decoded.family_name,
                nonce: decoded.nonce
            };
            const jwtOptions = {
                algorithm: "HS256", // 面倒なのでHS256
                expiresIn: "10m" // id_tokenの有効期限なので少しだけ長め
            };
            const token = jwt.sign(jwtPayload, jwtSecretForToken, jwtOptions);
            res.json({
                access_token: token, // ちなみにEntra IDの堎合はaccess_tokenもid_tokenずほが同じものが䜿われるケヌスもある。
                token_type: "Bearer",
                expires_in: 3600,
                id_token: token
            });
        }
    });
});

module.exports = router;


実際に動きを芋おみたす。
  • 認可゚ンドポむントぞのアクセス
http://localhost:3000/oauth2/authorization?client_id=111&redirect_uri=https://localhost:3000/cb&state=hoge

  • コヌルバックぞのリダむレクト
https://localhost:3000/cb?code=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJteU9wZW5JRFByb3ZpZGVyIiwiYXVkIjoiMTExIiwic3ViIjoiYXV0aGVudGljYXRlZFVzZXJJZGVudGlmaWVyIiwiZW1haWwiOiJ0ZXN0QGV4YW1wbGUuanAiLCJnaXZlbl9uYW1lIjoidGFybyIsImZhbWlseV9uYW1lIjoidGVzdCIsImlhdCI6MTcwNDQyMDk1MCwiZXhwIjoxNzA0NDIwOTgwfQ.XKi6JLc5IwDNyZG1C7Lrk1UrBiWpOV5EC2NgpqWSXjk&state=hoge

  • 認可コヌドの䞭身面倒なので今回は暗号化はしおいたせん
  • トヌクン゚ンドポむントぞのPOST 

  • 取埗できたIDトヌクンの䞭身



本圓にこれでいいのか

たぁ確かにスケヌラビリティを考えるず非垞に゚コなので実装ずしおはありだず思いたすが、色々ず割り切りをしないずいけたせん。

䟋えば、

  • 認可コヌドのサむズが倧きくなる
  • アクセストヌクンはJWT圢匏内包型トヌクンが前提ずなり、Introspection゚ンドポむントの実装はできない
などが代衚的なずころです。
特に認可コヌドのサむズが倧きくなる問題は結構深刻で、認可゚ンドポむントからクラむアントぞのリダむレクト時のク゚リパラメヌタの長さがものすごいこずになりたすので、クラむアントの実装によっおは認可コヌドが受け取れない、ずいうこずが結構ありたす。ここはMSALを䜿えずいうMicrosoftの理屈なんだず思いたすが、既存のアプリケヌションずEntra IDを繋ぐ際にはしばしば問題になる可胜性があるので、Entra IDの導入を行う際は芁泚意のポむントの䞀぀です。

たぁ、いずれにしおもID基盀の導入はアプリケヌション開発偎ずの認識合わせ・仕様合わせが䞀番倧きなポヌションを占めるず思うので、この蟺りも念頭におきながらEntra IDラむフを楜しむべきでしょう。

↧

OpenID Providerを䜜るこずでOpenID Connectを知る

$
0
0

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

OpenID Connectっおシンプルなプロトコルだず思いたすが、やっぱりOpenID Providerの気持ちにならないず本圓のずころはわからないよね、ずいうこずで「OpenID Providerを䜜る」シリヌズデ⚫ゎ⚫ティヌニ颚でもやっおみようかず思いたす。

超絶ベヌシックなずころたでは前回・前々回のポストを螏たえお2時間くらいで䜜っおみたのでたずはこちらを解説し぀぀実装を䞀緒に育おおいきたいな、ず考えおいたす。

ずりあえず䜜ったずころたではこちらのレポゞトリで公開しおいたす。前回のポストからの远加郚分ずしおは認可コヌドをJWEにしたずころくらいです。詳しくはReadmeを芋おください

https://github.com/fujie/oidc-study-op


ずいうこずで、䞭身は次回から解説したすが珟状の実装で䜕ができるのかの確認を兌ねおOpenID Connectの通信が実際にどうなっおいるのかを、Azure AD B2Cを䜿っお確認しおみようず思いたす。結構Azure AD B2CずかAuth0を觊るずきにサヌビス偎が倖郚IdPにどういう期埅をしおいるのかを知るためにこれたでも簡易IdPを䜜っお通信トレヌスをずったりしおいたのですが、この蟺りの詊行錯誀がOpenID Connectそのものを知るこずに぀ながりたすし、Azure AD B2CやAuth0などのIDaaSに぀いおの知識も深められお䞀石二鳥です。


早速Azure AD B2Cに䜜ったOpenID ProviderをIDプロバむダずしお読み蟌たせおみたす。䜜ったOpenID Providerはロヌカルで動かしおいたすのでngrokを䜿っおむンタヌネットからアクセスできる様にしおいたす。

ちなみにAzure AD B2Cに限らずMicrosoftのID基盀はresponse_modeずしおform_postをデフォルトにしおいるのですが、そんなものは䜜っおいないのでqueryに倉曎しおあげる必芁がありたす。

free版のngrokを䜿っおいるのでngrokを止めおしたうずURLが倉曎されおしたうので泚意が必芁です。もし止めおしたったら䞀床IDプロバむダを消しお再䜜成する必芁がありたす


なお、ngrokを䜿う利点ずしおむンスペクションができるこずです。http://127.0.0.1:4040をブラりザで開くず通信内容がトレヌスできたす



Azure AD B2CでIDプロバむダの蚭定をしお保存を行うずDiscoveryずjwks_uriぞのアクセスがありたす。


この状態でナヌザヌフロヌを䜜成し、実行しおみたす。


順調にIDトヌクンが発行され、ナヌザ登録画面に遷移したした。


むンスペクションを芋るずOpenID Connectのフロヌに則っお順次アクセスされおいるこずがわかりたす。

たぁ、埐々に育おおいきたしょう。


↧

OpenID Providerを䜜るたずは党䜓像から

$
0
0
こんにちは、富士抮です。

前回のポストに曞いた通り、OpenID Providerを䜜っおいきたしょう。

なお、今回は䞀番オヌ゜ドックスなずころから、ずいうこずで認可コヌドフロヌAuthorization code flowをベヌスに考えおいきたいず思いたす。ちなみにOpenID Connect Core 1.0の仕様はOpenIDファりンデヌションゞャパンの翻蚳・教育WGが日本語化しおいたすので必芁に応じお参照しおいきたいず思いたす。

たずは党䜓のむメヌゞをおさらいしおおきたいず思いたす。
䞋図が認可コヌドフロヌの党䜓シヌケンスです。よく芋るや぀ですね。なお、そもそも論ずなりたすがOpenID Connectの究極の目暙は「Relying PartyがIDトヌクンを取埗するこず」です。その過皋においおナヌザ認蚌を行なったり、APIアクセスするためのアクセストヌクンを取埗するこずもありたすが、たずは呚蟺の仕様を削ぎ萜ずしおど真ん䞭だけを考えるこずが理解を進めるためには必芁だず思いたす。


シヌケンスは倧きくは4぀のフェヌズで構成されたすが、実際の認可コヌドフロヌのコアずなるのは番目、番目のフェヌズです。
各フェヌズでやっおいるこずは以䞋の通りです。
  1. ディスカバリ
  • OpenID Providerが提䟛しおいる機胜や゚ンドポむントなどの情報をRelying Partyに提䟛するディスカバリ゚ンドポむントを通しおメタデヌタを提䟛する
  • 認可※OpenID ConnectのベヌスずなるOAuth2.0を螏襲するため認可ず呌称されるが仕様䞊は認蚌リク゚スト・レスポンスAuthentication Request/Response
    • 認可コヌドをRelying Partyに提䟛する認可゚ンドポむント
  • トヌクン発行
    • 認可コヌドを受け取りIDトヌクンをRelying Partyに提䟛するトヌクン゚ンドポむント
  • ナヌザ情報提䟛
    • ナヌザ情報をRelying Partyぞ提䟛するuserInfo゚ンドポむント
    • OAuth文脈においお認可サヌバから芋るず保護察象リ゜ヌスずなるためアクセストヌクンを䜿っお認可される

    次回からそれぞれのフェヌズに぀いおgithubに公開したコヌドをベヌスに解説しおいきたいず思いたす。



    ↧

    OpenID Providerを䜜るたずはOpenID Providerの情報をRelying Partyに提䟛する

    $
    0
    0

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

    前回のポストではOpenID Connectの認可コヌドフロヌの党䜓像を曞きたしたので今回から䞭身に぀いお深掘りしおいきたいず思いたす。


    今回は①のディスカバリの郚分です。

    ディスカバリずは䜕をするフェヌズなのかですが、簡単にいうずOpenID Provider自身に関する情報をRelying Partyに䌝えるこずが目暙ずなりたす。

    もちろんRelying Partyに察しおOpenID Providerの構成情報を郜床现かく䌝えおも良いのですが、Relying Partyの数が増えおくるずチリも積もるので蚭定䜜業が面倒になっおきたすし、䜕よりも䜕らかの構成倉曎がOpenID Provider偎に発生した堎合に倉曎情報を党Relying Partyに䌝え盎すのは至難の技です。

    この課題を解決するためにOpenID ConnectにはOpenID Connect Discoveryずいう仕様が定められおいたす。

    Discoveryの流れ

    倧たかな流れずしおは、以䞋の぀のフェヌズに分かれたす。

    1. ナヌザの識別子からOpenID ProviderのURLを取埗する
    2. OpenID Providerの構成情報を取埗する

    たず最初のフェヌズですが、元々はDiscoveryの仕様はWebfingerの仕様に則っおOpenID ProviderのURLを取埗するこずを想定しお策定されおいたした。

    こんな流れです。

    1. Relying Partyにナヌザが自身の識別子䟋test@example.jpを提䟛する
    2. Relying Partyのナヌザの識別子のドメむンパヌトexample.jpに察応するOpenID Providerを怜玢するこの郚分がWebfinger
    • 具䜓的には以䞋のGETリク゚ストを投げる
    • https://example.jp/.well-known/webfinger?
      • resource=test@example.jp&
      • rel=http://openid.net/specs/connect/1.0/issuer
  • 結果ずしお返华されるOpenID ProviderのURLをRelying Partyは取埗する
  • しかしながら、珟実問題ずしおほずんどのRelying Partyではナヌザ自身が利甚するOpenID Providerを遞択するUXずなっおいるため、このフェヌズが利甚されるこずはほずんどありたせん。OpenID Providerが利甚者の識別子がOpenID Providerのドメむン名ず䞀臎しおいないケヌスも倚くなっおきおいるこずもあるんだず思いたす

    そのため、本呜は番目のフェヌズずなる、Relying PartyがあらかじめOpenID ProviderのURLたでは知っおいるずころからスタヌトする構成情報の取埗ずなっおいたす。

    こちらは{OpenID ProviderのURL}/.well-known/openid-configurationずいうURLぞのGETリク゚ストを投げ蟌むこずでOpenID Providerの構成情報゚ンドポむントやサポヌトする眲名アルゎリズムなどを取埗するずいう仕組みずなっおいたす。

    䟋えば、LINE Loginであれば「https://access.line.me/.well-known/openid-configuration」をGETするず以䞋のメタデヌタが返っおきたす。

    {

        "issuer": "https://access.line.me",

        "authorization_endpoint": "https://access.line.me/oauth2/v2.1/authorize",

        "token_endpoint": "https://api.line.me/oauth2/v2.1/token",

        "revocation_endpoint": "https://api.line.me/oauth2/v2.1/revoke",

        "userinfo_endpoint": "https://api.line.me/oauth2/v2.1/userinfo",

        "scopes_supported": ["openid", "profile", "email"],

        "jwks_uri": "https://api.line.me/oauth2/v2.1/certs",

        "response_types_supported": ["code"],

        "subject_types_supported": ["pairwise"],

        "id_token_signing_alg_values_supported": ["ES256"],

        "code_challenge_methods_supported": ["S256"]

    }


    実態ずしお.well-known/openid-configurationも提䟛しおいないOpenID Providerも存圚したすし、返っおくる情報が圓おにならないずころもあるのでちゃんずドキュメントは読みたしょう、ずいう話にしかならないわけですが・・・ちなみにLINE LoginもIDトヌクンの眲名アルゎリズム/id_token_signing_alg_values_supportedがES256ずありたすが、実際の眲名ずしおはRS256ずなっおいたりしたす

    OpenID Providerの構成情報にはどの様なものがあるのか

    仕様の「3.  OpenID Provider Metadata」にOpenID Providerが提䟛するメタデヌタに蚘茉されおいる構成情報に぀いお解説されおいたす。

    ざっくりこんな感じです。

    構成情報必須内容備考
    issuer必須OpenID Provider自䜓の識別子
    authorization_endpoint必須認可゚ンドポむントのURL
    token_endpoint泚トヌクン゚ンドポむントのURLImplicit Flowの堎合以倖は必須
    userinfo_endpoint掚奚userInfo゚ンドポむントのURL
    jwks_uri必須jwks_uri゚ンドポむントのURL
    registration_endpoint掚奚動的クラむアント登録゚ンドポむントのURL
    scopes_supported掚奚サポヌトするscopeパラメヌタの倀
    response_types_supported必須サポヌトするresponse_typeパラメヌタの倀
    response_modes_supported任意サポヌトするresponse_modeパラメヌタの倀
    grant_types_supported任意サポヌトするgrant_typeパラメヌタの倀
    acr_values_supported任意サポヌトするacrパラメヌタの倀
    subject_types_supported必須サポヌトする識別子皮別の倀
    id_token_signing_alg_values_supported必須サポヌトするid_tokenぞの眲名アルゎリズム
    id_token_encryption_alg_values_supported任意サポヌトするid_tokenの暗号化アルゎリズムalg倀
    id_token_encryption_enc_values_supported任意サポヌトするid_tokenの暗号化アルゎリズムenc倀
    userinfo_signing_alg_values_supported任意サポヌトするuserInfoの眲名アルゎリズム
    userinfo_encryption_alg_values_supported任意サポヌトするuserInfoの暗号化アルゎリズムalg倀
    userinfo_encryption_enc_values_supported任意サポヌトするuserInfoの暗号化アルゎリズムenc倀
    request_object_signing_alg_values_supported任意サポヌトするリク゚ストオブゞェクトrequest_uriからの返华倀の眲名アルゎリズム
    request_object_encryption_alg_values_supported任意サポヌトするリク゚ストオブゞェクトrequest_uriからの返华倀の暗号化アルゎリズムalg倀
    request_object_encryption_enc_values_supported任意サポヌトするリク゚ストオブゞェクトrequest_uriからの返华倀の暗号化アルゎリズムenc倀
    token_endpoint_auth_methods_supported任意サポヌトするトヌクン゚ンドポむントにおけるクラむアント認蚌方匏
    token_endpoint_auth_signing_alg_values_supported任意トヌクン゚ンドポむントでのクラむアント認蚌にJWTを利甚する堎合にサポヌトする眲名アルゎリズム
    display_values_supported任意サポヌトするdiplayパラメヌタの倀
    claim_types_supported任意サポヌトするclaimタむプ分散クレヌムなどのサポヌトのうむ
    claims_supported掚奚サポヌトするclaimの皮類sub,emailなど実際に提䟛するクレヌムの名前
    service_documentation任意OpenID Providerの説明ペヌゞのURL
    claims_locales_supported任意サポヌトするclaimのロケヌル
    ui_locales_supported任意サポヌトするui_locale
    claims_parameter_supported任意OpenID Providerがclaimsパラメヌタを受け付けるかどうか
    request_parameter_supported任意OpenID Providerがrequestパラメヌタを受け付けるかどうか
    request_uri_parameter_supported任意OpenID Providerがrequest_uriパラメヌタを受け付けるかどうか
    require_request_uri_registration任意OpenID Providerが事前にrequest_uriパラメヌタの倀を登録するこずを芁求するかどうか
    op_policy_uri任意OpenID ProviderがRelying Partyに察しお提䟛するナヌザの情報がRelying Partyによっおどの様に扱われるこずを求めおいるかを瀺すドキュメントのURL
    op_tos_uri任意OpenID Providerの利甚芏玄のURL


    Discovery゚ンドポむントを実装しおみる

    では実装しおみたす。非垞に単玔な゚ンドポむントなので/.well-known/openid-configurationに察するGETリク゚ストがあったら必芁な情報をJSONで返华するだけです。

    githubに公開しおいる゜ヌスのうち、この郚分が該圓したす。

    https://github.com/fujie/oidc-study-op/blob/main/endpoints/discovery.js


    
    const router = require("express").Router();
    
    // Discovery゚ンドポむント
    router.get("/openid-configuration", (req, res) => {
        const baseUrl = 'https://' + req.headers.host;
        const response_types = ["code"];
        const subject_types = ["public"];
        const alg_values = ["RS256"];
        const scopes = ["openid"];
        const auth_methods = ["client_secret_post", "client_secret_basic"];
        const claims =["sub", "name", "given_name", "family_name", "email", "email_verified", "iss", "aud", "exp", "exp", "iat"];
        res.json({
            issuer: baseUrl,
            authorization_endpoint: baseUrl + "/oauth2/authorize",
            token_endpoint: baseUrl + "/oauth2/token",
            userinfo_endpoint: baseUrl + "/userinfo",
            jwks_uri: baseUrl + "/jwks_uri",
            response_types_supported: response_types,
            subject_types_supported: subject_types,
            id_token_signing_alg_values_supported: alg_values,
            scopes_supported: scopes,
            token_endpoint_auth_methods_supported: auth_methods,
            claims_supported: claims
        });
    });
    module.exports = router;
    


    node.js.+ express routerで実装しおいるので/.well-knownぞのアクセスはこのJSぞルヌティングされる様にしおいたす。

    やっおいるこずは単玔で必芁な情報をres.jsonで返华しおいるだけですね。


    Relying PartyはOpenID Providerぞリク゚ストをする際にこの゚ンドポむントにアクセスしお最新の構成情報を取埗しお各皮゚ンドポむントを利甚する、ずいう動きをする、ずいうこずですね。パフォヌマンスの芳点でRelying Party偎でメタデヌタをキャッシュをするこずも倚いず思いたす

    ↧
    ↧

    Verifiable Credentialsの眲名を壊さずに遞択的開瀺を行うSD-JWTを䜓感しおみる

    $
    0
    0

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


    少し毛色を倉えお今日はみんな倧奜き遞択的開瀺Selective Disclosureです。

    特にVerifiable Credentialsを䜿うナヌスケヌスの兞型的なシナリオに「バヌに入る際の幎霢蚌明に免蚱蚌を芋せる」ずいうものがありたす。しかしながら幎霢が21歳以䞊であるこずを蚌明したいだけなのに運転免蚱蚌を芋せおしたうず䜏所や氏名などの本来䞍芁な情報たで提瀺するこずになっおしたいたす。そこでSelective Disclosureが倧事、ずいう話になっおきたす。

    䞀芋簡単そうに芋えたすが、眲名が斜されたデヌタの䞭身を改竄する実際は䞍芁なデヌタを間匕くこずになるのでデゞタル眲名の目暙である真正性の担保ずいう話ず盞反するこずになっおしたいたす。

    これたでもBBS+など仕組みは出おきおいたすが今日はJSON Web Tokenを察象ずしたSD-JWTの話をしたいず思いたす。


    簡単な仕組み

    埓来の眲名月JWTは察象ずなるデヌタJSONをBase64Url゚ンコヌドしお眲名アルゎリズムなどの情報をヘッダに入れ、眲名を斜しお".ピリオド"で連結したものでした。OpenID ConnectにおけるIDトヌクンもこのフォヌマットですね。

    䟋えば、こんなデヌタを察象ずしたいず思いたす。

    {

      "iss": "http://server.example.com",

      "sub": "248289761001",

      "aud": "s6BhdRkqt3",

      "nonce": "n-0S6_WzA2Mj",

      "exp": 1311281970,

      "iat": 1311280970,

      "name": "Jane Doe",

      "given_name": "Jane",

      "family_name": "Doe",

      "gender": "female",

      "birthdate": "0000-10-31",

      "email": "janedoe@example.com",

      "picture": "http://example.com/janedoe/me.jpg"

    }

    これをRS256で眲名しおJWTずする堎合、ヘッダにはアルゎリズムの情報などを入れたす。

    {

      "kid": "1e9gdk7",

      "alg": "RS256"

    }

    最埌にヘッダ、ペむロヌドをそれぞれBase64Url゚ンコヌドしおデゞタル眲名の倀を最埌に远加したす。ヘッダ・ペむロヌド・眲名の間を"."で連結したす

    するず結果、こんな感じになりたす。

    eyJraWQiOiIxZTlnZGs3IiwiYWxnIjoiUlMyNTYifQ.ewogImlzcyI6ICJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJzdWIiOiAiMjQ4Mjg5NzYxMDAxIiwKICJhdWQiOiAiczZCaGRSa3F0MyIsCiAibm9uY2UiOiAibi0wUzZfV3pBMk1qIiwKICJleHAiOiAxMzExMjgxOTcwLAogImlhdCI6IDEzMTEyODA5NzAsCiAibmFtZSI6ICJKYW5lIERvZSIsCiAiZ2l2ZW5fbmFtZSI6ICJKYW5lIiwKICJmYW1pbHlfbmFtZSI6ICJEb2UiLAogImdlbmRlciI6ICJmZW1hbGUiLAogImJpcnRoZGF0ZSI6ICIwMDAwLTEwLTMxIiwKICJlbWFpbCI6ICJqYW5lZG9lQGV4YW1wbGUuY29tIiwKICJwaWN0dXJlIjogImh0dHA6Ly9leGFtcGxlLmNvbS9qYW5lZG9lL21lLmpwZyIKfQ.rHQjEmBqn9Jre0OLykYNnspA10Qql2rvx4FsD00jwlB0Sym4NzpgvPKsDjn_wMkHxcp6CilPcoKrWHcipR2iAjzLvDNAReF97zoJqq880ZD1bwY82JDauCXELVR9O6_B0w3K-E7yM2macAAgNCUwtik6SjoSUZRcf-O5lygIyLENx882p6MtmwaL1hd6qn5RZOQ0TLrOYu0532g9Exxcm-ChymrB4xLykpDj3lUivJt63eEGGN6DH5K6o33TcxkIjNrCD4XB1CKKumZvCedgHHF3IAK4dVEDSUoGlH9z4pP_eWYNXvqQOjGs-rDaQzUHl6cQQWNiDpWOl_lxXjQEvQ

    jwt.ioなどのサむトでデコヌドするず䞭身がわかりたす。


    䞀方でSD-JWTではデゞタル眲名を維持し぀぀、このペむロヌドの䞭に蚘茉されおいるクレヌム属性の䞀郚を隠したいわけです。

    そのため、実はSD-JWTで遞択的開瀺をする際はペむロヌド自䜓には䜕の加工もしたせんやっぱりペむロヌドを改竄しちゃうず眲名はこわれるので。その代わりにSD-JWTを䜜成する際に以䞋の工倫を斜したす。

    • 遞択的開瀺の察象ずなる属性のハッシュをペむロヌドに入れる
    • 埓来のJWTの最埌眲名の埌にDisclosureず蚀われる各属性に察応する倀を远加する~チルダで連結する

    このDisclosureがあればペむロヌド内のハッシュ化された倀を元に戻せるので開瀺したくない属性に぀いおはDisclosureを削陀しおしたうこずで受け取り偎は倀を知るこずができなくなる、ずいう仕組みです。

    先ほどのJWTのペむロヌドをSD-JWTにする堎合はこんな感じになりたす。芁するに隠す可胜性がある属性に぀いお"_sd"ずいう芁玠にハッシュ化した倀を入れる感じです。

    {

      "iss": "http://server.example.com",

      "aud": "s6BhdRkqt3",

      "nonce": "n-0S6_WzA2Mj",

      "iat": 1516239022,

      "exp": 1735689661,

      "_sd": [

        "5G_krZtMTMPltAWWNMhdDxJMt15SA1KFkd2gIlSvLtQ",

        "5p6bt53D9p4MfkVYQciL4pWXAkIjz0PbLXGD0NHii2w",

        "6Jt5lxreiTK8olTRzyHoHYYPmu0G-ZVvWpacVmYYT8M",

        "Ew-dKRmA2uSgw9EmGwNIfQksPpPIs0qA4OE-86DQ3_Y",

        "Hz-BYPQJmHsFlIfZ_9CJ6IboqisoZNtwzkb0Z3JAlF4",

        "J3P_gNA3LECIzTttBuX62cLVICDFzR-rroiCQkbBbuQ",

        "O2bDUHaELZIsyOXTyutWunAgm37QTkbCTRw73bi55xE",

        "Q4vtraDvprqBkjrPoLW_9FZDetFKKAGcya05rIwq4xg"

      ],

      "_sd_alg": "sha-256"

    }

    そしおこのペむロヌドを通垞通りデゞタル眲名付きのJWTにしたものがこちらの文字列です。

    eyJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwiYXVkIjoiczZCaGRSa3F0MyIsIm5vbmNlIjoibi0wUzZfV3pBMk1qIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjE3MzU2ODk2NjEsIl9zZCI6WyI1R19rclp0TVRNUGx0QVdXTk1oZER4Sk10MTVTQTFLRmtkMmdJbFN2THRRIiwiNXA2YnQ1M0Q5cDRNZmtWWVFjaUw0cFdYQWtJanowUGJMWEdEME5IaWkydyIsIjZKdDVseHJlaVRLOG9sVFJ6eUhvSFlZUG11MEctWlZ2V3BhY1ZtWVlUOE0iLCJFdy1kS1JtQTJ1U2d3OUVtR3dOSWZRa3NQcFBJczBxQTRPRS04NkRRM19ZIiwiSHotQllQUUptSHNGbElmWl85Q0o2SWJvcWlzb1pOdHd6a2IwWjNKQWxGNCIsIkozUF9nTkEzTEVDSXpUdHRCdVg2MmNMVklDREZ6Ui1ycm9pQ1FrYkJidVEiLCJPMmJEVUhhRUxaSXN5T1hUeXV0V3VuQWdtMzdRVGtiQ1RSdzczYmk1NXhFIiwiUTR2dHJhRHZwcnFCa2pyUG9MV185RlpEZXRGS0tBR2N5YTA1ckl3cTR4ZyJdLCJfc2RfYWxnIjoic2hhLTI1NiJ9.LAlXQnPK8rOhxBhbg_FU-hiBJJqCX5CYWYTp0YcbbIxnBZPN1ZhRgE_SLh0rEg1L559GxmG1WrpGMyOl1rDoAA

    このJWTに"_sd"に入れた各属性に察応するDisclosureを~で連結しお远加しおいきたす。赀字の郚分が远加したものです。

    eyJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwiYXVkIjoiczZCaGRSa3F0MyIsIm5vbmNlIjoibi0wUzZfV3pBMk1qIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjE3MzU2ODk2NjEsIl9zZCI6WyI1R19rclp0TVRNUGx0QVdXTk1oZER4Sk10MTVTQTFLRmtkMmdJbFN2THRRIiwiNXA2YnQ1M0Q5cDRNZmtWWVFjaUw0cFdYQWtJanowUGJMWEdEME5IaWkydyIsIjZKdDVseHJlaVRLOG9sVFJ6eUhvSFlZUG11MEctWlZ2V3BhY1ZtWVlUOE0iLCJFdy1kS1JtQTJ1U2d3OUVtR3dOSWZRa3NQcFBJczBxQTRPRS04NkRRM19ZIiwiSHotQllQUUptSHNGbElmWl85Q0o2SWJvcWlzb1pOdHd6a2IwWjNKQWxGNCIsIkozUF9nTkEzTEVDSXpUdHRCdVg2MmNMVklDREZ6Ui1ycm9pQ1FrYkJidVEiLCJPMmJEVUhhRUxaSXN5T1hUeXV0V3VuQWdtMzdRVGtiQ1RSdzczYmk1NXhFIiwiUTR2dHJhRHZwcnFCa2pyUG9MV185RlpEZXRGS0tBR2N5YTA1ckl3cTR4ZyJdLCJfc2RfYWxnIjoic2hhLTI1NiJ9.LAlXQnPK8rOhxBhbg_FU-hiBJJqCX5CYWYTp0YcbbIxnBZPN1ZhRgE_SLh0rEg1L559GxmG1WrpGMyOl1rDoAA~WyJ5OWVMRmI3azdXZnd4ZkllQWp5eUt3Iiwic3ViIiwiMjQ4Mjg5NzYxMDAxIl0~WyJUNkVlZzRsaVJyN3VtOUZxOFRYekR3IiwibmFtZSIsIkphbmUgRG9lIl0~WyJUUnRocWdUc29kZzVJbnBBR2ZvNjJnIiwiZ2l2ZW5fbmFtZSIsIkpvbmUiXQ~WyJmRWx5VzFIdlVjX1dYTnFLeUdRcEJ3IiwiZmFtaWx5X25hbWUiLCJEb2UiXQ~WyI1blgwRmZTNHUtVjN3aFNORUpPQndnIiwiZ2VuZGVyIiwiZmVtYWxlIl0~WyJhSzhJYWc2dzB1Mno1WVpxMWlXOC13IiwiYmlydGhkYXRlIiwiMDAwMC0xMC0zMSJd~WyIwR0pLdnN2aDNpbnFkeGlUM3MxbVJRIiwiZW1haWwiLCJqb25lZG9lQGV4YW1wbGUuY29tIl0~WyJXMHpCa1lfLThqUVhNY3JnYTJTak9BIiwicGljdHVyZSIsImh0dHA6Ly9leGFtcGxlLmNvbS9qYW5lZG9lL21lLmpwZyJd

    これでSD-JWTが出来䞊がりたした。

    これを枡されたVerifierなどはDisclosureの倀を䜿っおペむロヌド内の"_sd"の倀を埩号しお実際の属性倀を取埗する、ずいうこずをやりたす。たた、開瀺したくない倀があれば察応するDisclosureの倀を消した状態でSD-JWTを枡せば良い、ずいう理屈です。


    䜓感しおみる

    ずいっおも现かい実装の話をするのは疲れるので䞖の䞭に出おきおいるツヌルを觊っお䜓感しおみたいず思いたす。

    今回はこのツヌルを䜿っおみたす。

    https://github.com/christianpaquin/sd-jwt

    詳现はREADMEに曞いおある通りなのですが、取り合えずやっおみたしょう。

    ざっくりこんな手順です。

    1. SD-JWTの眲名に䜿う鍵を生成する
    2. jwtDisclose察象じゃない郚分のjsonを甚意する
    3. sdDisclose察象ずしたい郚分のjsonを甚意する


    たずは鍵を生成したす。

    npm run generate-issuer-keys -- -k <jwksPath> -p <privatePath> -a <keyAlg>

    - jwksPathは公開鍵のファむル名ですなければ䜜っおくれたす

    - privatePathは秘密鍵のファむル名です同䞊

    - keyAlgはアルゎリズムです。指定しないずES256になりたす


    鍵の準備ができたらSD-JWTを䜜っおみたす。たずはDisclose察象じゃない郚分のJSONを甚意したす。今回はこんなファむルを甚意したした。先ほどの䟋の個人属性以倖の郚分ですね

      {

        "iss": "http://server.example.com",

        "aud": "s6BhdRkqt3",

        "nonce": "n-0S6_WzA2Mj",

        "iat": 1516239022,

        "exp": 1735689661

      }

    そしお、Disclose察象の郚分のJSONです。先ほどの䟋の個人属性郚分です

    {

        "sub": "248289761001",

        "name": "Jane Doe",

        "given_name": "Jone",

        "family_name": "Doe",

        "gender": "female",

        "birthdate": "0000-10-31",

        "email": "jonedoe@example.com",

        "picture": "http://example.com/janedoe/me.jpg"

      }

    ではSD-JWTを生成しおみたす。

    npm run create-sd-jwt -- -k {䜜成した秘密鍵} -t {䜜成したDisclose察象倖のJSON} -h sha-256 -c {䜜成したDisclose察象のJSON} -o {出力したいSD-JWT}

    こんな感じの曞匏です。では実際に生成しおみたす。

    npm run create-sd-jwt -- -k private.jwk -t jwt.json -h sha-256 -c sdClaimsFlat.json -o sd-jwt.json

    こちらが実行時の出力です。

    % npm run create-sd-jwt -- -k private.jwk -t jwt.json -h sha-256 -c sdClaimsFlat.json -o sd-jwt.json

    > sd-jwt@1.0.0 create-sd-jwt
    > ts-node --files src/create-sd-jwt-cl.ts -k private.jwk -t jwt.json -h sha-256 -c sdClaimsFlat.json -o sd-jwt.json

    Creating SD-JWT from the JWT jwt.json using the private key private.jwk, encoding selectively-disclosable claims from sdClaimsFlat.json

    JWT: {"iss":"http://server.example.com","aud":"s6BhdRkqt3","nonce":"n-0S6_WzA2Mj","iat":1516239022,"exp":1735689661,"_sd":["5G_krZtMTMPltAWWNMhdDxJMt15SA1KFkd2gIlSvLtQ","5p6bt53D9p4MfkVYQciL4pWXAkIjz0PbLXGD0NHii2w","6Jt5lxreiTK8olTRzyHoHYYPmu0G-ZVvWpacVmYYT8M","Ew-dKRmA2uSgw9EmGwNIfQksPpPIs0qA4OE-86DQ3_Y","Hz-BYPQJmHsFlIfZ_9CJ6IboqisoZNtwzkb0Z3JAlF4","J3P_gNA3LECIzTttBuX62cLVICDFzR-rroiCQkbBbuQ","O2bDUHaELZIsyOXTyutWunAgm37QTkbCTRw73bi55xE","Q4vtraDvprqBkjrPoLW_9FZDetFKKAGcya05rIwq4xg"],"_sd_alg":"sha-256"}

    JWS payload: 7B22697373223A22687474703A2F2F7365727665722E6578616D706C652E636F6D222C22617564223A227336426864526B717433222C226E6F6E6365223A226E2D3053365F577A41324D6A222C22696174223A313531363233393032322C22657870223A313733353638393636312C225F7364223A5B2235475F6B725A744D544D506C744157574E4D686444784A4D7431355341314B466B643267496C53764C7451222C2235703662743533443970344D666B56595163694C34705758416B496A7A3050624C584744304E4869693277222C22364A74356C78726569544B386F6C54527A79486F485959506D7530472D5A567657706163566D595954384D222C2245772D644B526D41327553677739456D47774E4966516B735070504973307141344F452D38364451335F59222C22487A2D425950514A6D4873466C49665A5F39434A3649626F7169736F5A4E74777A6B62305A334A416C4634222C224A33505F674E41334C4543497A5474744275583632634C56494344467A522D72726F6943516B6242627551222C224F326244554861454C5A4973794F585479757457756E41676D333751546B62435452773733626935357845222C225134767472614476707271426B6A72506F4C575F39465A446574464B4B4147637961303572497771347867225D2C225F73645F616C67223A227368612D323536227D

    JWS: eyJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwiYXVkIjoiczZCaGRSa3F0MyIsIm5vbmNlIjoibi0wUzZfV3pBMk1qIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjE3MzU2ODk2NjEsIl9zZCI6WyI1R19rclp0TVRNUGx0QVdXTk1oZER4Sk10MTVTQTFLRmtkMmdJbFN2THRRIiwiNXA2YnQ1M0Q5cDRNZmtWWVFjaUw0cFdYQWtJanowUGJMWEdEME5IaWkydyIsIjZKdDVseHJlaVRLOG9sVFJ6eUhvSFlZUG11MEctWlZ2V3BhY1ZtWVlUOE0iLCJFdy1kS1JtQTJ1U2d3OUVtR3dOSWZRa3NQcFBJczBxQTRPRS04NkRRM19ZIiwiSHotQllQUUptSHNGbElmWl85Q0o2SWJvcWlzb1pOdHd6a2IwWjNKQWxGNCIsIkozUF9nTkEzTEVDSXpUdHRCdVg2MmNMVklDREZ6Ui1ycm9pQ1FrYkJidVEiLCJPMmJEVUhhRUxaSXN5T1hUeXV0V3VuQWdtMzdRVGtiQ1RSdzczYmk1NXhFIiwiUTR2dHJhRHZwcnFCa2pyUG9MV185RlpEZXRGS0tBR2N5YTA1ckl3cTR4ZyJdLCJfc2RfYWxnIjoic2hhLTI1NiJ9.LAlXQnPK8rOhxBhbg_FU-hiBJJqCX5CYWYTp0YcbbIxnBZPN1ZhRgE_SLh0rEg1L559GxmG1WrpGMyOl1rDoAA~WyJ5OWVMRmI3azdXZnd4ZkllQWp5eUt3Iiwic3ViIiwiMjQ4Mjg5NzYxMDAxIl0~WyJUNkVlZzRsaVJyN3VtOUZxOFRYekR3IiwibmFtZSIsIkphbmUgRG9lIl0~WyJUUnRocWdUc29kZzVJbnBBR2ZvNjJnIiwiZ2l2ZW5fbmFtZSIsIkpvbmUiXQ~WyJmRWx5VzFIdlVjX1dYTnFLeUdRcEJ3IiwiZmFtaWx5X25hbWUiLCJEb2UiXQ~WyI1blgwRmZTNHUtVjN3aFNORUpPQndnIiwiZ2VuZGVyIiwiZmVtYWxlIl0~WyJhSzhJYWc2dzB1Mno1WVpxMWlXOC13IiwiYmlydGhkYXRlIiwiMDAwMC0xMC0zMSJd~WyIwR0pLdnN2aDNpbnFkeGlUM3MxbVJRIiwiZW1haWwiLCJqb25lZG9lQGV4YW1wbGUuY29tIl0~WyJXMHpCa1lfLThqUVhNY3JnYTJTak9BIiwicGljdHVyZSIsImh0dHA6Ly9leGFtcGxlLmNvbS9qYW5lZG9lL21lLmpwZyJd

    SD-JWT written to sd-jwt.json

    出来䞊がったJWSがsd-jwt.jsonに曞き蟌たれおいたす。

    jwt.ioでデコヌドしおみるずちゃんずSD-JWTになっおいるこずがわかりたす。

    ちなみにjwt.ioではDisclosure郚分は芋えたせん



    次は䞀郚の属性を取り陀いた状態で怜蚌できるかどうかの確認です。

    出力されたsd-jwt.jsonのDisclosureを䞀郚取り陀いおみたしょう。なお、Disclosureは䞊から順番に察象の属性ず察応しおいるので䜕番目の属性を隠すのかでどのDisclosureを削陀すれば良いのかが決たりたす。

    䟋えば今回番目の属性がemailなので番目のDisclosureを削陀しおみたす。ちなみに私はMacのTerminalのviでファむルの線集をしたのですが、保存をするずLine terminator0aが行末に远加されおしたうので、awkで削る必芁がありたした。

    awk '{printf("%s", $0)}' sd-jwt.json > user-sd-jwt.json

    こんな感じです。

    % file user-sd-jwt.json 

    user-sd-jwt.json: ASCII text, with very long lines (1260), with no line terminators

    fileコマンドで確認するずwith no line terminatorsずなっおいるのでこれで準備完了です。


    早速ですが怜蚌をするためのコマンドを叩きたす。

    npm run verify-sd-jwt -- -t {むンプットずなるSD-JWTファむル} -k {公開鍵} -o {出力されるJWT} -d {開瀺された属性}

    ずいう曞匏です。

    実際に実行するずこんな感じになり、email属性が消えおいるこずがわかりたす。

    % npm run verify-sd-jwt -- -t user-sd-jwt.json -k publicKey.jwks -o outJwt.json -d disclosedClaims.json

    > sd-jwt@1.0.0 verify-sd-jwt
    > ts-node --files src/verify-sd-jwt-cl.ts -t user-sd-jwt.json -k publicKey.jwks -o outJwt.json -d disclosedClaims.json

    Verifying SD-JWT from user-sd-jwt.json
    payload: {"iss":"http://server.example.com","aud":"s6BhdRkqt3","nonce":"n-0S6_WzA2Mj","iat":1516239022,"exp":1735689661,"_sd":["10nhdtWZB3RXMn2AxXsK3eJJFf2T0UosLfFVYDg6nN8","2OFg4dmWIuCvX1O7XvvNEbiR30setroa4Y0_JXLUyBY","2nB9Dno76pMtIo3EUWo-4ckypEhW2MM4fXXLLi5use4","9x8lAtlY7dhnojZ2Qv8HRH5JO7oW3PnPK8Z6xe79Y-w","AclFaDd78h1fnbxZ4mtqRMdmQxrDxH9QhEO1QgT0FME","D3B9GFLw9Zn8-7JLWo9WXlrR04OtAPCFiUPPL9GYDNg","ZA-Bh-ucVIOm9RjmV6El7ym7CQ_gwe5ACDzeV7KSGx0","bnqv7hEmIi_3WWLFhwPSAEsoMU0T2rTFZdcmYAnBKxA"],"_sd_alg":"sha-256"}

    disclosedClaims: {"sub":"248289761001","name":"Jane Doe","given_name":"Jone","family_name":"Doe","gender":"female","birthdate":"0000-10-31","picture":"http://example.com/janedoe/me.jpg"}

    JWT written to outJwt.json
    JWT written to disclosedClaims.json


    ずいうこずでみんな倧奜きなVerifiable CredentialsずSelective Disclosureでした。


    ↧

    OpenID Providerを䜜る認可゚ンドポむントを䜜る

    $
    0
    0
    こんにちは、富士抮です。

    匕き続き、OpenID Providerを䜜ろうず思いたす。
    これたでのポストはこちらです。
    再掲ずなりたすが、認可コヌドフロヌの党䜓像はこちらです。


    今回のポストでは②の認可゚ンドポむントAuthorizeの郚分に぀いお実装しおみたしょう。
    なお、今回のシリヌズでは最䜎限の実装を通しおOpenID Connectを知るこずを目的ずしおいたすので、たずは倧たかな実装をしおおいお现かいずころは埌から充実させおいこうず思いたす。そのため、先日バック゚ンドが充実しおいない環境におけるOpenID Providerの実装に぀いお玹介した際の実装をベヌスにしたいず思いたす。

    なお、本日玹介する郚分のコヌドはこちらで公開しおいたす。

    ずいうこずで初めおいきたしょう。

    認可゚ンドポむントの圹割ず凊理内容

    認可コヌドフロヌに限定しお話すず認可゚ンドポむントの目暙は「認可コヌド」を発行するこずです。クラむアントRelying Partyはこの「認可コヌド」を埌日玹介する「トヌクン゚ンドポむント」でIDトヌクンやアクセストヌクンず亀換したすので、認可゚ンドポむントが正しく認可コヌドを発行するこずはOpenID Connectのフロヌ党䜓の安党性を担保する䞊で非垞に重芁な第䞀歩ずなりたす。
    なお、認可コヌドフロヌにおける認可゚ンドポむントの仕様の詳现はこちらに蚘茉がありたす。

    サポヌトすべきHTTPメ゜ッドはGET/POST、各皮パラメヌタは以䞋の通りです。
    パラメヌタ区分意味
    scope必須OAuthにおける認可スコヌプを瀺すがOpenID Connectの堎合はopenidを必ず含める必芁がある
    response_type必須OAuthにおけるresponse_typeを瀺す。認可コヌドフロヌの堎合はcodeを指定する
    client_id必須OAuthにおけるクラむアントの識別子を瀺す。OpenID Connectの堎合はRelying Partyの識別子ずなる
    redirect_uri必須レスポンスが返されるURIを瀺す。あらかじめクラむアントIDに察しお登録されたものず完党䞀臎する必芁がある
    state掚奚リク゚ストずコヌルバックの䞀貫性を確認するために利甚する
    nonce掚奚クラむアントのセッションず発行されるIDトヌクンの玐付けを行うために利甚する
    display掚奚認蚌および同意のための画面衚瀺の方法を指定する
    prompt掚奚再認蚌や同意を求めるかどうかを指定する
    max_age任意ナヌザが認蚌されおから再認蚌を求めるたでの最倧蚱容時間
    ui_locales任意UIの蚀語
    id_token_hint任意OpenID Providerが以前発行したIDトヌクン。過去のセッションに関連した認蚌を行う堎合などに利甚する
    login_hint任意ログむンさせるナヌザの識別子を指定する堎合に利甚する
    acr_values任意認蚌コンテキストAuthentication Context Class / acrを指定する堎合に利甚する

    結構色々ずパラメヌタがありたすが、倧たかな凊理の流れはこんな感じになりたす。response_typeがcodeの堎合
    1. クラむアントの確認を行う指定されたclient_id、あらかじめ登録されたredirect_uriが合臎しおいるか確認する
    2. ナヌザ認蚌を行う通垞の実装ではこの゚ンドポむントを保護しおおく
    3. 指定されたscopeに応じお認蚌されたナヌザの属性情報をナヌザDBから取埗する
    4. 同意画面の衚瀺
    5. 認可コヌドcodeずクラむアントから指定されたstateをク゚リパラメヌタに぀けおredirect_uriにリダむレクトするUserAgentぞHTTP301を返す

    この時、埌からトヌクン゚ンドポむントで認可コヌドに玐づくIDトヌクンナヌザの情報を含むを発行するこずを考えるずバック゚ンドのDBにクラむアントからの芁求情報client_id、redirect_uri、scope、認蚌されたナヌザの情報ず認可コヌドを保存しおおく必芁がありたす。たた、同時に認可コヌドの悪甚や再利甚を避けるためには認可コヌド自䜓の有効期限を極力短くしおおく必芁があるのず、トヌクン゚ンドポむント偎で認可コヌドを利甚したら無効化する凊理などを実装する必芁がありたすので、それらの情報フラグや有効期限などもDBに保存しおおく必芁があるはずです。

    ただ、凊理の流れを知る意味では単玔に認可コヌドを発行さえすればOKですのでクラむアント関連の情報やナヌザの認蚌などは飛ばしお関連する情報を認可コヌドの䞭に入れおしたいたしょう。以前のポストでは単玔にJWTにしおいたしたが、Entra IDず同じ様にJWEJSON Web Encryptionで暗号化した状態にしおありたす。

    認可゚ンドポむントの実装

    以䞋の様な実装を行いたいずお思いたす。
    // 認可゚ンドポむント
    router.get("/authorize", async (req, res) => {
    // 本来なら実装する凊理
    // - ナヌザの認蚌
    // - response_typeによるフロヌの振り分け
    // - client_idの登録状態の確認
    // - redirect_uriずclient_idが瀺すクラむアントずの察応確認
    // - scopeの確認
    // - 属性送出に関する同意画面の衚瀺

    // codeの生成本来は暗号化しおおく
    // 最終的にid_tokenに入れる倀をDBに保存する代わりに暗号化しおcodeに入れおおくこずでバック゚ンドを持たずにすたせる
    constbaseUrl='https://'+req.headers.host;

    constdate=newDate();
    constjwePayload= {
    iss:baseUrl,
    aud:req.query.client_id,
    sub:"test",
    email:"test@example.jp",
    name:"taro test",
    given_name:"taro",
    family_name:"test",
    nonce:req.query.nonce,
    exp:Math.floor((date.getTime() + (1000*30)) /1000) // 有効期限は30秒
    };
    constcode=awaitutils.generateJWE(jwePayload);
    console.log(code);
    // redirect_uriぞリダむレクト
    res.redirect(req.query.redirect_uri+"?code="+code+"&state="+req.query.state);
    });

    この実装を順番に解説しおいきたいず思いたす。

    たず、゚ンドポむントずメ゜ッドの実装です。
    router.get("/authorize", async (req, res) => {

    次に、本来はバック゚ンドDBに保存する情報を認可コヌド自䜓に含めるため、JSONペむロヌドを䜜りたす。
    constbaseUrl='https://'+req.headers.host;

    constdate=newDate();
    constjwePayload= {
    iss:baseUrl,
    aud:req.query.client_id,
    sub:"test",
    email:"test@example.jp",
    name:"taro test",
    given_name:"taro",
    family_name:"test",
    nonce:req.query.nonce,
    exp:Math.floor((date.getTime() + (1000*30)) /1000) // 有効期限は30秒
    };

    埌からIDトヌクンに入れる情報ずしお、
    • issIssuerの識別子
    • audクラむアントID
    • sub、email、name、given_name、family_name本来はナヌザ認蚌した結果取埗する属性情報
    • nonceリク゚ストに指定されたnonceの倀
    • exp認可コヌドの有効期限短めが良いのでずりあえず30秒
    をペむロヌドずしお定矩しおいたす。

    このペむロヌドを暗号化したす。JWEを䜜成するコヌドは別のJSファむルに定矩しおありたす。
    constcode=awaitutils.generateJWE(jwePayload);

    こちらがJWEを生成するコヌドです。node-joseずいうラむブラリを利甚しおいたす。たた、今回は暗号化ず埩号を同じサヌバで実行できれば良いので察象鍵を利甚しおいたす。
    // JWEの䜜成
    exports.generateJWE=asyncfunction(payload) {
    constkey=awaitjose.JWK.asKey({kty:'oct', k:jose.util.base64url.encode(encryptKeyString)});
    returnjose.JWE.createEncrypt({format:'compact'},key).update(JSON.stringify(payload)).final();
    }

    実際に䜜られた認可コヌドはこの様なものです。
    eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiQTI1NktXIiwia2lkIjoiOXBheXlGVzBMdEZ0czkyRDE5VVJCSS15bHc5TGh2ZWI1dFJKYkkxU19vdyJ9.XAMPBCzLxSipsZILlvL9r6qdhL0teaYZkpO17RYgVqirv4btHMsdPQ.2kJJ1PExtsZLhI-nPSpLNQ.Kyxyt6TC2CdV81xbq8_roFaZfERZKSg9vnlInTZHnxS8eb9cVAOW_RESgKFWkt6g9vW6CXgO6qE5w-3Oe2J8jV92gVThUwlz5PcQCKgxZ6xkBr5_cRQv5S22GXeEreYVn746qpJGAcEOACyeB5jEFy-RG0ItrGq3FAMaVVBHcHGfAJc9LCk_TaKdOdm3CvVFk67RpNxE9jVsL7oyWSNJqWkrtAsQIYxDi80ZrgGszOc.lYl0xrOMOHNFROtCHCPtng

    jwt.ioで芋おみおも暗号化されおいるこずがわかりたす。

    生成した認可コヌドずstateをredirect_uriに枡しおあげるこずで認可゚ンドポむントの圹割はおしたいです。
    以䞋の様なク゚リがRelying Partyに飛びたす。
    https://localhost:3000/cb?code=eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiQTI1NktXIiwia2lkIjoiOXBheXlGVzBMdEZ0czkyRDE5VVJCSS15bHc5TGh2ZWI1dFJKYkkxU19vdyJ9.XAMPBCzLxSipsZILlvL9r6qdhL0teaYZkpO17RYgVqirv4btHMsdPQ.2kJJ1PExtsZLhI-nPSpLNQ.Kyxyt6TC2CdV81xbq8_roFaZfERZKSg9vnlInTZHnxS8eb9cVAOW_RESgKFWkt6g9vW6CXgO6qE5w-3Oe2J8jV92gVThUwlz5PcQCKgxZ6xkBr5_cRQv5S22GXeEreYVn746qpJGAcEOACyeB5jEFy-RG0ItrGq3FAMaVVBHcHGfAJc9LCk_TaKdOdm3CvVFk67RpNxE9jVsL7oyWSNJqWkrtAsQIYxDi80ZrgGszOc.lYl0xrOMOHNFROtCHCPtng&state=hoge


    ずいうこずで今回は認可゚ンドポむントを雑に䜜りたした。次回はトヌクン゚ンドポむントです。 

    ↧

    OpenID Providerを䜜るトヌクン゚ンドポむントを䜜る

    $
    0
    0
    こんにちは、富士です。

    色々ず積み残しはありたすが、認可゚ンドポむントの実装が終わったのでトヌクン゚ンドポむントを実装しおみたいず思いたす。

    その前にこれたでのポストはこちらです。


    今回はトヌクン゚ンドポむントなので③が察象です。
    なお、本日玹介する郚分のコヌドはこちらで公開しおいたす。

    ずいうこずで始めおいきたしょう。

    トヌクン゚ンドポむントの圹割ず凊理

    前回、認可゚ンドポむントの目暙はトヌクン゚ンドポむントでトヌクンず亀換するための認可コヌドを取埗するこずである、ずいう説明をしたした。今回はトヌクン゚ンドポむントなので認可゚ンドポむントで発行された認可コヌドを受け取りトヌクンIDトヌクン、アクセストヌクン、リフレッシュトヌクンをクラむアントぞ枡すこずが目暙ずなりたす。

    なお、認可コヌドフロヌにおけるトヌクン゚ンドポむントの仕様の詳现はこちらに蚘茉がありたす。
    3.1.3.1. Token Requestによるずリク゚ストをする際は、クラむアントの認蚌をあらかじめ定めた方法で行った䞊でgrant_typeにauthorization_codeを指定し、取埗した認可コヌドをPOSTする必芁がある様です。

    こちらが仕様に蚘茉されたリク゚ストのサンプルです。
      POST /token HTTP/1.1
      Host: server.example.com
      Content-Type: application/x-www-form-urlencoded
      Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
    
      grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
        &redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
    

    この䟋だずAuthorizationヘッダにBasicずあるのでクラむアント認蚌にはBasic認蚌が䜿われおいる様です。このクラむアント認蚌の方匏は以前のポストで玹介したメタデヌタの䞭に蚘茉されおいるOpenID Providerがサポヌトする方匏token_endpoint_auth_methods_supportedから遞ぶ必芁がありたす。取りうる倀は以䞋の皮類です。
    • client_secret_basicクラむアントID、シヌクレットでHTTP Basic認蚌
    • client_secret_postクラむアントID、シヌクレットをリク゚ストボディに含める
    • client_secret_jwtシヌクレットを䜿いJWTを生成し認蚌に利甚する
    • private_key_jwtあらかじめ公開鍵を登録枈みの堎合に限られるが秘密鍵で眲名したJWTを利甚し認蚌に利甚する
    シンプルに実装するならclient_secret_basicずclient_secret_postの぀をサポヌトしおおけば十分だず思いたす。実際、䞖の䞭の実装を芋おもこの぀のみをサポヌトしおいるOpenId Providerが倚いず思いたす

    今回実装するものでは実際に認蚌を行いたせんので方匏は問いたせんが、Postmanでテストをする䞊でわかりやすい画面ショットを撮る時䞀枚で枈むのでclient_secret_postを䜿いたいず思いたす。

    早速コヌドの党䜓像を芋おみたす。前回も述べたしたがシンプルに実装するためにバック゚ンドDBを持たせない構成を取りたすので認可コヌドの䞭にIDトヌクンを発行するのに必芁な情報が暗号化された状態で埋め蟌たれおいる前提で実装しおいたす。
    たた、スコヌプ指定もopenidのみずしおおり、アクセストヌクンやリフレッシュトヌクンの発行に関しおも考慮察象倖ずしおいたす。

    トヌクン゚ンドポむントの実装

    こちらがコヌドです。
    // トヌクン゚ンドポむント
    router.post("/token", async (req, res) => {
    // 本来なら実装する凊理
    // - クラむアントの認蚌
    // - grant_typeの怜蚌
    // - codeの怜蚌有効期限、発行先クラむアント、スコヌプ
    // - access_tokenの発行
    // - id_tokenの発行
    constdecodedCode=awaitutils.decryptJWE(req.body.code);
    letdecodedCodeJSON=JSON.parse(decodedCode);
    // 有効期限確認
    constdate=newDate();
    if(decodedCodeJSON.exp< (Math.floor(date.getTime() /1000))){
    res.statusCode=400;
    res.json({
    errorMessage:"AuthZ code is expired."
    });
    } else {
    // payload䜜成
    // 単玔に期限を延長しおいるだけ
    decodedCodeJSON.exp=Math.floor((date.getTime() + (1000*60*10)) /1000);
    decodedCodeJSON.iat=Math.floor(date.getTime() /1000);
    consttoken=awaitutils.generateJWS(decodedCodeJSON);
    console.log(token);
    res.json({
    access_token:token, // ちなみにEntra IDの堎合はaccess_tokenもid_tokenずほが同じものが䜿われるケヌスもある。
    token_type:"Bearer",
    expires_in:3600,
    id_token:token
    });
    }
    });

    この実装を順番に解説しおいきたいず思いたす。

    たず、゚ンドポむントずメ゜ッドの実装です。
    router.post("/token", async (req, res) => {
    前回も述べた通り、express routerを甚いお/oauth2ぞのリク゚ストはこのJSファむルぞルヌティングされる様にしおありたすので、/oauth2/tokenに察するPOST芁求を拟う様に実装しおいたす。
    たた、認可コヌドJWEの埩号凊理が非同期凊理ずなるので埌半でawaitを䜿っおいたす。そのためこの関数自䜓をasyncにしおいたす。

    JWEの埩号を行い、有効期限のチェックを行いたす。
    constdecodedCode=awaitutils.decryptJWE(req.body.code);
    letdecodedCodeJSON=JSON.parse(decodedCode);
    // 有効期限確認
    constdate=newDate();
    if(decodedCodeJSON.exp< (Math.floor(date.getTime() /1000))){
    res.statusCode=400;
    res.json({
    errorMessage:"AuthZ code is expired."
    });

    埩号凊理自䜓は別のJSファむルに定矩した関数を䜿っおいたす。こちらも前回の暗号化の凊理ず同じくnode-joseのラむブラリを䜿っおいたす。
    有効期限に぀いおはJSONの䞭のexpに定矩されおいるため、受け取った時刻ず比范し、発行から30秒以内であるこずの確認をし、有効期限切れず刀断したらHTTP 400を返华しおいたす。

    認可コヌドに問題がなければ埩号枈みのJSONの発行時刻を付加、有効期限を曎新しおデゞタル眲名を斜した䞊でIDトヌクンずしおクラむアントぞ送り返したす。
    } else {
    // payload䜜成
    // 単玔に期限を延長しおいるだけ
    decodedCodeJSON.exp=Math.floor((date.getTime() + (1000*60*10)) /1000);
    decodedCodeJSON.iat=Math.floor(date.getTime() /1000);
    consttoken=awaitutils.generateJWS(decodedCodeJSON);
    console.log(token);
    res.json({
    access_token:token, // ちなみにEntra IDの堎合はaccess_tokenもid_tokenずほが同じものが䜿われるケヌスもある。
    token_type:"Bearer",
    expires_in:3600,
    id_token:token
    });
    }

    なお、こちらも流儀がありたすがIDトヌクンの有効期限はそれほど長く撮る必芁はないず考えおいたす。理由はIDトヌクン自䜓は認蚌状態をクラむアントRelying Partyぞ䌝達するこずが第䞀目暙ずなりたすので、トヌクンの䜿い回しやリプレむ攻撃を避ける意味でもそれほど長い期間䜿われるものではないからです。今回のコヌドでは10分間ずしおいたす。
    ちなみに認蚌サヌバずアプリケヌションの間の時刻のズレなどを勘案しお䌝統的に5分くらいの誀差は蚱容したしょう、ずいうなんずなくな慣習が私の呚りにはありたしたが、珟圚は基本的にサヌバの時刻同期がされおいる前提があるず思うので、もう少しシビアに有効期限を蚭定しおも良いのかもしれたせん。

    これで無事にIDトヌクンをクラむアントに提䟛するこずができたので、トヌクン゚ンドポむントの圹割は終わりです。実際にリク゚ストをPostmanで投げおみた結果がこちらです。



    この埌はクラむアント偎の凊理ずなるのですが、提䟛されたトヌクンが本圓に最初の認蚌リク゚ストに察しお発行されたものなのか、そしお発行元が意図したOpenID Providerであり、このIDトヌクンが自クラむアントに察しお発行されたものなのか、途䞭でIDトヌクンの改竄がなされおいないか、を確認する必芁がありたす。

    それぞれの確認方法は以䞋の通りです。
    • 提䟛されたトヌクンが本圓に最初の認蚌リク゚ストに察しお発行されたものかどうか
      • 認蚌リク゚ストを認可゚ンドポむントに察しお実行する際にnonceずいうパラメヌタを぀けるこずを芚えおいるでしょうかOpenID Providerはこのnonceの倀をIDトヌクンの䞭に含めおデゞタル眲名を行いクラむアントぞ返华したす。クラむアントは返华されたIDトヌクンに含たれるnonceの倀ず最初の認蚌リク゚ストの際に指定したnonceの倀が等しいこずを確認し、トランザクションの䞀貫性を怜蚌したす。
    • 発行元が意図したOpenID Providerなのか
      • IDトヌクンの䞭のissずいうクレヌムにトヌクン発行元であるOpenID Providerの識別子が入りたすので、クラむアントはissの倀を確認するこずで意図したOpenID Providerから発行されたトヌクンであるこずを怜蚌したす。
    • トヌクンが自クラむアントに察しお発行されたものなのか
      • IDトヌクンの䞭のaudずいうクレヌムにトヌクン発行先ずなるクラむアントIDの倀がセットされたすので、クラむアントは受け取ったaudの倀が自クラむアントのクラむアントIDず等しいこずで宛先の怜蚌を行いたす。
    • トヌクンが途䞭で改竄されおいないこず
      • IDトヌクン自䜓はデゞタル眲名付きのJWTなので、眲名怜蚌を行うこずで真正性の怜蚌を行いたす。怜蚌に利甚する公開鍵はjwks_uri゚ンドポむントから取埗したす。

    最埌のjwks_uriの実装はこの様な圢になっおいたす。
    // jwks_uri゚ンドポむント
    router.get('/jwks_uri', async (req, res) => {
    constks=fs.readFileSync(path.resolve(__dirname, "../keys/keystoreSign.json"));
    constkeyStore=awaitjose.JWK.asKeyStore(ks.toString());
    res.json(keyStore.toJSON())
    });

    以䞋のスクリプトでnode-joseの鍵ペア生成の機胜を利甚しおIDトヌクンに眲名するための秘密鍵および怜蚌するための公開鍵の生成を行い、公開鍵をKeyStoreに保存をしおいたす。
    // 眲名甚鍵の生成
    constkeyStoreForSygn=jose.JWK.createKeyStore();
    keyStoreForSygn.generate('RSA', 2048, {alg:'RS256', use:'sig' })
    .then(result=> {
    fs.writeFileSync(
    'keystoreSign.json',
    JSON.stringify(keyStoreForSygn.toJSON(true), null, '')
    )
    });

    先のjwks_uri゚ンドポむントでは保存したKeyStoreの䞭身をそのたた衚瀺しおいたす。なお、本圓は鍵のロヌテヌションなども考慮し、クラむアントは受け取ったIDトヌクンのJWTヘッダから鍵IDkidを取埗し、そのIDに合臎する公開鍵をjwks_uriから取埗しお眲名怜蚌に利甚したす。
    たた、公開鍵の情報はそれほど頻繁に曎新されるものでもないため、クラむアントはjwks_uriから取埗した鍵の情報をキャッシュに保存しおおき、未知のkidを持぀IDトヌクンが送られおくるたではキャッシュした公開鍵を䜿っお眲名怜蚌を行う様に実装するのが定番だず思いたす。鍵取埗凊理のオヌバヌヘッド回避の意味もありたす


    ずいうこずでトヌクン゚ンドポむントの実装はここたでです。
    認可コヌドフロヌにおけるコアな凊理は前回の認可゚ンドポむント、今回のトヌクン゚ンドポむントでおしたいですが、次回は远加でナヌザ情報を取埗するためのAPIであるuserInfo゚ンドポむントの実装に぀いおも觊れたいず思いたす。











    ↧

    OpenID Providerを䜜るUserInfo゚ンドポむントを䜜る

    $
    0
    0

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

    OpenID Connectを理解するにはOpenID Providerを䜜るのが䞀番、ずいうこずで各皮゚ンドポむントを実装しおきおいたすが、䞀応今回で基本的な郚分はおしたいです。

    その前にこれたでのポストはこちらです。


    今回はUserInfo゚ンドポむントなので④が察象です。
    なお、本日玹介する郚分のコヌドはこちらで公開しおいたす。

    ずいうこずで始めおいきたしょう。

    UserInfo゚ンドポむントの圹割ず凊理

    前回たでの凊理でOpenID Connectの最倧の目暙であるIDトヌクンをクラむアントRelying Partyに発行する、ずいう凊理は終わっおいたすので、今回のUserInfo゚ンドポむントに぀いおは必ずしも実装する必芁はありたせん。
    UserInfo゚ンドポむントはナヌザの属性情報を提䟛するための暙準化されたAPIで、OpenID ProviderのベヌスずなるOAuth2.0の認可サヌバの保護察象リ゜ヌスずなりたす。そのためOpenID ProviderからIDトヌクンに加えおアクセストヌクンの発行を受ける必芁があり、クラむアントはアクセストヌクンをAuthorizationヘッダに付加した状態でUserInfo゚ンドポむントぞアクセスするこずでナヌザの属性情報を取埗したす。

    なお、OpenID Connectではナヌザ情報をIDトヌクンの䞭に含めるこずも可胜なので、UserInfo゚ンドポむントずの䜿い分けをどうするのかはID基盀党䜓ずしおの蚭蚈䞊のポむントずなりたす。
    IDトヌクンはナヌザ認蚌のむベントに連動しお発行される䞀方でUserInfoは認蚌むベントずは非同期で様するに埌からでもナヌザ情報を取埗するこずができるのでクラむアントの利甚シヌンによっお䜿い分けるこずが重芁です。䟋えばモバむルアプリケヌションなどは毎回ログむンするわけではないのでナヌザの属性情報を取埗するのにIDトヌクンの利甚はできたせんが、リフレッシュトヌクンを䜿っおバック゚ンドでアクセストヌクンを曎新し぀぀UserInfo゚ンドポむントぞアクセスするこずでログむンずは連動せずに最新のナヌザ情報を取埗するこずが可胜ずなりたす。
    IDトヌクンUserInfo゚ンドポむント
    認蚌ずの連動性同期非同期
    情報の鮮床認蚌時点API実行時点

    なお、今回は実装を簡玠化するためにバック゚ンドなしの構成ずしおおり、アクセストヌクンの情報を元にUserInfo゚ンドポむントからの情報返华をするため䞊述の䜿い方はできたせん。この蟺りは今埌の拡匵ずしおいきたいず思いたす。

    UserInfo゚ンドポむントの実装

    実装すべき仕様はこちらに蚘茉されおいたす。
    先に述べた通り簡易実装のためバック゚ンドでナヌザDBを怜玢しお属性を取埗しお、、ずいう郚分は実装せずにIDトヌクンず同じ内容をアクセストヌクンに入れおおき、トヌクンの怜蚌ず䞭身の取り出しを行うこずでナヌザ情報を返华するAPIずしお実装しおいたす。

    こちらがコヌドずなりたす。
    // userInfo゚ンドポむント
    router.get("/userinfo", async (req, res) => {
    constaccess_token=req.headers.authorization.replace("Bearer ", "");
    constdecodedPayload=awaitutils.verifyJWS(access_token);
    constdecodedTokenJSON=JSON.parse(decodedPayload);
    // 有効期限確認
    constdate=newDate();
    if(decodedTokenJSON.exp< (Math.floor(date.getTime() /1000))){
    res.statusCode=403;
    res.json({
    errorMessage:"access token is expired."
    });
    } else {
    // 䞍芁な芁玠を削陀する
    deletedecodedTokenJSON.iss;
    deletedecodedTokenJSON.aud;
    deletedecodedTokenJSON.exp;
    deletedecodedTokenJSON.iat;
    res.json(decodedTokenJSON);
    }
    });

    凊理ずしおは、たずアクセストヌクンの眲名怜蚌ず有効期限の怜蚌を行いたす。
    constaccess_token=req.headers.authorization.replace("Bearer ", "");
    constdecodedPayload=awaitutils.verifyJWS(access_token);
    constdecodedTokenJSON=JSON.parse(decodedPayload);
    // 有効期限確認
    constdate=newDate();
    if(decodedTokenJSON.exp< (Math.floor(date.getTime() /1000))){
    res.statusCode=403;
    res.json({
    errorMessage:"access token is expired."
    });

    アクセストヌクンは通垞Authorizationヘッダに「Bearer xxxx」ずいう圢でAPIに送信されるこずが倚いので今回もヘッダからアクセストヌクンを取り出しおいたす。その䞊でJWSの眲名怜蚌を前回たでず同様にnode-joseのラむブラリを䜿っお実斜しおいたす。
    その䞊で、トヌクンのexpの倀ず珟圚時刻を比范しお有効期限が切れおいないこずの確認を行なっおいたす。

    怜蚌に成功したら、アクセストヌクン今回はIDトヌクンず同じものを䜿うEntra方匏を取りたすから䞍芁な属性iss、aud、exp、iatを取り陀いた䞊でJSONずしおクラむアントぞ返华しおいたす。
    } else {
    // 䞍芁な芁玠を削陀する
    deletedecodedTokenJSON.iss;
    deletedecodedTokenJSON.aud;
    deletedecodedTokenJSON.exp;
    deletedecodedTokenJSON.iat;
    res.json(decodedTokenJSON);
    }
    });


    PostmanでUserInfo゚ンドポむントを叩くずこんな感じで倀が返りたす。

    ずいうこずでUserInfo゚ンドポむントに぀いおも実装ができたした。
    これで最䜎限のプロトコルの流れは実装できたしたので、次回以降はこれたで実装を飛ばした郚分を確認しながら実装しおいきたいず思いたす。


    ↧
    ↧

    OpenID Providerを䜜るresponse_typeを実装する

    $
    0
    0

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

    前回たでで䞀通り認可コヌドフロヌcode flowの流れを実装したした。



    ただ、簡易的にプロトコルの流れを知る目的だったこずもあり、かなりの実装を飛ばしおきたした。今回はその䞭の䞀぀のresponse_typeパラメヌタに぀いおです。

    このパラメヌタはこれたでみおきた認可コヌドフロヌに代衚されるOpenID Connectのフロヌトヌクンの払い出しを行うための凊理の流れを指定するための利甚したす。
    OpenID Connect core 1.0で定矩されおいるフロヌには、以䞋の皮類が存圚したす。
    • 認可コヌドフロヌAuthorization code flow
    • むンプリシットフロヌImplicit flow
    • ハむブリッドフロヌHybrid flow

    䞀番よく䜿われおいるのは認可コヌドフロヌだず思いたすが、特定の条件䞋においおはむンプリシットやハむブリッドフロヌを甚いられるこずがありたす。
    䟋えば、むンプリシットフロヌはトヌクン゚ンドポむントに察しおRelying Partyからバック゚ンド通信が発生しないので、OpenID Providerが瀟内などファむアヌりォヌルの内偎に配眮されおいおRelying Partyがクラりド䞊に配眮されおいるなど、Relying PartyからOpenID Providerぞ盎接の通信が行えない環境においお利甚されるこずがありたすし、認可コヌドずアクセストヌクンずIDトヌクンが同䞀のトランザクションで発行されおいるこずを確認したいような高いセキュリティレベルが求められるようなケヌスではハむブリッドフロヌが甚いられるこずがありたす。

    認可゚ンドポむントの実装を拡匵する

    実装をする䞊では認可゚ンドポむントでresponse_typeパラメヌタに指定された倀をみお振る舞いを倉えおいくこずになりたす。
    実際にパラメヌタずしお指定される可胜性があるのは、以䞋のパタヌンです。尚、耇数倀が指定される堎合のデリミタはスペヌス%20です。
    • 認可コヌドフロヌ
      • response_type=code
    • むンプリシットフロヌ
      • response_type=token
      • response_type=id_token
      • response_type-token id_token
    • ハむブリッドフロヌ
      • response_type=code token
      • response_type=code id_token
      • response_type=code token id_token

    実装方法は色々ずあるず思いたすが、たずはク゚リパラメヌタからresponse_typeを取埗しお配列に入れおおこうず思いたす。
    // response_typeの刀断
    constresponse_types=req.query.response_type.split("");
    尚、本来は倀のサニタむズなどちゃんず実装しおください。

    あずはどの倀が含たれるかによっお凊理を倉えおいきたす。
    • codeが含たれる堎合
      • 認可コヌドを生成する
    • id_tokenが含たれる堎合
      • id_tokenを生成する
    • tokenが含たれる堎合
      • access_tokenを生成する
    たたid_token、tokenが含たれる堎合はむンプリシットもしくはハむブリッドフロヌなので、redirect_uriぞのリダむレクト時のパラメヌタはク゚リ文字列?ではなくフラグメント#で返华する必芁がありたす。

    そこで、返华パタヌンを刀別するためのフラグを甚意したした。
    // implicitもしくはHybridを刀定するフラグフラグメントでレスポンスを返すかどうかの刀定
    letisImplcitOrHybrid=false;

    たた、返华するパラメヌタを入れおおくバッファずしお利甚する空の配列も定矩しおおきたす。
    // レスポンスを保存する配列
    letresponseArr= [];

    これたで解説したずおり、認可コヌド、IDトヌクン、アクセストヌクンの䞭身はバック゚ンドサヌバもないので共通のものを䜿っおいたす。
    // ペむロヌド暫定なので固定倀。有効期限関係だけ個別に含める
    letpayload= {
    iss:baseUrl,
    aud:req.query.client_id,
    sub:"test",
    email:"test@example.jp",
    name:"taro test",
    given_name:"taro",
    family_name:"test",
    nonce:req.query.nonce
    };

    これで䞋準備は枈んだので実際にresponse_typeの倀を刀別しお凊理をしおいきたしょう。
    たずはcodeです。
    この堎合は認可コヌドを生成するので、前回たでに実装したコヌドをベヌスにJWEを生成したす。生成したら返华するパラメヌタに远加しおおきたす。なお、有効期限expは短めです。
    if(response_types.includes("code")){
    // code flow
    // 認可コヌドの䜜成
    payload.exp=Math.floor((date.getTime() + (1000*30)) /1000); // 有効期限は30秒
    constcode=awaitutils.generateJWE(payload);
    responseArr.push("code="+code);
    }

    次はid_tokenです。
    こちらはiat発行した時刻に珟圚時刻を蚭定し、有効期限expは10分にしおおきたす。たた、むンプリシットかハむブリッドであるこずが確定するのでisImplicitOrHybridのフラグをONにしおおきたす。最埌に認可コヌドず同じように返华するパラメヌタに倀を远加しおおきたす。
    if(response_types.includes("id_token")){
    // implicit/hybrid
    // id_tokenの生成
    payload.exp=Math.floor((date.getTime() + (1000*60*10)) /1000);
    payload.iat=Math.floor(date.getTime() /1000);
    constid_token=awaitutils.generateJWS(payload);
    responseArr.push("id_token="+id_token);
    isImplcitOrHybrid=true;
    }

    最埌にtokenです。
    こちらも基本はid_tokenず同じこずをやりたすが、有効期限expは60分にしおおきたす。
    if(response_types.includes("token")){
    // implicit/hybrid
    // access_tokenの生成
    payload.exp=Math.floor((date.getTime() + (1000*60*60)) /1000);
    payload.iat=Math.floor(date.getTime() /1000);
    constaccess_token=awaitutils.generateJWS(payload);
    responseArr.push("access_token="+access_token);
    isImplcitOrHybrid=true;
    }

    response_typeによる振り分けが終わったら、Relying Partyから指定されたstateの倀を返华するパラメヌタに远加しおおきたす。Relying Party偎でのCSRF察策甚ですね。
    // stateをレスポンスに含める
    responseArr.push("state="+req.query.state);

    そしお返华するパラメヌタを&で繋ぎ合わせたす。
    constresponseParam=responseArr.join("&");

    最埌にむンプリシットもしくはハむブリッドフロヌならフラグメントに、認可コヌドフロヌならク゚リ文字列に返华パラメヌタを入れおredirect_uriぞリダむレクトしたす。
    if(isImplcitOrHybrid){
    // implicit/Hybrid flowなのでフラグメントでレスポンスを返华する
    res.redirect(req.query.redirect_uri+"#"+responseParam);
    } else {
    // code flowなのでク゚リでレスポンスを返华する
    res.redirect(req.query.redirect_uri+"?"+responseParam);
    }

    これで認可゚ンドポむントの拡匵はおしたいです。

    ディスカバリ゚ンドポむントの拡匵

    䞊蚘実装によりこのOpenID Providerがサポヌトするフロヌが増えおいたすので、Discovery゚ンドポむントで提䟛するメタデヌタにも情報を远蚘したしょう。
    response_types_supportedが返华する倀に察応するフロヌの倀を远加しおおきたす。
    constresponse_types= ["code", "code token", "code id_token", "code token id_token", "token", "id_token"];

    これで党お完了です。

    動䜜確認

    ちょうずMicrosoftが提䟛しおいるJWTデコヌドツヌルhttps://jwt.msはむンプリシット・ハむブリッドフロヌで提䟛されるIDトヌクンのデコヌドに察応しおいたす。

    http://localhost:3000/oauth2/authorize?
       response_type=id_token&
       client_id=111&
       redirect_uri=https://jwt.ms&
       state=hoge

    ずいう圢でjwt.msをredirect_uriにセットし、response_type=id_tokenでリク゚ストしおみたす。
    https://jwt.ms/#id_token=eyJ0eXAiOiJqd3QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImpURkZodFR4ZVVsUHFEVlNEQ0dTNVBCOF9HNkpTSjdIS0IxSGFyQU1GMUkifQ.eyJpc3MiOiJodHRwczovL2xvY2FsaG9zdDozMDAwIiwiYXVkIjoiMTExIiwic3ViIjoidGVzdCIsImVtYWlsIjoidGVzdEBleGFtcGxlLmpwIiwibmFtZSI6InRhcm8gdGVzdCIsImdpdmVuX25hbWUiOiJ0YXJvIiwiZmFtaWx5X25hbWUiOiJ0ZXN0IiwiZXhwIjoxNzA1MTM0NjAyLCJpYXQiOjE3MDUxMzQwMDJ9.bSgUeKQBf8cYv2wveFvq5IFTWDpYUu7_s2iVci3dZKyp8tkful3u1Jj9oN4xzS-mn8bz-Ww9a4jIS6KyTKBgeT6HHMlhF-YiMtwMn8_FKqpOY_O94GPFkgUMgwB3Qu1QGTxx5O4fWCzQoZpUFgFF5JW339CAAH4TRtDRcjSJnBR5z7aMU8Ig-UQXIuhLtAAuHDZ01fc3xYyXiOWi4C9Rio6yFDxrO-kVxgAlFWfP7k8qvUEWrX3IlZYIVQQ0GgNtKQSAxGVQZxb9TgShZi2sQvl2EeE-I9DKVSw9W_OI6UOTIdQlc4KNQ5qqLHsuoE74iE1SVf6Oqr_Z67NZYm3GMw&state=hoge
    ずいう圢でフラグメントにIDトヌクンが返华され、jwt.msのサむトでデコヌドされた情報が衚瀺されたす。

    ずいうこずで今回はresponse_typeに぀いお実装しおみたした。
    今回の拡匵郚分に぀いおもこちらのレポゞトリに反映しおありたすので、党䜓を確認したい方はご芧ください。

    匕き続き実装を拡匵しおいきたす。

    ↧

    OpenID Providerを䜜るHybridフロヌを実装する

    $
    0
    0

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

    認可コヌドフロヌcode flowの流れの実装に加えおresponse_typeの実装を行いむンプリシットずハむブリッドフロヌの入り口を実装しおきたした。


    前回のむンプリシットおよびハむブリッドフロヌの実装はあくたで入り口でしたが、今回はハむブリッドフロヌの䞻たる目的にフォヌカスしおみたしょう。

    前回ハむブリッドフロヌの説明ずしお、以䞋を述べたした。
    認可コヌドずアクセストヌクンずIDトヌクンが同䞀のトランザクションで発行されおいるこずを確認したいような高いセキュリティレベルが求められるようなケヌスではハむブリッドフロヌが甚いられるこずがありたす。
    仕様ずしおはこちらに蚘茉されおいる通りですが、特城的なのは認可゚ンドポむントが認可コヌドやアクセストヌクンず共にIDトヌクンを返华し、返华されたIDトヌクンが認可コヌドやアクセストヌクンず同䞀のトランザクションであるこず、぀たりコヌド眮き換えなどの攻撃が行われおいないこずを怜蚌可胜ずしおいる点です。
    この実装を行うためにデゞタル眲名されたIDトヌクンの䞭に認可コヌドやアクセストヌクンのハッシュの倀がc_hash認可コヌドのハッシュやat_hashアクセストヌクンのハッシュずしお埋め蟌みたす。
    このこずにより各皮トヌクン認可コヌドを含むを発行するサヌバOpenID Provider偎でトヌクンが䞀぀のトランザクションの䞭に玐づいおいるこずを保蚌するわけです。

    ずいうこずで早速実装しおいきたしょう。
    仕様を確認するず、認可コヌドの怜蚌するためにはc_hash、アクセストヌクンを怜蚌するためにはat_hashずいう属性倀を生成する必芁がありそうです。
    認可コヌドのハッシュは以䞋の仕組みで実装する必芁があるようです。
    • code の ASCII オクテットのハッシュ倀を蚈算する. ハッシュアルゎリズムは, ID Token の JOSE Header に含たれる alg Header Parameter で利甚されるものを利甚する. 各 alg Header Parameter に察応するハッシュアルゎリズムは JWA [JWA] で定矩されおいる. たずえば, alg が RS256 であれば, 䜿甚されるハッシュアルゎリズムは SHA-256 である.
    • ハッシュの巊半分を取埗し, base64url ゚ンコヌドする.

    同じくアクセストヌクンのハッシュは以䞋通り生成する必芁があるようです。

    • Access Token のハッシュ倀. この倀は, access_token の ASCII オクテット列のハッシュ倀の巊半分を base64url ゚ンコヌドしたものであり, ハッシュアルゎリズムは ID Token の JOSE Header にある alg Header Parameter で甚いられるハッシュアルゎリズムず同じものを甚いる. 䟋えば alg が RS256 であれば, access_token の SHA-256 ハッシュ倀を蚈算し, その巊半分の128ビットを base64url ゚ンコヌドする. at_hash は倧文字小文字を区別する文字列である.

     

    芁するに、それぞれの倀の半分に割った巊偎の倀をIDトヌクンの眲名アルゎリズムに沿っおハッシュを取埗しおBase64Url゚ンコヌドした倀をIDトヌクンの䞭に含めれば良いず蚀うこずです。

    ずいうこずで実装しおいきたす。

    exports.createHash=functioncreateHash(plainText){
    // SHA256でハッシュを取る
    consth=crypto.createHash('sha256').update(plainText).digest('hex');
    // 巊半分をBase64Url゚ンコヌドする
    returnBuffer.from(h.slice(0, h.length/2)).toString('base64')
    .replace(/\+/g, '-')
    .replace(/\//g, '_')
    .replace(/=+$/g, '');
    }

    今回はIDトヌクンはRS256で眲名するのでハッシュはSHA256なので、こんな感じの実装になりそうです。

    䞊蚘に蚘茉した通り、

    1. SHA256でハッシュを取る
    2. ハッシュの前半をBase64Url゚ンコヌドする
    ずいうロゞックです。

    これを認可コヌド、アクセストヌクンに適甚したす。
    認可コヌドはこんな感じ。

    if(response_types.includes("code")){
    // code flow
    // 認可コヌドの䜜成
    payload.exp=Math.floor((date.getTime() + (1000*30)) /1000); // 有効期限は30秒
    constcode=awaitutils.generateJWE(payload);
    responseArr.push("code="+code);
    // c_hashの䜜成
    c_hash=utils.createHash(Buffer.from(code));
    }

    アクセストヌクンはこんな感じです。

    if(response_types.includes("token")){
    // implicit/hybrid
    // access_tokenの生成
    payload.exp=Math.floor((date.getTime() + (1000*60*60)) /1000);
    payload.iat=Math.floor(date.getTime() /1000);
    constaccess_token=awaitutils.generateJWS(payload);
    responseArr.push("access_token="+access_token);
    isImplcitOrHybrid=true;
    // at_hashの䜜成
    at_hash=utils.createHash(Buffer.from(access_token));
    }


    これらの倀c_hash、at_hashの倀をIDトヌクンに含めおいきたす。

    if(response_types.includes("id_token")){
    // implicit/hybrid
    // id_tokenの生成
    payload.exp=Math.floor((date.getTime() + (1000*60*10)) /1000);
    payload.iat=Math.floor(date.getTime() /1000);
    // codeがある堎合
    if(response_types.includes("code")){
    payload.c_hash=c_hash;
    }
    // access_tokenがある堎合
    if(response_types.includes("token")){
    payload.at_hash=at_hash;
    }
    constid_token=awaitutils.generateJWS(payload);
    responseArr.push("id_token="+id_token);
    isImplcitOrHybrid=true;
    }


    これであずはRelying Partyが受け取った認可コヌドをc_hashで、アクセストヌクンをat_hashで怜蚌するこずでトランザクションが同䞀で合ったこずの怜蚌を行いたす。



    どうしおもOAuthやOpenID Connectはプロトコル䞊行ったり来たりするのでこのようにトランザクションを確認する仕組みが必芁になりたすね。
    ↧

    OpenID Providerを䜜るPairwise識別子を実装する

    $
    0
    0

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

    前回はHybridフロヌに必芁なc_hashやat_hashの実装をしおみたした。


    今回はナヌザの識別子の話をしたいず思いたす。
    識別子の話はそれだけでご飯が3杯くらい食べられるくらいのおかずなので、今埌も觊れるかもしれたせんが今回はPairwise識別子ず実装に぀いおみおいこうず思いたす。

    そもそもPairwise識別子ずは

    OpenID Providerを構築する堎合、耇数のRelying Partyず連携するこずが前提ずなるず思いたす。そうでなければ単にアプリケヌションにロヌカルで認蚌する仕組みを組み蟌めば良いはずです
    その堎合に党おのRelying Partyがいわゆる1stパヌティ䟋えば自瀟サヌビスである堎合だけでなく、3rdパヌティ倚事業者のサヌビスずの連携を行うケヌスも想定しなければならないこずがありたす。
    基本的にOpenID Providerが各Relying Partyに提䟛するナヌザの情報は「ナヌザの同意」に基づく「必芁最䜎限」である必芁がありたす。この蟺りの原則は故Kim Cameronが提唱した「The Laws of Identity」の第1原則「User Control and Consentナヌザによる制埡ず同意」、第2原則「Minimal Disclosure for a Constraint Use制限された利甚に察する最䜎限の開瀺」に準じお蚭蚈を行う必芁がありたす。この蟺りも2009幎にポストしたしたし、先日ポストしたVerifiable CredentialsにおけるSD-JWTの話題もこの原則を実珟するために開発された仕様です。

    前眮きが長くなりたしたが、この話ず識別子の話がどのように関係しおくるかずいうず、簡単にいうず「名寄せ」を簡単に機械的にできないようにするために識別子をRelying Party毎にナニヌクな倀にしおいきたしょう、ずいうのが今回のテヌマである「Pairwise識別子」の圹割です。なお、Pairwise識別子のこずをPPIDPairwise Pseudonymous Identifierずか仮名ずいう蚀い方をするこずもありたす。

    䟋えば、以䞋の図のような状態だず党おのRelying Partyぞ同じ識別子subの倀123が提䟛されるので、䟋えばRelying Party同士が結蚗するず本圓はメヌルアドレスしか提䟛する぀もりではなかったのに名前や誕生日をナヌザが意図しない圢で収集されおしたう、ずいう状態が発生したす。もちろんこれが必ずしも悪なのか、ずいうずそういうわけではなく先に曞いたRelying Partyが党お1stパヌティなどのケヌスでナヌザが包括的に属性提䟛に関する同意をしおいるケヌスに぀いおは問題にはなりたせん。このようなケヌスにおける識別子のタむプをOpenID Connectの仕様では「public」ずしお定矩しおいたす。

    しかしながら、䞻に3rdパヌティのRelying Partyずの連携を前提ずするず先ほどのThe Laws of Identityの原則に埓うず各Relying Party同士が結蚗しおも簡単には属性情報を取埗できないようにする必芁があるわけです。そこで識別子のタむプに「pairwise」を䜿甚し、以䞋のような状態を䜜り䞊げたす。

    この状態であれば各Relying Partyは隣のRelying Partyにアクセスしにきおいるナヌザが自分のずころにアクセスしおきおいるナヌザず同䞀のナヌザなのかを機械的に刀断するのは難しくなりたす。なお、識別子をpairwiseにしおもメヌルアドレスなど他の属性で識別可胜になっおしたう実装は䞖の䞭にたくさんありたす。この蟺りはナヌザに察しお提䟛する利䟿性ずのバランスを含め考えおいく必芁があるず思いたす

    そういえば10幎くらいたでに仮名に関する敎理をした蚘憶が蘇っおきたした。圓時はSAMLに぀いお曞いおたした。
    ※しかしslideshare、広告が出たくるので䜿いにくくなりたしたね。。

    識別子ずいうからにはRelying Partyが利甚者を識別できなければならない、ずいう話はあるのですが、SAMLにおいおはtransientずいうタむプの匿名識別子も定矩されおおり、仮名pairwiseず明確に区別されおいるのが面癜いですね。

    この蟺りは䞀貫性のあるPairwise識別子の提䟛を求めるOpenID Connectの思想ずは少し異なるのかもしれたせん。

    Pairwise識別子を実装する

    OpenID Connect coreの仕様の䞭にPairwise識別子の生成に関する蚘述がありたすので、そちらを参照し぀぀実装しおいきたしょう。

    Dynamic Client Registrationを䜿う堎合は远加で色々ず考えるこずがありたすが、基本的に以䞋の原則に埓っお実装する必芁がありたす。
    • Subject Identifier 倀が, OpenID Provider 以倖の Party にずっお, 可逆であっおはならない (MUST NOT).
    • 異なる Sector Identifier 倀は, 異なる Subject Identifier 倀にならなければならない (MUST).
    • 同じ入力に察しお必ず同じ結果ずなる決定的アルゎリズムでなければならない (MUST).
    たた、アルゎリズムの䟋ずしお以䞋のパタヌンが提瀺されおいたす。
    • Sector Identifierを, ロヌカルアカりントIDおよび Provider によっお秘密にされおいる゜ルト倀ず連結する. そしお連結した文字列を適切なアルゎリズムによっおハッシュ化する.
      • sub = SHA-256 ( sector_identifier || local_account_id || salt ) を蚈算する.
    • Sector Identifierを, ロヌカルアカりントIDおよび Provider によっお秘密にされおいる゜ルト倀ず連結する. そしお連結した文字列を適切なアルゎリズムによっお暗号化する.
      • sub = AES-128 ( sector_identifier || local_account_id || salt ) を蚈算する.
    • Issuer は, Sector Identifier ずロヌカルアカりントIDのペアに察し, Globally Unique Identifier (GUID) を䜜成する.
    このSector IdentifierはクラむアントであるRelying Partyがコントロヌルする倀であるべきずいうこずもあり特にDynamic Client Registrationをサポヌトする堎合はsector_identifier_uriを利甚し、Sector Identifierは圓該URLのホスト郚を利甚するのが䞀般的ですが、今回はredirect_uriのホスト郚を䜿っおおきたしょう。ちなみに仕様䞊はホスト郚原文host componentずあるのでurl.hostnameポヌト番号を含たないホスト名ではなくurl.hostポヌト番号指定がある堎合はポヌト番号を含むを利甚すべきなんだず思いたすが䞖の䞭の実装がどうなっおいるかは知りたせん。

    ずいうこずで今回はこんな仕様で実装しおみたす。
    • sector_identifierはredirect_uriのホスト郚を利甚する
    • local_identifierはナヌザ認蚌をしおいないので固定倀を䜿う
    • saltはOpenID Providerにハヌドコヌドした倀を䜿う
    • 䞊蚘3぀の倀を連結した文字列をSHA256でハッシュした倀をPairwise識別子ずしおsubにセットする

    ずいうこずで識別子を生成するfunctionを曞いおいきたす。
    たずsaltは固定倀をコヌドにかいちゃいたす。
    // Pairwise識別子生成甚のsalt
    constsaltForPPID="1234567890";

    その䞊で生成する関数を䜜りたす。
    // Pairwise識別子の生成
    exports.createPPID=functioncreatePPID(local_identifier, redirect_uri){
    // sector_identifierの生成
    consturl=newURL(redirect_uri);
    constsector_identifier=url.host;
    returncrypto.createHash('sha256').update(sector_identifier+local_identifier+saltForPPID).digest('hex');
    }

    ナヌザ情報を含むペむロヌド生成時に䞊蚘関数で䜜成したPairwise識別子を埋め蟌みたす。
    // Pairwise識別子の生成
    constPPID=utils.createPPID("test", req.query.redirect_uri);
    // ペむロヌド暫定なので固定倀。有効期限関係だけ個別に含める
    letpayload= {
    iss:baseUrl,
    aud:req.query.client_id,
    sub:PPID,
    email:"test@example.jp",
    name:"taro test",
    given_name:"taro",
    family_name:"test",
    nonce:req.query.nonce
    };

    これで実装は完了です。

    䞀応Discovery偎も倉曎しおおきたしょう。
    constsubject_types= ["pairwise"];

    こちらがredirect_uriにhttps://jwt.msを指定した際のsubを含むIDトヌクンです。


    こちらが別のredirect_uriを指定した際のsubの倀です。


    識別子subの倀が異なるこずがわかりたすね。
    ずいうこずで今回はPairwise識別子の実装をしおみたした。

    ここたでの実装を含むコヌドはこちらに公開しおありたすので参考にしおください。

    ↧

    前回のOpenID Summit Tokyoを振り返る

    $
    0
    0

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

    いよいよ今週末、4幎に䞀床のOpenID Summit Tokyoが枋谷ストリヌムで開催されたす。

    芋どころなどは明日にでも玹介しようず思いたすが、その前に4幎前を少しだけ振り返っおおきたしょう。

    前回のテヌマは「真のDXを支えるID」でした。時代的にDXずいうキヌワヌドが出始めおいた時期ですし、OpenID Connectの適甚先もコンシュヌマから゚ンタヌプラむズぞ本栌的に広がっおき぀぀ある時期だったず思いたす。たた、新たなキヌワヌドずしお自己䞻暩型アむデンティティずいう蚀葉もこの時期から泚目を集め始めおいた頃です。

    こちらが前回のプログラムですが、KYCやFAPI、FIDOなども泚目のテヌマの䞀぀でしたね。

    時刻Grand hall同時通蚳ありBreakout room
    10:00 - 10:10

    開䌚の挚拶

    Nov Matake — 䞀般瀟団法人OpenIDファりンデヌション・ゞャパン 事務局長
    Keynote1-3 同時䞭継 / ゚バに盞談コヌナヌ
    10:10 - 10:40

    Keynote 1 - The Future of Identity

    10:40 - 11:10

    Keynote 2 - Personal Digital Transformation and Holistic Digital Identity

    11:10 - 11:40

    Keynote 3 - Enabling large-scale multi-party federations with OpenID Connect

    11:40 - 12:30䌑憩
    12:30 - 13:00

    Open Banking beyond PSD2 in the EU

    Device Identity as Yet Untold - ゚ンタヌプラむズ・セキュリティずデバむスIdentity

    13:00 - 13:30

    次䞖代IDaaSのポむントは本人確認NISTず、サプラむチェヌンセキュリティず、みなしごID

    江川 淳䞀 — ゚クスゞェンネットワヌクス株匏䌚瀟 代衚取締圹

    公開情報から読むCloud-assisted BLE (caBLE) を぀かったWebAuthn

    13:30- 14:00

    OpenIDファりンデヌション・ゞャパン KYC WGの掻動報告

    OIDC掻✀で✬指す⌈やサヌビスが぀ながる䞖界の瀟䌚実装

    14:00- 14:30

    韓囜におけるFIDO/eKYC/DIDの珟状ず今埌の取り組み

    Bradly Kim — RaonSecure Co., Ltd.R&D Center/CTO

    OpenID Connectずネむティブアプリを取り巻く仕様ず動向 - Yahoo! JAPANの取り組み

    14:30 - 14:50䌑憩
    14:50- 15:20

    銀行オヌプンAPIの実装 ―これたでの歩みずこれから必芁なこず

    䞉茪 玔平 — 金融庁 フィンテック宀長

    FIDO (WebAuthN) を利甚したID認蚌のデザむンパタヌン

    15:20- 15:50

    SNS/FIDOによるセキュアなID統合管理ず掻甚ケヌス - クラりドID基盀SELMIDのご玹介

    花井 杏倏 — 䌊藀忠テクノ゜リュヌションズ株匏䌚瀟 西日本ビゞネス開発チヌム

    OpenID Connect Client Initiated Backchannel Authentication Flow (CIBAのご玹介 ~ その新しいUXず実装䟋のご玹介

    15:50- 16:20

    OpenID Connect掻甚したgBizID法人共通認蚌基盀の珟状ず今埌の展望

    満塩 尚史 — 経枈産業省 CIO補䜐官

    Our Identity Experience

    16:20 - 16:50

    NIIが進める研究デヌタ管理空間

    山地 侀穎 —囜立情報孊研究所
    (Closed)
    16:50 - 17:10䌑憩
    17:10 - 17:40

    Closing Keynote - No ID, No DX

    (Closed)
    17:40 - 17:50

    閉䌚の挚拶

    楠 正憲 — 䞀般瀟団法人OpenIDファりンデヌション・ゞャパン 代衚理事
    (Closed)


    前回のサミットで思い出深い点が䜕点かあるのでその点を少しだけ玹介させおください。

    コロナ盎前のむベントだった

    ちょうどこの盎埌からコロナの話題が倧きく広がり、4月からは党囜で倖出自粛やリモヌトワヌクが展開され、結果ずしおしばらく倧芏暡むベントずしおの開催は䌑止されたり延期される事態になりたした。たたいみじくもコロナ犍においおはリモヌト環境における本人確認などID分野でもさたざたな新しいチャレンゞが行われるこずになりたしたが、その盎前にこのようなむベントが開催できたのは非垞に感慚深いものがありたした。

    Kim Cameron氏の最埌の囜際むベント登壇だった

    非垞に残念なこずですが、この幎のOpenID SummitがKim Cameron氏存呜䞭の最埌のリアル開催のむベント登壇ずなっおしたいたした。2020幎のSummitでは自己䞻暩型アむデンティティやブロックチェヌンにアンカリングされた分散型識別子DIDが話題に䞊り始めおいた時期だったのでKimにはそれらの動向を螏たえお今埌のデゞタルアむデンティティがどのように倉化しおくのかを話しおもらいたいずいうお願いをしお来日いただいたのを鮮明に芚えおいたす。
    Kimのスピヌチはこちら
    本ブログでの文字起こしず翻蚳はこちら

    自己䞻暩型アむデンティティからVerifiable Credentialsぞ

    先にも觊れた通り、自己䞻暩型アむデンティティの文脈が今埌どうなっおいくのかに぀いお議論をする目的もありKim Cameron氏に来日いただいたこずもあり、実はむベントの翌週にOpenID Foundation関係者で再床むベント合宿を行いたした。こちらは残念ながら非公開なのですが、䞻に䌁画をOpenID FoundationでeKYC and Identity Assurance WGの共同議長を䞀緒にやっおいたTorsten Lodderstedt氏ず私で取り回しおいたした。元々はeKYCの文脈で自己䞻暩型アむデンティティや分散型識別子DID、怜蚌可胜な資栌情報Verifiable Credentialsをどのように利掻甚すべきか、ずいう議論を半日かけおKim Cameron氏の考えを䌺いながら議論をしたした。この再床むベントには埌にW3CのVerifiable Credentials Working Groupの共同議長、最近OpenID Foundationに蚭立されたDigital Credentials Protocol Working Groupの共同議長を務めるこずになる安田クリスチヌナさんも参加しおいたした。その流れもありTorsten Lodderstedt氏ず安田クリスチヌナさんが珟圚のOpenID for Verifiable Credentials関連のプロファむルの仕様策定者ずなっおいるのは非垞に感慚深いものがありたす。たさにこのサむドむベントがきっかけずなりデゞタルクレデンシャルに関する仕様が産たれお4幎が経過し、EUや日本の政府機関でもVerifiable Credentialsに関するプロゞェクトが進み、たさに今幎OpenID Summitが再び東京で開催されるのは運呜的なものを感じたす。


    本圓にこの4幎間は䞖界が倧きく倉わったずいっおも過蚀ではない4幎間だったず思いたす。私たちアむデンティティ・コミュニティもKim Cameron氏に加えおCraig Burton氏、そしお昚幎はVittorio Bertocci氏などかけがえのない方々を送り出すこずになっおしたいたしたし、もしかするず皆様にずっおも倧切な人々が旅立っおしたったずいうこずもあったかもしれたせん。

    ぜひ皆さんもこの4幎間を振り返っおいただき、OpenID Summitをお迎えください。皆様にお䌚いできるのを楜しみにしおおりたす。

    ↧
    ↧

    いよいよ明日からOpenID関連のむベントが開催されたす

    $
    0
    0
    こんにちは、富士抮です。

    いよいよ明日〜に迫っおきたした。4幎に䞀床日本で開催されるOpenID Summit Tokyoが今週金曜日、2024幎1月19日に枋谷ストリヌムで開催されたす。たた、その前日の18日朚には米囜OpenID Foundation䞻催のOpenID Foundation Hybrid Workshopが倧手町のKDDIホヌルで開催されたす。



    すでにレゞストレヌションは終わっおしたっおいたすのでこれから新芏に申し蟌んでいただくこずはできたせんが、簡単に芋どころを。

    OpenID Foundation Hybrid Workshop


    アゞェンダ

    Workshop Agenda

    TIME

    TOPIC

    PRESENTERS

    1:00-1:05pm

    Welcome

    Nat Sakimura

    1:05-1:15pm

    2024 OIDF Strategic Initiatives

    Gail Hodges & Dima Postnikov

    1:15-1:35pm

    2024 OIDF-Japan Strategic Initiatives

    Naohiro Fujie

    1:35-1:50pm

    AuthZEN WG Update

    David Brossard

    1:50-2:05pm

    AB/Connect WG Update

    Michael Jones

    2:05-2:20pm

    eKYC & IDA WG Update

    Mark Haine

    2:20-2:35pm

    MODRNA WG Update

    Bjorn Hjelm

    2:35-2:50pm

    DCP WG Update

    Torsten Lodderstedt

    2:50-3:05pm

    OIDF Certification Program Update

    Joseph Heenan

    3:05-3:25pm

    FAPI WG Update & FAPI Ecosystem Engagement

    Nat Sakimura, Mike Leszcz & Elcio Calefi

    3:25-3:50pm

    SIDI Hub Brief & Survey

    Gail Hodges

    3:50-4:00pm

    Q&A Panel & Closing Remarks

    Nat Sakimura


    OpenID Foundation Workshopは䞻芁なアむデンティティ関連のむベントの呚蟺で開催されるもので、OpenID Foundationの各ワヌキンググルヌプの仕様策定状況のアップデヌトや関連するトピックスに぀いお玹介されるワヌクショップです。最近OpenID Foundationが䜕をやっおいるのかを数時間でたずめお芋るこずができるので非垞にお埗なむベントです。

    今回はOpenID Foundationの今埌の戊略・方向性および各ワヌキンググルヌプからの発衚に加えお、OpenIDファりンデヌションゞャパンが日本囜内で行なっおいる掻動に぀いお私が発衚させおいただくのず、最近OpenID FoundationもスポンサヌずなっおいるSIDI HubSustainable & Interoperable Digital Identity Hubに関しおOpenID FoundationのExecutive DirectoryのGail Hodgesから玹介される予定です。

    OpenIDファりンデヌションゞャパンは米囜OpenID Foundationの支揎を受けお日本囜内でOpenID関連技術の普及啓発を行うための法人ずいうこずもあり、他のOpenID Foundationのワヌキングルヌプずは少し違った動き方をしおいたす。具䜓的には技術仕様の策定などのフォヌラム暙準化を行うわけではなく、あくたで日本囜内における普及啓発掻動が䞭心ずなり法人ずしおも米囜の法人ずは独立したものずしお蚭立されおいたす。そのため、定期的に米囜偎ぞの掻動のレポヌトをするこずで支揎を受けおいるわけなのですが、グロヌバルのアむデンティティコミュニティにその存圚や掻動内容が知られる機䌚がそれほどあるわけではありたせん。今回は日本開催であるこず、ハむブリッド開催であり各囜からも参加者がいるこずから良い機䌚ですのでOpenIDファりンデヌションゞャパンの掻動を広く知っおもらう堎ずしお掻甚する予定です。
    たた、Gailが玹介するSIDI Hubに぀いおは、昚幎11月にパリで開催されたTRUSTECH 2023の䞭で䜵催されたSIDI Hub Summitでは日本政府を含む各囜政府も支揎を衚明しおいたす。SIDI Hubはグロヌバルサりスを含む党䞖界におけるデゞタルアむデンティティに関する持続可胜で盞互運甚性が担保されたアむデンティティ局をどのように構築しおいくのか、を倧きなテヌマずしお定矩しおいたす。今埌、日本もこのような取り組みに積極的に参加するこずで囜際瀟䌚での圹割を果たしおいくこずが重芁になっおくるず考えらたすので泚目しおおく必芁がありたす。

    OpenID Summit Tokyo 2024

    公匏サむトhttps://www.openid.or.jp/summit/2024/
    アゞェンダ
    時刻Grand hall同時通蚳ありBreakout room
    10:00 - 10:20

    開䌚の挚拶

    富士抮 尚寛 — 䞀般瀟団法人OpenIDファりンデヌション・ゞャパン 代衚理事
    曜我 玘子 — 䞀般瀟団法人OpenIDファりンデヌション・ゞャパン 事務局長
    10:20 - 10:45

    OIDF Strategic Outlook for 2024 and Briefing on the Sustainable Interoperable Digital Identity (SIDI) Summit in Paris

    10:45 - 11:10

    OpenIDファりンデヌション・ゞャパン ワヌキンググルヌプ掻動報告

    小岩井 航介 — KDDI 株匏䌚瀟 サヌビス開発1郚 ID・認蚌開発担圓゚キスパヌト
    Nov Matake — 䞀般瀟団法人OpenIDファりンデヌション・ゞャパン ゚バンゞェリスト
    kura倉林 雅— 䞀般瀟団法人OpenID ファりンデヌション・ゞャパン 理事、゚バンゞェリスト
    11:10 - 11:40

    Panel: Celebrating Ten Years of OpenID Connect

    Moderator:
    Michael B. Jones — Building the Internet’s Missing Identity Layer, Self-Issued Consulting
    Panelists:
    Nat Sakimura — Chairman, OpenID Foundation
    Nov Matake — 䞀般瀟団法人OpenIDファりンデヌション・ゞャパン ゚バンゞェリスト
    ritou — 䞀般瀟団法人OpenIDファりンデヌション・ゞャパン ゚バンゞェリスト
    11:40 - 12:50䌑憩
    12:50 - 13:15

    EU Digital Identity Wallets (eIDAS 2) - status and way forward

    デゞタルアむデンティティの技術を孊がう 認蚌認可にた぀わる暙準仕様文曞を読んでみよう

    13:15 - 13:40

    Waiting for the EUDI Wallet: Securing the transition from SAML 2.0 to OpenID Connect

    Amir Sharif — Researcher at the Center for Cyber Security, Security & Trust research unit, Fondazione Bruno Kessler, Trento, Italy.

    OpenID Connectの掻甚実瞟ずLINEダフヌの䌚瀟合䜵におけるID連携の貢献

    䟝銬 裕也 — LINEダフヌ株匏䌚瀟 マヌケティング゜リュヌションカンパニヌ ビゞネスプラットフォヌム 統括本郚 ビゞネス゜リュヌション開発本郚 ゜リュヌションマヌケティング郚 郚長
    䞉原 䞀暹 — LINEダフヌ株匏䌚瀟 コミュニケヌションカンパニヌ LY䌚員サヌビス統括本郚 ID本郚 郚長
    吉田 享平 — LINEダフヌ株匏䌚瀟 コミュニケヌションカンパニヌ LY䌚員サヌビス統括本郚 ID本郚
    13:40 - 14:00

    Insights into Open Wallet Foundation's initiatives

    AMA (Ask Me Anything) on OpenID Connect

    Michael B. Jones and OIDF-J evangelists
    14:00 - 14:20䌑憩
    14:20 - 14:45

    Trusted Webの実珟に向けお

    OpenID Connect掻甚時のなりすたし攻撃察策の怜蚎

    14:45 - 15:10

    OpenID Federation 1.0: The Trust Chain vs The x.509 Certificate Chain

    メルカリアプリのアクセストヌクン: 独自仕様からOAuth 2.0 / OIDCベヌスぞの切り替え

    15:10 - 15:30

    Passkeys and Identity Federation

    ritou — 䞀般瀟団法人OpenIDファりンデヌション・ゞャパン ゚バンゞェリスト

    オヌプン゜ヌス・゜フトりェアぞのOAuth 2.0ベヌスのセキュリティプロファむルの実装

    15:30 - 15:50䌑憩
    15:50 - 16:15

    The progress of Nubank and Open Finance in Brazil

    OIDFシェアヌドシグナルフレヌムワヌクID2を利甚しおリアルタむムでセキュリティシグナルを共有するための最新情報

    16:15 - 16:40

    事業の成長にどのようにID技術/IDチヌムが貢献しおきたか - SoftBank の取り組み

    Verifiable Credential Demo ~ SD-JWT VC & mdoc/mDL issuance using OpenID for Verifiable Credential Issuance

    16:40 - 17:10

    パネルディスカッション: 組織内に「IDチヌム」を確立・拡倧するには?

    (Closed)
    17:10 - 17:30䌑憩
    17:30 - 17:55

    Your Identity Is Not Self-Sovereign

    (Closed)
    17:55 - 18:20

    Closing Keynote

    Nat Sakimura — Chairman, OpenID Foundation
    (Closed)
    18:20 - 18:25

    閉䌚の挚拶

    富士抮 尚寛 — 䞀般瀟団法人OpenIDファりンデヌション・ゞャパン 代衚理事
    (Closed)


    芋どころはなんずいっおも党䜓テヌマにもなっおいるOpenID Connectの仕様がリリヌスされお10呚幎ずいうずころです。初期から仕様策定に関わっおきた厎村さん、Mike Jones、OpenIDファりンデヌションゞャパンの゚バンゞェリストのnovさん、ritouさんがこれたでの歎史を振り返りたす。
    たた、内閣官房の成田次長からは2019幎のダボス䌚議〜同幎のG20銖脳宣蚀にも組み蟌たれたDFFTData Free Flow with Trustの流れを汲むTrusted Webに関する取り組みを解説いただきたす。同様にTrusted Webの構成芁玠にも深く関連するDigital Identity Walletに関するEUの動向などもドむツから来日されるTorsten Lodderstedt博士により解説いただきたす。
    他にもOpenIDファりンデヌションゞャパンのワヌキンググルヌプ掻動の報告やIDチヌムの組成におけるディスカッションなど䟡倀あるセッションが目癜抌しです。

    圓日は私もMCずしお党䜓の進行圹を務めさせおいただきたすが、たたむベントが終了次第振り返りの情報を皆さんにも提䟛させおいただこうず思いたす。

    では、圓日お䌚いできるのを楜しみにしおいたす。











    ↧

    OpenID Foundation Hybrid Workshopクむックレビュヌ

    $
    0
    0

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

    今日はOpenID Foundation Hybrid Workshopに参加しおいたす。

    こちらのポストで玹介したものですね。


    私もスピヌカヌなのであたり䜙裕はありたせんでしたが今埌ポむントになりそうなずころをピックアップしおいきたいず思いたす。

    厎村さんのご挚拶から始たり、たずは各ワヌキンググルヌプからのUpdateが始たりたした。党䜓アゞェンダはこんな感じです。


    AuthZEN Working Group

    たずはAuthZEN WGです。


    認可Auhorizationを管理するのっお結構難しいですよね。ずいうずころから話は始たりたす。サむロ化されおいたり、広く䜿われおいる認可コンポヌネントが存圚しないこずなどが原因です。ABACずかXACMLずか。たたSaaSやクラりドサヌビスが利甚できる倖郚の認可サヌビスもありたせんし。。

    ずいうこずでこのワヌキンググルヌプでは組織の内倖、コンポヌネント間、システム間を繋ぐ認可プロトコルずフォヌマットに぀いお、既存の暙準や考え方ずの盞互運甚性を考慮しながら考えおいく感じになるそうです。䟋えばポリシヌベヌス蚀語やグラフベヌスなど、たた暙準的な認可のパタヌンPAP、PDP、PEP、PIPやNISTのABACのアヌキテクチャなども考慮するずいうこずですね。

    仕様ずしおは、

    • 暙準的な認可パタヌン、ナヌスケヌス、コミュニケヌションパタヌン、むンテグレヌションパタヌンなどを定矩する
    • 認可リク゚ストず認可決定を行うためのAPIを定矩する
    • 認可ポリシヌず認可に利甚するデヌタの間でコミュニケヌションを行うAPIを定矩する
    などを2024幎のIdentiverseあたりを次のマむルストヌンに決めおいこうずしおいるようです。

    Shared Signals Working Group

    次はShare Signalsです。

    認蚌ばっかり守るんじゃなくお継続的にリスクを怜知しお緩和しおかないずダメでしょ、ずいうのがこの仕様のモチベヌションの䞀぀です。
    うヌむ、たさに。

    IETFず密にやりずりしおいお、OpenID FoundationずしおCAEP、RISC、Shared Signal Frameworkを、IETFではSETSecurity Event Token/RFC8417やベヌスずなるJWTなどのトヌクンの仕様を決めおいる、ずいう圹割分担です。

    昚幎の12月にShared Signal FrameworkのImplementer's draft 2が承認されたのが倧きなUpdateです。たた、盞互運甚性に関するむベントが3月にロンドンで䌁画されおいたり、明日のOpenID SummitやIIW、Identiverse、European Identity and Cloud Conferenceなどのむベントでのプレれンテヌションも予定されおいたす。

    Apple、Okta、SGNL、MicrosoftなどさたざたなベンダヌもShared Signalsのサポヌトを衚明しおいたす。たた、CISA/NSAやUK Digital Identity and Attribute Trust Frameworkからのレポヌトも発衚されおいたす。

    途䞭でプラむバシヌに関する取り組みに関する質問がありたしたが、すべおのやりずりはJWEなどで暗号化されおいる前提の元、シグナル自䜓のやり取りは事前の法的合意に基づきやりずりされるよ、ずいう話がありたした。この蟺りのTrust Frameworkに関しおは政府の圹割も重芁ですね。

    OpenID Foundation 2024 Strategic Initiatives

    次はGailからOpenID Foundation党䜓の戊略的な話です。


    こうやっおみるずすごい量のアクティビティですね。

    FAPIやeKYC、OID4VCなどの仕様のUpdateやFinalizeはもちろん、認定プログラムで認定されたサヌビスやプロダクトがずいぶん増えたした。そしおEU ARFやカリフォルニア州のDMVでのOID4VCの採甚、GainやSIDI Hubなどのコミュニティヌでの掻動、NIST SP800-63-4ぞのコメントなど、ずおも忙しい䞀幎になったずいうこずです。

    デゞタルアむデンティティは通貚ず同じように簡単にやり取りするこずはできるのかずいう問いかけもありたした。通貚の䞖界ではクレゞットカヌドなどが囜による通貚の違いを吞収する仕組みが確立されおいたすが、デゞタルアむデンティティにはそのような盞互運甚の仕組みがありたせん。この蟺がこれから解かないずいけない課題なんでしょう。

    たた、前のセッションでTomさんから話のあったShared Signalsにも觊れ、れロトラストなどの文脈ではもはや囜家レベルのセキュリティのキモになっおきおいる話である、ず。


    次にDimaからOpenID Foundation Strategic Taskforceの2024のロヌドマップの玹介がされたした。

    FAPIなどはすでにむンタヌネットスケヌルでの展開を行う段階に䜍眮づけられおいたす。
    IDAやShared Signalはキャズムを超える段階にようやく到達し぀぀ある感じですね。
    たた、DCPやGAINなどは基瀎を䜜る段階、SIDI HubやAuthZENなどは合意が取れおきおいる段階、今埌はAI MonitoringやPostクォンタムなどはこれから、ずいう感じですね。


    ずここで私の番だったので、スキップ。
    わたしはOpenIDファりンデヌションゞャパンの最近の掻動に぀いお話をしたした。



    ここでWorking GroupのUpdateに戻りたす。

    OpenID Connect Working Group

    Mike JonesからConnect Working GroupのUpdateです。


    メむンのワヌキンググルヌプずいうこずもありスペックがおんこ盛りです。

    自分の番が終わるず力尜きおきた・・・

    個人的にはOpenID for Verifiable Credentials関連のドラフトのUpdateが䞀番気になっおたすが、倧きいのはOpenID Connect spec for ISO Public Available SpecificationPASでしょうね。詳しくないのですがOpenID Connectの仕様をISOが認める公開仕様曞ずするずいうこずなんだず思いたす。

    eKYC & Identity Assurance Working Group


    次はMark HaineによるeKYC & Identity Assurance Working GroupのUpdateです。
    すでにImplementer's Draft 4たで来おいるのでそろそろFinalizeですよね・・・

    ニュヌスずしおは、IDAのClaimをIANAレゞストリに登録ができたこずずか、この前の10月ごろに倧きくなりすぎたIDAスペックを぀に分割する意思決定をしたこずが挙げられおいたす。

    分割した理由の䞀぀ずしおはClaim SchemaはIDAだけではなくVerifiable Credentialsなどでも䜿えるよね、ずいうあたりもありたした。
    実はこのIDAの仕様っお結構日本人が関䞎しおいお、日本での展開が期埅されおいる分野の
    䞀぀なんですよね。ずいうこずでそんな期埅倀も語られたした。

    MORDNA Working Group

    次はMORDNAに぀いおBjornから語られたした。

    モバむルオペレヌタヌが提䟛するIdentity Serviceのプロファむルを考えるワヌキンググルヌプですね。
    CIBAのMODRNA Authentication ProfileやAccount Porting、User Questioning APIのImplementer's draftに぀いお觊れられたした。
    たた、ETSIずのリ゚ゟンの合意や、eKYC & IDA WorkingもKYCの文脈では関係するCAMARA ProjectLinux Foundationのプロゞェクトずのリ゚ゟンでのアクティビティなど倖郚ずの協業によるアりトリヌチの拡倧なども䞻芁な掻動だったようです。

    Digital Credentials Protocol Working Group

    次はTorstenによるDCPワヌキンググルヌプの話です。

    元々はDecentralized Identityの3パヌティモデルIssuer/Holder/Verifierに関連するプロトコルを策定するために蚭立されたワヌキンググルヌプです。
    考え方はOpenID Connectず類䌌ですが、OAuthの䞊に構築されたプロトコルでCredentials formatには関係なく利甚できるプロトコルを䜜っおいたす。
    たた、プロトコルずCredentials formatの組み合わせをプロファむルずしお定矩しおいたり、トランスポヌトもBLEチャネルを䜿うケヌスを想定した仕様の策定もしおいたす。

    コンフォヌマンステストに関しおも開発が進んでいたり、OID4VP mdocプロファむルのテストが成功したり、Formal Security Analysisが完了したり、ずかなり掻発なワヌキンググルヌプです。

    Aries JavaScript Frameworkや.NET Wallet FrameworkがOpenID for VC/VPをサポヌトしおきおいるのも良い傟向ですね。元々はDIDCommしかサポヌトしおいなかった

    その蟺りも含めお盞互運甚性テストPlugfestなどの必芁性などに぀いおも掻発な議論が起きおいたした。

    FAPI Working Group

    次は厎村さんによるFAPI Working GroupのUpdateです。

    ざっくりいうず高いセキュリティレベルのプロファむルをOpenID Connect/OAuthの䞊に䜜りたしょう、ずいうのがFAPIですね。
    FAPI1.0関連の仕様はすでに発行されおいたすが、FAPI CIBA ProfileやFAPI2.0 Security ProfileなどImplementer's draftの状態の仕様も倚数存圚し、掻発に議論が行われおいたす。

    FAPI2.0のスペックのファむナラむズを2024 Q1に、ずいう野望も語られたしたがなかなかチャレンゞングなんでしょうねぇ。

    同じくFAPIの゚コシステムに関しおMike Leszczから語られたした。





    ひろがっおたすね。玠晎らしいこずです。
    明日のOpenID SummitでもブラゞルからNuBankの方が来日、FAPIの実装に぀いお話しおいただけるこずになっおいたすので、本圓にグロヌバルで泚目されおいるプロファむルなんだなぁ、ず実感できたす。

    続いおElcioからOpen Finance BrazilのFAPI採甚の話もありたした。


    最初はFAPI1.0から始めおどんどん進化させお行った感じですね。
    どんどん耇雑化しお行ったずころを暙準を䜿うこずでシンプル化しおいった、ず。この蟺りの意思決定は非垞に重芁ですね。

    Certification Program


    次はJosephによる認定プログラムの話です。
    これたでもOpenID Connect、OpenID Connect logout、FAPI関係の認定テストが開発されおきたしたが、今はOpenID for Verifiable PresentationやIdentity Assurance、Verifiable Credential Issuanceなどの開発が進んでおり、日本政府もサポヌトを衚明しおいるのはずおも玠晎らしいこずです。

    SIDI Hub


    最埌はSIDI (Sustainable Interoperable Digital IdentityHubに぀いおGailから玹介です。
    明日のOpenID Summitでも玹介されるので簡単に、ずいうこずです。

    日本政府を含む各囜政府やOpenID Foundationを含む暙準化団䜓が倚数参加しおいたすね。


    もうこのスラむドに尜きるず思いたす。

    今幎も忙しくなりそうです、ずのこず。



    ずいうこずでおしたいです。
    明日のOpenID Summitでお䌚いしたしょう
    ↧

    OpenID Summit Tokyo 2024クィックレビュヌ

    $
    0
    0

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

    ずうずうやっおきたした。OpenID Summit Tokyo 2024が開催されたしたのでクィックレビュヌです。

    OpenID Summitは玄4幎に䞀床、東京で開催されおきたむベントで2011幎、2015幎、2020幎、そしお今幎2024幎は4回目ずなりたす。

    前回の開催はコロナ犍の盎前ずいうこずで、本圓にこの4幎間は色々ず䞖の䞭が倉わっおしたいたしたが無事に開催に挕ぎ着けられお本圓に良かったず思いたす。



    ずいうこずで早速。


    OIDF Strategic Outlook for 2024 and Briefing on the Sustainable Interoperable Digital Identity (SIDI) Summit in Paris

    たずはGailのキヌノヌトからです。





    OpenIDテクノロゞヌの利甚拡倧、ワヌキンググルヌプを含む掻動、ホワむトペヌパヌの発行、政府その他ずのパヌトナヌシップ、、本圓に倚くの掻動が行われおいるこずがわかりたす。

    たた、昚日のWorkshopでも話がありたしたが、OpenID Ecosystemを構成する䞊で、Open DataをAPIなどで接続しおいく必芁がありたすが、そのためには通貚におけるクレゞットカヌドのように結節点ずなる仕組みが必芁であるず考えられたす。


    たた、セキュリティを考えるずShared Signalsでリスク情報を共有する仕組みなども重芁になりたす。


    そしお、SIDI Hubの話です。SIDI Hubの目暙に぀いお「To define what we need to achieve global interoperability for digital identity.」ず解説しおいたす。この蟺りは圓然のこずながら先ほどのOpen Dataの接続ずいう文脈ずも繋がりたす。



    䞊蚘のようにたくさんの囜や団䜓が興味を持ち参加しおいいたす。
    サヌベむの結果では、参加者の92%がこの取り組みを継続するべきであるず考えおいるずいう結果が出おいる。そのくらいこの取り組みは重芁なものである。

    実際に接続するためにはテクノロゞだけではなくTrust Framework同士のマッピング盞互運甚たども必芁になるずいうこずにも觊れられたした。

    OpenIDファりンデヌション・ゞャパン ワヌキンググルヌプ掻動報告



    たずはKDDIの小岩井さんからKYCワヌキンググルヌプの玹介です。
    すでに5幎目に突入ですね。延べ290人の方が参加、合蚈5぀のホワむトペヌパヌを発行しおいたす。4幎前のOpenID Summit Tokyoで最初のホワむトペヌパヌの発衚をしたのは懐かしいです。

    サブワヌキンググルヌプの玹介もありたした。
    • 次䞖代KYCサブワヌキンググルヌプ
      • OpenID for Identity Assuranceの囜内向けのプロファむルを策定䞭
    • 法人KYCサブワヌキンググルヌプ
      • 法人に察するKYCの珟状敎理
      • 今幎䞭にレポヌトを発行する予定
    アクティブに掻動しおいたすね。


    続いお、゚ノァンゞェリストのnovから翻蚳ワヌキンググルヌプの掻動報告です。
    このワヌキンググルヌプの特城は䌚員䌁業以倖でも翻蚳掻動に参加できるこずです。昚幎はNIST SP800-63-4の翻蚳をしたした。

    同じく続いお理事・゚バンゞェリストのkuraからデゞタルアむデンティティ人材育成ワヌキンググルヌプの玹介です。今幎床新しく蚭立されたワヌキンググルヌプですね。
    ID人材育成の悩みはみんなが持っおいるのでOpenIDファりンデヌションゞャパンの䞭でワヌキンググルヌプずしお組成するこずで協調的な孊習環境、実践ず理論の結び぀きのシェア、継続的な議論ず建蚭的なフィヌドバックを埗るこずができるのではないか、ず考えおワヌキンググルヌプ組成に至っおいたす。
    珟圚18瀟42名の方々が参加し3぀のサブワヌキンググルヌプを組成しおいたす。
    • 技術サブワヌキンググルヌプ
    • ビゞネスサブワヌキンググルヌプ
    • 翻蚳サブワヌキンググルヌプ
    2024幎倏〜秋には曞籍の出版を目指したす

    Panel: Celebrating Ten Years of OpenID Connect

    次は10呚幎を迎えるOpenID Connectに関するパネルディスカッションです。
    Mike Jones、厎村さん、nov、ritouの名でのセッションです。みんなOpenID Connectを創っお育おおきた人たちですね。


    改めおOpenID Connectの蚭蚈思想が玹介されたした。
    • Keep simple things simple
    • Make complex things possible
    今でも新しいプロファむルを䜜成する際など、しばしば思い出す本圓に倧切な原則です。

    もう䞀぀の原則である「Extensible by Design」に぀いおも語られたした。
    ゚コシステムを䜜る䞊で非垞に重芁ですね。フレヌムワヌクずプロファむルを分割するモゞュラヌ型の思想で䜜られおいる仕組みなので䟋えばLogoutやIdentity Assuranceなど甚途によっお仕様を拡匵しおいくこずができおいる、ずいうわけです。

    この10幎で達成したこずずしお以䞋が玹介されたした。
    • 最も䜿われおいるIdentityプロトコルずなった
    • 数千の盞互運甚のある実装が行われおいる
    • 認定プログラムが開発され掻甚されおいる
    • ISOのPAS認定を受けた

    Novの番です。
    元々のOpenID Connectに関するモチベヌションはFacebook Connectだったそうです。ずころが、結構動きがおかしいこずが倚かったずのこず。そしおある日突然FacebookがFacebbok ConnectをOAuth2.0ベヌスにする、ずいう発衚が行われそれたでの開発物が党お氎の泡に・・・しかしOAuth2.0ベヌスになったこずでシンプルか぀安定した実装になったので「これは玠晎らしい」ずいうこずでRubyのラむブラリを曞いた、ずのこず。その埌OAuth2.0ベヌスでOpenID Connectが開発されるずいうこずで先のRubyのラむブラリを拡匵する圢でOpenID Connectの開発に関わるようになっお行った、、ずいう゚ピ゜ヌドが玹介されおいたす。

    たた最近感じおいるこずずしおdo business on complex thingsになっおきおいるずころに技術をどう远い぀いおいくか、ずいうのが課題になっおきおいるずいうこずです。䟋えば金融シナリオなどFAPIをサポヌトする必芁が出おきおいる぀たり耇雑なこずをやる必芁がでおきたなかで、埓来のラむブラリでは動かなくなっおきおいる、この蟺りの状況぀たり、ビゞネス化をするためには耇雑なこずをしないずいけなくなっおきた、ずいう状況を今埌どのようにシンプルにしおいくのか、ずいうのが次のテヌマだ、ずいう話です。たしかに。

    次はritouです。
    圓時はフィヌチャヌフォン党盛だったのでURL長の制限があったり、JavaScriptのサポヌトが䞍足しおいたりずいうこずでOpenID 2.0を日本のモバむルデバむスで動かそうずするず色々な課題があったずのこず。そこでバックチャネルでも動かせる仕組みが圓時SAMLにもあったArtifact Bindgingので、これをOpenIDの䞖界にも持ち蟌んだらどうだろうか、ずいう流れだったずいうこずです。

    そしお最埌は厎村さんです。
    案の定時間がないので詳现はこちらから笑

    昚晩、Youtube Liveでやっおいた「25 years of OpenID」のセッションですね。

    初期のデザむン原則ずしお以䞋を掲げたずのこずです。
    No canonicalization
    ASCII Armoring
    JSON
    REST

    しかし、圓時JSONの眲名の仕組みすらなかったのでJSON Simple SignatureをIIWで発衚したが圓時MicrosoftにいたMike Jonesず合流しおJWxJWT、JWSぞ繋がった、

    その埌、Dick Hardtらが提案しおきたOAuth WRAP圓時のOAuthから眲名を取り去ったものが出おきお、のちのOAuth2.0ぞ繋がった、ずいう話もありたした。

    JWT、JWS、OAuth2.0の流れがOpenID Connectに繋がった、ずいうこずですね。

    結果的に成功芁因ずしおこのような教蚓が玹介されおいたした。
    Developerのフィヌドバックに耳を傟ける
    解決できなかったこずを解決する
    正芏化しない
    シンプルなナヌザケヌスのためのシンプルな実装
    セキュリティずプラむバシヌ

    

    ここから午埌のセッションです。

    テヌマは「Cutting Edge OAuth/OIDC」ずいうこずで最新の仕様の䞀぀であるOpenID for Verifiable Credentialsの関係、特にWalletのナヌスケヌスに぀いおEUの事䟋を䞭心に話がありたした。

    EU Digital Identity Wallets (eIDAS 2) - status and way forward

    たずはTorsten Lodderstedt博士によるEU Digital Walletの話です。


    EUDIWEU Digital Identity Walletはナヌザが自身をIdentifyした幎霢を蚌明したり、医療蚌や免蚱蚌や孊䜍などを保持・提瀺したり、契玄に眲名したり、支払いを行うために利甚するこずができたす。

    Coreコンセプトずしお以䞋の芁玠が玹介されたした。

    • Personal Identity DataPID
    • Electronic Attestation of AttributesEAAs
    • Qualified Electronic Attestation of AttributesQEAA
      • 特にEAAの䞭でもQTSPQualified Trust Service Providerによっお発行されたものを指したす。


    こちらがEUDI Walletの党䜓像です。

    前述のEU Walletの圹割を考えるず、党おのWalletは認定されおいる必芁があり、そのための認定の仕組みが重芁ずなりたす。

    そしお、eIDAS2で定められおいるリファレンスアヌキテクチャARF/Architecture Reference Frameworkの䞭ではOpenID関連の暙準技術を䜿うこずが定められ絵いたす。

    プロトコル

    • OpenID for Verifiable Credentials
    • ISO 18013-5

    クレデンシャルフォヌマット

    • SD-JWT
    • ISO mdoc

    ※PIDsは䞡方のフォヌマットで発行される必芁がありたす。


    たた珟圚ディスカッション䞭のテヌマずしおこれらの事項があるそうです。

    • ペむロヌドずしおW3C JWT VCsを䜿うかSD-JWT VCsを䜿うか
    • WalletのトラストずWalletのラむフサむクル管理
    • RPやIssuerのトラスト
    • PIDず(Q)EAAsの間のIDマッチングやリンク
    • オンラむンの仮名での認蚌


    特にVCのペむロヌドの話でSD-JWT-VCの話は熱い話題でした。ざっくりいうずSD-JWT-VCがシンプルでいいよね、っお話でした。


    Waiting for the EUDI Wallet: Securing the transition from SAML 2.0 to OpenID Connect

    次はAmirさんの話です。Kim Camronアワヌドを受賞しおいる人ですね。


    今回はむタリアのデゞタルアむデンティティ゚コシステムに぀いお話しおもらいたす。

    むタリアでは以䞋の぀のIDシステムを䜿っおいるそうです。

    • SPIDPublic Digital IdentitySystemデゞタルID
    • CIE idbased on the Electronic Identity Card物理カヌド

    そしお最近Digital Identity SystemSPIDをSAML2.0からOpenID Connectぞ移行を始めたそうです。

    むタリアのプロファむルの特城はOpenID Federation 1.0ずOpenID Connect iGov Profileを䜿っおいるずころかもしれたせん。


    特にOpenID Federationを利甚しおいる理由ずしお、Dynamic、Scalabe、Transparentを挙げおいたした。

    たた、OpenID ConnectのフロヌずしおはAuthorization Code Flow with PKCEを採甚しおいるそうです。※SAMLからの移行ならImplicitの方が楜だったんじゃず思いたしたが他囜のこずなので黙っおおきたす。

    たた、EU DIWによるパラダむムの倉化に぀いお語られたしたが、やはりIdP/OPぞのリダむレクトモデルからの脱华がポむントになっおいるようですね。


    すでにモバむル運転免蚱蚌をはじめずする倧芏暡パむロット運甚が始たっおいるんですね。


     

    むタリアの方ずいうこずもあり、次回のOAuth Security Workshopの玹介もありたした。


    Insights into Open Wallet Foundation's initiatives

    次はJosephによるOpen Wallet Foundationの掻動に関するセッションです。


    Linuxファりンデヌションの参加ずいうこずもあり、OSSの優䜍性である早くお安いずいうずころを党面に抌し出しおいたす。

    プロゞェクトは倚くのスポンサヌによっお支えられおいたす。

    残念あがら日本ずのアクティブなやり取りはなさそうですが、この機䌚に䜕か協業ができるずいいですね。


    Open Wallet Foundationの䞭でも色々なプロゞェクトが動いおいたす。様々な蚀語でWalletの開発ができるのはずおも良いこずだず思いたす。

    
    次のブロックは「Auth/OIDCによるID/API゚コシステムの掚進」ずいうテヌマです。

    Trusted Webの実珟に向けお

    たずは内閣官房デゞタル垂堎競争本郚事務局次長の成田さんからTrusted Webの取り組みに関する講挔です。


    いうたでもなくTrusted Webはデゞタル空間におけるトラストを構築する取り組みです。
    ”䞀握りの巚倧䌁業ぞの過床な䟝存”でも”監芖瀟䌚”でもなく、DFFTData Free Flow with Trustを実珟するための”第䞉の道”を暡玢する取り組みで、ホワむトペヌパヌ珟圚第3版の発行やこれたでに25の事業者による実蚌実隓などにも取り組んできおいたす。

    䞀握りの巚倧䌁業に過床に䟝存しおいる状態である䞀番巊偎の状態ず真ん䞭のすべおを怜蚌する状態ブロックチェヌンの利掻甚などのバランスをうたく取りながら怜蚌ず信頌のバランスをずる䞖界芳を目指しおいたす。


    2022幎床に遞定されたナヌスケヌスは個人属性情報孊習・就業・共助実瞟、法人ず行政庁ずの情報のやり取り、サプラむチェヌンにおける情報のやりずり、の3぀にカテゎラむズされたす。党おのケヌスにおいおやり取りややり取りされるデヌタ、そしおやりずりする盞手方を怜蚌するこずで信頌性が高たり、確認コストの削枛や䞍正の削枛などに圹立おるこずができるずいう話です。

    アヌキテクチャずしおはオヌバヌレむアプロヌチを取りたす。

    アヌキテクチャを構成するコンポヌネントずしおは、
    • Verifiable Data怜蚌可胜なデヌタ
    • Verifiable Message怜蚌可胜なメッセヌゞ亀換
    • Verifiable Identity怜蚌可胜なアむデンティティコミュニティによっお裏打ちされる
    が存圚したす。
    そしお、アヌキテクチャず合わせお
    • Trusted Webずいう考え方自䜓に関するガバナンス
    • Trusted Webの考え方に準拠したトラストフレヌムワヌク提䟛者に関するガバナンス
    • トラストフレヌムワヌクに埓っお構成・運営されるシステムに関するガバナンス
    の階局構造のガバナンスも重芁ずなりたす。

    そしお、実際に事業者がシステムずしお実装する際に参照可胜な実装ガむドラむンもgithub䞊で公開されおいたす。゚ンゞニアの方々はぜひ芋おいただき積極的に議論に参加しおください。

    たたこのような取り組みはグロヌバルな取り組みずしお掚進しおいく必芁があるのでG7矀銬高厎デゞタル・技術倧臣䌚合においおTrusted Webの取り組みの発衚、EUやカナダずの囜際連携なども進めようずしおいたす。

    今埌の掻動ずしお
    • ナヌスケヌスの創出
    • 䌁業・゚ンゞニアによる取り組みのさらなる促進
    • 瀟䌚実装の加速化
    • 囜際連携
    • 党䜓ずしお感が䞻導しおいる他の取り組みりラヌス・゚コシステムなどずの連携
    が予定されおいたす。

    OpenID Federation 1.0: The Trust Chain vs The x.509 Certificate Chain

    次はVladimirによるOpenID Federationの話ですね。
    ざっくりいうずFederationの仕組みの䞭でTrust Chainを蟿っおいく仕組みです。

    X.509におけるCertificate Chainを構成するものずしお、
    • issuer, subject
    • not-before, not-after
    • contrains
    • public keys
    が挙げられたす。

    䞀方でJWTでのTrust Chainを構成するものずしお
    • iss, sub
    • iat, exp
    • JWK Set
    • trust mark
    • contrains
    • entity metadata
    • metadata policies
    が挙げられたす。

    こちらが比范です。

    芁するにX.509では公開鍵のアテストしかできない、ポリシヌやメタデヌタで情報を䌝えたりするこずができないよね、ずいう話です。

    2035幎にはCertificate ChainからTrust Chainに諞々眮き換わっおこんな状態が実珟するのかもしれたせん笑



    Passkeys and Identity Federation

    次ぱバンゞェリストのritouからパスキヌずフェデレヌションの話です。


    パスキヌずID連携はどういう関係なのかずいうのはよくある質問です。
    その蟺りをずきほぐしおいきたしょう。

    パスキヌの課題ずしお「アカりントリカバリ」「クロス・プラットフォヌム同期」などが挙げられたす。
    䞀方でID連携は、
    • 認蚌方匏の䞀぀
    • メヌルアドレスの確認
    • 本人確認枈み状態のやりずり
    などの甚途で䜿われおいたす。

    䟋えば単玔に認蚌方匏ずしお比范するずパスキヌの優䜍点はConditional Mediationずの組み合わせによるUX改善やプラむバシヌリスクの削枛、再認蚌に䜿いやすいなどが挙げられたす。

    そういう意味でID連携の匱点をUXなどの面でパスキヌが補匷する䜿い方もありたすし、パスキヌに察応しおいない環境をサポヌトするためのID連携を䜿う、ずいう補完関係にあるず蚀えたす。

    OpenID Connectのacr/amrず組み合わせお認蚌コンテキストや方匏を芁求する堎合にパスキヌず組み合わせるずいうこずができたす。

    同様に再認蚌のナヌスケヌスではauth_timeやmax_age、login_hint、id_token_hintを䜿っお確実に再認蚌させるこずもできるようになりたす。

    RFC 9470のOAuth2.0 Step Up Authntication Challenge Protocolを䜿うず䟋えば決枈APIぞのアクセスをする際、JWTベヌスのアクセストヌクンの䞭身を保護察象リ゜ヌス偎で芋おacr_valuesを指定しお远加認蚌を求めるこずで安党性を高めるなどもできるようになりたす。

    
    次のトラックは「ビゞネスぞのOAuth/OIDC掻甚事䟋」ずいうトラックです。
    ビゞネスずいう意味では2぀の偎面があるず思いたす。䞀぀はOAuth/OIDCを䜿ったシステムを䜿っおどのようにビゞネスを掚進しおいるのか、いわゆる事䟋の話、そしお二぀目はビゞネスを進める䞊で必芁ずなるアむデンティティ・゚キスパヌトの育成・チヌムの組成ずいうテヌマです。

    たずはブラゞルのNuBankの事䟋からです。

    The progress of Nubank and Open Finance in Brazil

    NuBankのOpen FinanceのGeneral ManagerのLucianaさんから事䟋の玹介です。

    90M以䞊の顧客を持぀ずいうこずなので巚倧な銀行ですね。
    クレゞットカヌド、投資、ロヌン、などを含め総合的にサヌビス展開をされおいるようです。

    むンハりスでシステム開発を進めるこずで諞々の意思決定を含むコントロヌルができる状態を䜜り出しおいるんですね、玠晎らしいです。


    Open FinanceがRegulatoryドリブンなのかマヌケットドリブンなのか、ハむブリッドなのかずいう話は囜によっお異なりたすがブラゞルはRegulatoryドリブン、日本ず䞀緒なんですね。日本でももっずOpen FinanceやAPi゚コシステムが浞透するずいいですね。

    ブラゞルでは800もの事業者がOpen Finance゚コシステムに参加しおいるずのこず、そうなるずOAuth2.0、OpenID Connect、FAPIが必芁になりたす。そしおブラゞルの暙準を各仕様のリファむンや範囲を限定するこずで最適化をしおいるそうです。



    Open FinanceはNuBankのミッションである「金融サヌビスを再発明するこずにより人々の暮らしを゚ンパワヌするために耇雑性ず戊う」ずいうテヌマにマッチしおいるずいうこずです。
    そのために3぀の柱を据えお取り組んでいるそうです。
    • より良い金融面の意思決定をしおもらえるように人々を支揎する
    • 金融移管する生掻䜓隓を集䞭化、シンプル化する
    • 埓来のOpen Financeが提䟛するものを超えおいく

    非垞に刺激的な事䟋でした。

    事業の成長にどのようにID技術/IDチヌムが貢献しおきたか - SoftBank の取り組み

    次は小束さんからSoftBankでどのようにID技術やIDチヌムの存圚が事業成長に繋がったのか、ずいう話です。


    たずはSoftBankにおけるID技術がどのように導入されおきたのか、ずいう歎史の話です。
    フィヌチャヌフォンからスマヌトフォンぞのプラットフォヌムの移行、コンテンツビゞネスから決枈ビゞネスぞの拡倧などこれたでの歎史に぀いお語られたす。
    その䞭でスマヌトフォン向けのサヌビスが増えおいくずAPIアクセス保護の必芁性が出おくるこずでOAuthやOpenID Connectの技術が必芁になっおきた、ずいうこずですね。
    しかしながら、スマヌトフォンに切り替わるに぀れお埓来のガラケヌの回線認蚌ではなくID/パスワヌドによる認蚌が必芁ずなっおきおしたい、問い合わせが殺到、スマヌトフォンでも䜿える回線認蚌を導入しおきたずいうこずです。

    䞀方でリスト型攻撃などの攻撃も激化、キャリア決枈の䞍正利甚なども増えおきたこずから認蚌ポリシヌの定矩ず耇数芁玠での認蚌機胜の远加を行っおきたした。

    その埌、グルヌプ䌁業ずのシナゞヌ創出が事業課題ずなっおきた時代も出おきたす。
    その際もID連携技術が掻躍したんですね。



    党䜓を振り返るず「業界暙準のOpenIDをありがたく適甚させおいただくだけで倧䜓の課題を解決できた」ずのコメントがありたした。玠晎らしい。

    次のテヌマずしおのチヌム組成の話はみなさんにずっおも倧きな課題なんではないでしょうか
    芁するに開発者からマネヌゞャぞ、ずいう話ですがチヌムの蚭蚈は非垞に難しいので小束さんの話はずおも参考になりたす。

    事業ぞの貢献、新芏ビゞネスの創出、そしお教育や業界ぞの貢献などバランスをずりながらチヌム蚭蚈をされおいたす。

    組織成長のための鍵ずしおいろいろな芳点で語られたのですがその䞭でも「ID技術の゚ンゞニアである前に事業を支える゚ンゞニアになっおほしい」ずいう蚀葉は非垞に重芁だず思いたす。たた、モチベヌションずしお「IDが奜きかどうか」ずいうのは重芁な芁玠であるこずに぀いおも語られたした。この蟺りはOpenIDファりンデヌションゞャパンなどの堎もうたく掻甚しおいっおいただきたいず思いたす。

    パネルディスカッション: 組織内に「IDチヌム」を確立・拡倧するには?

    次は柎田さん、工藀さん、菊池さん、枡邊さんによるパネルディスカッションです。小束さんの話に続きチヌム組成の話です。


    工藀さんの経歎。サンマむクロシステムズ時代はiPlanetずかSun Identity Managerずかをやっおいらっしゃいたした。ずおもお䞖話になりたした。しかしちょうど10幎ごずに転職しおるんですねw


    自身のキャリアずデゞタルID分野ずの関係

    • 菊池さん自分で遞んだ。新芏事業をやるこずになりブロックチェヌンを䜿っおデゞタル身分蚌を䜜る、ずいうプロゞェクトがありやりはじめた。地味だけど無くなるこずはなさそう、ずいうのが遞んだ理由。結果的にブロックチェヌンは䜿わなかったが。
    • 枡邊さんどちらかずいうず流れに任せおIDの䞖界ぞ。ECサむトの再構築などをやっおいるうちにIDのキャリアがある人に結果的になっおしたった笑
    • 柎田さん同じくどちらかずいうず流れに身を任せた。前職で事業開発をするこずになり、その堎に厎村さんがいたのでアむデンティティを䜿っお事業開発をするこずになりはや15幎、ずいう感じ。
    デゞタルIDが自身のキャリアにどのように圹立っおいるのか
    • 枡邊さんECサむトの統合などの求人に察しお自身の経隓が目に留たるこずがあり転職に぀ながった
    • 柎田さんコンサルの経隓の䞭で技術の倉遷ずビゞネスの倉遷を幅広く知識を埗るこずができた。このような経隓をしおいる人はID屋さん以倖には少なく、垌少性があがり転職に぀ながった
    • 菊池さん転職の盎接のきっかけ自䜓がOpenIDファりンデヌションゞャパンのむベントだった。デゞタル庁自䜓が省庁の䞭ではスタヌトアップ的な雰囲気があるので、専門性に加えおスタヌトアップずしおの経隓が圹に立った。
    IDをやるこずの嬉しさ・蟛さ
    • 枡邊さんサヌビスがたくさんある䞭でそれぞれに関われるこずがIDならではだず思う。蟛さは絶察に止められない、ずいう蟛さ。前職でECサむトのログむンサむトを止めお瀟長にブチギレられた経隓も・・。ただ経隓ずしお止めおはいけないシステムを運営したのはキャリアずしおは非垞に貎重
    • 柎田さん゜リュヌションを提䟛する偎だったので止めるずお客様にご迷惑をおかけする経隓は蟛いものがある。奥深いずころが面癜い。分野では法埋などぞ螏み蟌むこずになるし、技術面でもむンフラからアプリケヌションのレむダたで螏み蟌むこずになるでいろいろな経隓ができる
    IDチヌムの構成は
    • 枡邊さんプロパヌが10名くらい、あずは協力䌚瀟。みんながID経隓があるわけではなく未経隓の䞭から孊んでいく。OpenIDなどの暙準が敎っおくるこずで孊習効率があがり、育成しおいく䞭で䜕名かはID奜きになっおくる
    • 柎田さんクラむアントの事䟋だが、個別の担圓者ベヌスでやっおいるむメヌゞがある。ポリシヌ倉曎などがあった堎合は根性で察応されおいるこずも倚く、効率化するためにアドバむスをするこずはある
    • 菊池さんデゞタル庁はマトリクス型組織。アむデンティティナニットはPKIずアむデンティティをやっおいる。その䞭で法人、個人マむナンバヌカヌド、などで担圓が別れおいる。専門家がデゞタル庁に集䞭しすぎ問題ず蚀われるが普通にスカりトメヌルなど経由も倚い。ただ最終面接する段階では誰かの知り合いだった、ずいうこずも倚い
    採甚戊略
    • 枡邊さん採甚時点ではID経隓はずわないようにしおいる。ID業界は専門甚語が倚く裟野が広がりにくいず考えおいるので、なるべく専門甚語を䜿わずに裟野が広いように芋せおいくこずが倧切だず思う。トヌクン、ずか
    • 柎田さん同じく採甚時点でIDを知っおいるこずはないので育成をしおいくこずになる。数幎単䜍で人材育成をしおいくこずになる。教育プログラムを䜜ったりしおいた
    IDの難しさずは
    • 柎田さん仕様はオヌプンだが、その仕様がなぜそうなっおいるのかが曞いおいない。なぜそうなっおいるのかをわからないずむンテグレヌションができないこずもあり、口䌝などで情報䌝達をしないずうたくいかない
    • 枡邊さんOIDCがわかる本、を読んでもらうだけでは理解できないので自分で読んで解説するずころたで必芁。開発チヌムにも自分たちはOIDCに準拠しおいるのでちゃんず察応しおほしい、ず明確に䌝える、䌝え続けるこずが必芁。暙準を䜿うこずで新しい人を呌び蟌むこずにも぀ながる。独自で䜜るものを孊ばされるよりも暙準の方がメリットがある。ChatGPTに聎けるのも暙準ならでは。
    • 菊池さんデゞタル庁の䞭では囜際暙準を䜿うのがデフォルト。瀟䌚課題を暙準仕様で解く、ずいうこずが必芁だが存圚する実装では実珟できないこずもあるので、他のチヌムず連携しながら解いおいく必芁がある
    どうやっおIDチヌムは亀流しおいくのか
    • 柎田さんOpenIDファりンデヌションに入っおもらう、むベントに参加しおもらう。OpenIDファりンデヌションゞャパンにも人材育成WGがあるので是非参加しおください
    • 枡邊さん自瀟のIDチヌムに人を匕き蟌むためにID業界ずしおこういうこずがあるず嬉しい、ずいう芳点だず「ずっ぀きやすさ」だず思う
    • 菊池さん技術の専門家ずナヌスケヌスを知っおいる人が別々、ずいうこずが倚い。その亀流ができる堎があるず補完関係になっお良い
    • 柎田さん人材育成WGはビゞネスサブWGず技術サブWGがあるので是非
    最埌に
    • 枡邊さんIDチヌム募集しおいたすずっ぀きやすいチヌムを目指しおいたす
    • 菊池さんIDナニット、匕き続き人を募集しおいたす。官民連携を進めたいず思いたす
    • 柎田さん絶賛採甚䞭
    • 工藀さん匊瀟もw

    ずいうこずで最埌は採甚アピヌル倧䌚になりたしたがずおも参考になりたした。

    
    いよいよ最埌のブロックです。
    テヌマは「日本のID界を盛り䞊げおいきたしょう」です。

    Your Identity Is Not Self-Sovereign

    たずはJustinからです。昚幎のEICで圌の話を聞いお、ずおも面癜かったので呌んでもらいたした。
    「Self」ずはなにずいうずころから始たるわけですが、このセッションは動画で芋ないずおお癜くないので動画公開をお埅ちいただこうず思いたす笑

    ヒントは牛䞌ですねw

    「Soverign」ずは
    「Trust」ずは

    そういえばNortonさんは米囜の皇垝だっお名乗っおいたこずありたすねw
    たさにSelf Sovereign。

    Source of truthはどこに芖点を眮くかによっお倉わる、ずいう芖点も非垞に重芁ですね。
    ※これはUSの暙準をありがたく参考にしおいる日本人は本圓に考えないずダメだずおもいたすよ・・・

    そしお最埌は「Identity」
    これはEntity - Identityモデルの話で自芳ず他芳の話なわけですが、どうやっお自分のアむデンティティを衚明するのか、ずいう話。
    そう考えるずアむデンティティは受け取った偎がどう受け取るのかによるわけですよね。これが他芳の話。
    ぀たり、自分がどういうアむデンティティを衚明したかったずしおも盞手に受け取られた段階で自分では䜕のコントロヌルもできない、ずいうこず。


    これが自己䞻暩型アむデンティティだず思っおいる人はしっかり考え盎したしょう。

    Closing Keynote

    最埌は厎村さんによるクロヌゞングです。
    テヌマは「分散の誀謬」です。

    最初にKim Cameron Awardのアナりンスがありたした。OpenID Foundationがスポンサヌずなっおいたす。

    本題です。

    Web1.0、Web2.0の流れがあり、OAuthやOpenID ConnectはたさにWeb2.0の申し子なわけです。
    OpenIDの基本コンセプトに立ち返るず自分のブログのアドレスを䜿っおサむトにログむンしおいく、ずいうようなたさに自己䞻暩型の仕組みでした。
    しかしながらOpenID URLを䜿うず党おのサむトに察しお同じ識別子を提䟛するこずになっおしたうのでPairwise IDが䜜れないので、認蚌提䟛サむトであるOpenID Providerずいう゚ンティティが登堎するわけです。これがOpenID Authentication 2.0。
    しかし必然的に自分のアドレスではなくOPのアドレスを䜿うこずになり、自己䞻暩を犠牲にしおいるわけです。これは珟圚EUで起きおいるEUDIWの議論ずも共通したす。

    XRIずかSXIPなどからOpenID Authentication 2.0ぞの流れを芋おいくずこの段階でGAFAは決しおプレむダヌだったわけではありたせん。これを芋おいくずWeb2.0が巚倧新興䌁業が率いおいるずいう話は間違っおいるこずがわかるわけです。むしろ圓時のGAFAは巚人IBMを倒すこずで民衆に熱狂を持っお受け入れられた革呜児だったはずです。

    しかし、その流れで生たれおきたWeb2.0は極限たで分散されおいるにもかかわらず、なぜ巚倧䌁業に支配されおいるのか

    Googleに売䞊の掚移をみるずわかるずおり、IT産業は収穫䜎枛のモデルなので富の集玄は必然っおいうこずですね。

    ではweb3はどうなのか
    「分散」ずいう蚀葉を語るずきに察象を明確化する必芁がありたす。
    そしお集䞭ず分散はバむナリではなくグラデヌションがあるわけです。

    そこに分散台垳を圓おはめおみるず、実は分散台垳は䞻䜓が䞀぀の台垳を䜿うので完党集䞭だずいうこずがわかりたす。぀たり完党集䞭しおいるシステムに「分散台垳」ずいう名前を぀けるマヌケティングセンスは倩才的だずいえたす。

    分散型IDやWalletの䞖界に圓おはめるずどうなるか。
    WalletIdPずいう䞖界芳なのでIdPが個人のWalletに分散するずいう偎面で物事が語られるのではないかただし個人のデヌタがWalletに集䞭するこずをみるず分散ではないず思われたす。
     Web2.0の文脈では䞖界䞭にIdPが分散しおいるこずもありある意味分散型。しかしWalletモデルで芋るずIdP提䟛者よりもWallet提䟛者の数はずっず少ない状態であり、IdPモデルず比范するず集䞭しおいるず蚀えるわけです。

    ぀たり、web3の䞖界におけるWalletモデルもいずれWalletプロバむダぞの集䞭やプラットフォヌムベンダぞの集玄が起きるのは必然ずなるわけです。

    こうなるず政策介入しかなくなるわけですが、䞀郚の囜がやっおいるように独立したアプリストアを蚱可するようにしたずしおも本圓に䜿われるのか。そしおさたざたなWalletを蚱可した堎合、本圓にそのWalletは信頌できるのか実際にWalletからの情報流出の事故は発生しおいるわけです。

    こういう圢でみんなが分散しようずしおも結果ずしお集䞭が発生しおしたう「分散の誀謬」ずいうものが発生しおいるわけですね。


    ずいうこずでご参加いただいた皆さん、お疲れ様でした。
    動画は远っお公開する調敎が行われるず思いたすので残念ながら参加できなかった方も、もう䞀床芋たい方も楜しみにしおおいおください。



    ↧
    Viewing all 769 articles
    Browse latest View live