みなさん、この話をご紹介します。この話は2つの部分です。最初、私は主要なセチュイティフューチュースについて話します。レイテストキークロックをサポートしています。また、未来のセチュイティフューチュースについて話します。2つの部分です。トーマスはキークロックのオープンポリュシーアジェントについて説明します。まず、私のパートを始めましょう。まず、私のトーマスを紹介します。私の名前は、スタカシノリマツです。キークロックメインテナーです。そして、私は日本のキークロックメインテナーで仕事をしています。私は主要なセチュイティフューチュースについて説明します。例えば、WCCウェバーセンのセチュイティション、APSをサポートしています。サポートのコンプラインは、RFC、スペシプテーションをサポートしています。そして、APS2をサポートしています。キークロックメインテナーです。キークロックメインテナーは、オープンソースソフトウェア、CNCFインキュヴェイティンプロジェクトをサポートしています。キークロックメインテナーのセーブルオープンスタンダードをサポートしています。オープンソフトウェア、CNCFインキュヴェイティション、APS2をサポートしています。私は、次のアイテムのトピックを説明します。キークロックメインテナーのセチュイティション、APS2.1、OID4VCIをサポートしています。まず、キークロックメインテナーのセチュイティションをサポートしています。パースキーは、私たちに自分のアースセントを受け、パースワードを使うことができます。パースワードを使うことは、クリプトグラフィックキーを使うことができます。パースキーの2種類があります。シンクトパースキーとデバイスバウンドパースキーです。パースキーの2種類があります。クロースデバイスバウンドパースキーとデバイスバウンドパースキーです。キークロックメインテナーのセチュイティションをサポートしています。しかし、テクノロシカルポイントの場合、パースキーのオーセンチケーションは、ラフリーと同じウェブアースンのオーセンチケーションです。キークロックメインテナーのセチュイティションをサポートしています。現在、パースキーオーセンチケーションは、パースキーオーセンチケーションをサポートしています。シンクトパースキーとデバイスバウンドパースキーをサポートしています。デバイスバウンドパースキーは、シンクトパースキーのデバイスをサポートしています。シンクトパースキーのデバイスは、ユーザーのアカウントを使用しています。例えば、GoogleアカウントとApple ID。そのため、パスティーを使用するために、自分の各種のデバイスを使用するために、クラウドサービスのシンクロナイズを使用するために、例えば、Google Password Managerとアップアイクラウドティーチェーンを使用するために、前に、2種類のアーセンティケーションがあります。同じデバイスアーセンティケーションそしてクラウドサービスアーセンティケーションです。あなたのPCを使って、自分のアーセンティケーションの解援するサーブを使って、スーパーな柄を使って cut out the rest。同じデバスアーセンティケーション、スーパーに Webいてなくっていうキーを使用するために、 このケースを使用するために、これは この字が生み残った basseki を使います敗機はフィーギュアスマートブラシに入りますフィーギュア あまり私たちはプ應しているここで下げる前に キングロープキートのオーティ�� suchaiを使う前後のプラスキーを再現する必要があります。次に、T-Clockのオプションはアーセンティケーション、パスワードレスアーセンティケーション、ログインレスアーセンティケーションについてパスワードレスアーセンティケーションについてアーセンティケーションについてT-Clockのインレスア名、メルアドレス、やもり、そして、パスワードレスアーセンティケーションについてログインレスアーセンティケーションについてパスワードレスアーセンティケーションについてT-Clockについてとっておりましょう。次に、トーマスが生まれたパスワードレスアーセンティケーションについてもう1番目で3番目はTOKESHIの設置。まず私の先端に移動する。この中にキックロークの奥に入ったキーカルを作りました。今スペシャルのパスワールドとして、そしてキーカルにアプリケーションを開けて、キリックロークにソフトレーションを開けることできます。このキーカルの奥に入ったキーカルを見て、コンソールを使って、キークロークに寄って、下に行くと、アパースキーをご覧ください。このコンソールは、ウェディーのフォローをクリックして、ブラウザーのネイティフにリアロックが出てくることができます。アパースキーをご覧ください。このコンソールは、ブルートゥーフを使って、2日前に、新しいメッセージを使います。ここで、このQRコードをクリックすることができます。ここで、ユービーキーを設定することができます。これを触れることができます。これができます。ユービーキーは、何かに名前があることができます。ここで、ウェディーのフォローをご覧ください。ここで、ユーザーネイティフにユーザーネイトの名前を再生します。パスワードをプロモードしてパスワードを再生します。そして パスキーをサインドしてと同じことをしています。そしてこれに、ユービーキーを再生します。そして サインドしています。でも、本当にパスワードは必要です。これをユーザーネイティフにユーザーネイティフのパスワードを下にあげることはないので、使用のためにクリプトキースを下ろすためにページにレジュースを込んでエプギアにひられたパソフォースを取り出すパソフォースは完全に回しないよまだなかったら、パスキーを途中指せ、こだわったらゴイッグを回してパソフォースを下に取り出す次の話はオースト2.1オートライゼーションフレームランクです。オースト2.1はオースト2.0オートライゼーションフレームランクです。オースト2.1はオースト2.0オートライゼーションフレームランクです。オースト2.1はオースト2.0オートライゼーションフレームランクです。オースト2.1はオースト2.0オートライゼーションフレームランクです。今日はオースト2.0オートライゼーションフレームランクです。オースト2.1はオースト2.0オートライゼーションフレームランクです。 Then an attacker steals your access token and tries to share its API with the access token.This access will succeed because the OS2.0 server defines an access token as VEARLA token. The VEARLA token allows everybody holding an access token,このアクセストークを使うことができます。それから、いわゆるアタックを使って、他のコランドアプリケーションのアクセストークを使うことができます。このアクセストークの使用を受け、2.1のオース2.0、アラーサーを使うことができます。センダーコンストレンドトークを使うことができます。センダーコンストレンドトークは、アクセストークのアクセストークを使うことができます。そのため、アタックを使うことができます。センダーコンストレンドトークを使うことができます。オース2.0、オース、2.8、あれば2つのオプションを使うことができます。センダーコンストレンドトークを使うことができます。1つのオプションは、RFC 8im 05、O2M TLS、2つのオプションはRFC 9449、DPROPを使うことができます。キークローコードが This Option1を使うことができます。キークログを新しいディープオプション2に サポートされていますディープオプション2はプライアントアプリケーションに サポートされているオプション1はオーセムTLSに サポートされているコンフィデンションアプリケーションに サポートされている次に、アイデンティティブの アマジンパラダのアイデンティティ パリアントアプリケーションに サポートされているこの形には、 self-banned identity called SSISSIのためのアイデアプロバイダーで、採取ができることは、アイデアプロバイダーの方法への情報を調整できる。SSIについて、一つの個性の分析があるのではないか。バイアブルアプションであるか。このアイデアを実現するために 多くのスタンダードを開催することができます世界ウェブコンソーシアムで ベリフェアブルクラデーシャルスデータモデルV2を作成しますこのデータモデルは 主にメジャー4のロールを使用しますエシュアホルダー ベリフェアや サブジェクトホルダーは 世界ウェブコンソーシアムで ベリフェアブルクラデーシャルスデータモデルV2を作成しますこのホルダーは エシュア ベリフェアブルクラデーシャルスデータモデルV2を作成しますその後 ベリフェアブルクラデーシャルスデータモデルV2を作成しますホルダーは ベリフェアブルクラデーシャルスデータモデルV2を作成しますこのデータモデルは ベリフェアブルクラデーシャルスデータモデルV2を作成しますエシュアホルダーは ベリフェアブルクラデーシャルスデータモデルV2を作成しますエシュアホルダーは ベリフェアブルクラデーシャルスデータモデルV2を作成しますキークロコミュニティは エシュアホルダーを作成しますキークロコミュニティは ベリフェアブルクラデーシャルスデータモデルV2を作成しますこの動きは エシュアホルダーとして エシュアホルダーを作成しますこのフレームワークはOID4VCIはこのフレームワークにインプリメントされています。もしT-GlockがOID4VCIを支えているなら、このフレームワークでT-GlockがOID4VCIを支えています。このフレームワークはOID4VCIを支えているので、OID4VCIのオースト2.1のフレームワークは、オースト6のT-Glockのコミュニティアクティビティを主に使っています。もしこのアクティビティを興味しているなら、このアクティビティを参加してもらえます。では、ここまでのフォーマーパートをお伝えします。ありがとうございました。次は?Takashiです。では、2つの部分を紹介します。ここで、私のデモを紹介します。Takashiのキックログは、私の名前はトマスです。私はコンサルテンシーコードコンセントリックで、Takashiのキックログをオフィシャルテンシーにしています。私は、コンサルテンシーコードコンセントリックで、コンサルテンシーコードコンセントリックで、そして、Takashiのキックログのアクティスのコシの缶元をクリアしていくことはできるようです。そして、カネタのうまくアクティシーコードモードを追加することを提問し、これまでポロシーの図を推薦することもできるようです。では、かわいさかをアンフォロスティアジントに答えるつもりです。作業者についてこの仕事はプオロジーアジェントでよりおにぎりにプロジーアジェントはマイトプロジーの そのプロジーアジェントで本当に平均なマイトプロジーのパフォースでは同じプロジーの方針をクロスコマンスの説明ですこの結果、視覚と同じ出資予定を予習し、コールドのリアルニケーショのための多くの方授業が鋭いようとし、多くの機能を変更するために国際手法の説明についてリアルニケーショのようなこの説明が他の方法を下手にとってのエンドゥサーなどの説明にわかるためのイベントを採用するためのプロジェクトの移動をアクセスロジェクトについてお伝えしますポロシーアジェントの使用方法はリブリーやGoアプリケーションについて最も common use cases to run it as a sidecar along your application, let's say, and speak with it via HTTP or JRPC interfaces.どうなりますか?Well, you have your service, your application or whateverand you have OPA as a sidecarand whenever your service receives a requestor something like that that you want to authorisethis applicationthrough some kind of integrationcreates some kind of an access queryor policy query in the JSON formatthis is then sent to OPAand the OPA sidecar has some informationlike the current policy logicloaded into memory together with some data maybebut you could also access data from another sourcethen Open Policy Agent will evaluate this access requestand will get returned a decisionand this decision has to be enforced by your applicationlike whether you allow the access or notso as I saidthis is all backed by a decorative policy languagethat is more or less inspired by a language called Datalogand what you define there in this languageis you define policieswhich are effectively collections of rulesand a rule is effectivelya name collection of conditionsand conditions are ofcourse Boolean expressionsor arbitrary calculationsthat form your accessform your policy logicthere are some implicit variables availablelike you can refer to data that you receiveand the access request via inputand you can access arbitrary datathat is available in Open Policy Agent via datathere are also many built-in functionsfor instance to decode a dot or pass JSONor even check whether an IP addressis in a certain sider rangejust to give you a brief impressionhow such a policy looks likethis is the regolanguageand effectively says thatwe have two rules here with the same namewe have a default rule called allowwhich says falseby default we deny all accessand for a specialization of thatwe have a rule that we allow accessif the HTTP request of method is getand the path is public somehowthis are the conditions behindthe rule hereand those conditions are all combined by andthe logic operator and by defaultso now the question ishow can we leverage thatin keycloakwell the idea iswe could use keycloak as a so called PEPwhich is a policy enforcement pointwhich basically enforces the policydecision that gets presentedby opa and opa serves asthe so called policy decision pointso opa has the logic and getsthe access queries, requestsand response withaccess allowed or denied responsesand we would use regolto define access policies in keycloakbut you would see this approachis not just limited to access control logicwe can also use thatfor implementing fine-grainedup and permissions orallow or reject identitybrokering and directions orwe could even use this as protocoland we can also manage accessfor custom endpointbut what I will focus on nowis just implementingclient access checksand for thiswe have the following modelwe have our userwho lives in a realm called opa demoin keycloak that servesas a PEPkeycloak is in this caseequipped with an opa extensiona small extensionand added to the keycloak serverand keycloak will also containa resource like our appthat we want to access a clientand yeah, keycloak isconfigured with this extensionto be able tosend access queries to opaand interpretthe access decision afterwardsso how does it looks likeso imaginewe have an opa server runningand we now want to accessa certain application in a realmthen we would basicallyinvoke a URLon the opa sideand this ispolicy URLand with this policy path we would basicallyselect which kind of access logicwe want to executeand you see here I have this format realmpolicy and what kind of ruleI want to interceptand an access policy effectivelycould look like thisand in casewe have a clientwith the client ID appwe check whether the current userhas the current role access for that clientif this is the case we allow accessotherwise we deny itand yeahthis is basicallythe interaction that we would havehere we have the inputwhen we try to access the applicationwe create the followingthe shape of an access querywe say the following subjectwith the username tester, the user IDand this realm roles, client rolesand attributes wants to accessa resource of the current realmwith the client ID appand here some additional metadataand openpolicy agent will runthat policy that I showed earlierand then return a resultaccess allowed yes or noand as a side effectit will also generate a decision IDthat allows me to track this access decisionwhether this was successful or notyeahso now enough slidesnow it's time for a demohere I haveanother key cloak realmand if I log intofor instance this application herewith the user testeryou see I can access it straight awayand it works as expectednow let's enable access checksso for thisand there are many ways to implement thisand in this case I userequired action which is executed wheneverbrowser interaction happens with a userwhether it is an authenticated useror after authenticationjust enable thatand if I try to access it againyou see access deniedso what happens underneathwellthe following access querywas basically issuedand with the given inputpolicy querythe following subject user name testerwith the following realm roleswants to access the resourcein this realm with the client IDand the user came from thisparticular IP address with this protocoland whateverand the access decision was falseso why was this the caseso if we look at thepolicy that sits behind thatwe see that againby default our policy says allow falseand nowthe rego language is built in such a waythat the most specific rulethat applies to the given input is selectedin this caseit tries to select the rule herethat we defineour client ID is account consoleand you see that I require that the userhas the role userwhich apparently is currentlynot present herenow let's just assign that roleto the userand just like thatgive the roleand if I now try againto access this applicationaccess will succeedbecause nowthe input query documentcontains the rule that is requiredand the access is now allowedso far so goodso you see simple exampleand just to show you a bitwhat could be possible or how such an accesspolicy could look likeyou just write some ruleswith a self-madeDSL that you buildon top of the primitivesthat rego provides you within this caseI can checkwhether the user hasa certain client rolefor the same clientcould be also a different clientrole that we checkhere is an example where I checkwhether the user hasan access for the current clientwhich I have too in this casebut I could also checkwhether the useris a member of a grouporI could also targetan arbitrary number of clientsnot only a specific clientwith a specific client IDbut I could also leverageopen policiessupport for expressingsomething like orwhich is if you're familiaropen policy agent hassomehow strange relationshipwith a condition operator orand is built in by defaultand super easy to use but orin order to express or you have to do all sorts of trickswhich can be read in thisinteresting blog postand this is one way to do itso you can basically create policiesaccess policies across multipleand apply policies across multiple applicationsand here is somethingspecial here for instanceI have a policy that checkswhether the current user comes from a certainside network rangeand you might wonder how is this implementedunderneath like the other functions as wellwell for this you see thatI always use this kc.referenceobject here which I justimport as anotherpolicy module so to speakand here I have all thislet's saythere's my custom functionsexpressed based on top ofrego primitivesfor instance thenetwork check effectivelyuses aregofunction called netside containswhich allows me to check the network rangeand you can imagine there are hundredsof other functions that you can haveand the idea isif you build your own abstractions on top ofregothen you can give your developer teamsan easy to use DSLat hand that enables them to expressexcess decisions and policy logicin an easy way without having to learnall the nitty gritty details aboutrego you provide them just with a simpleDSL and embedded DSL that they can usenow maybe some othertwo more use casesI showed you some browser basedinteractionswithexcess checks but what if I wantto use an API callor something like that or want to usegrant typesfor instance the grant type passwordor grant type clank credentialsand if Imake some room hereand if I for instance now send a requestto thisand this request like grant typepassword request and grant type clank credentialsquest you see no check is performedat all with this measurethat's whykeycloak does nothave different waysto check for different grants let's saywhat happensand if you want to have checks here as wellwe can leverage another cool featurethat was contributed by Takashiwhich is called client policiesso in order to use thatwe start first we createa so called client profilewhich is called opaclient accesscheck access profileand here we selectso called opa client accessand here we can selectwhich kind of informationwe want to be added to a policy querywhichuser attribute, context attributerem attribute, client attribute whateverwhether we want to expose roles and so onand what kind of policy pathwe want to useand nowto apply this profilewe need to create a policythat tells usto which clientsshould this policy be appliedand let's sayconditions we sayplease apply to just any client for nowand here we saywe link that to ouropa check access profileand the steps are on the slides that I uploadedso don't worrywe can watch it later onso now I createdthis collected this policyand if I try to do the request againyou see hereopa access check failedfor 3 forbiddenwhy was this the casewell the access query was executedand you see here the grant type waspassword in this caseand the access was deniedwhy was that the casebecause in our policyit saidthe policy access logicmatched the client in this casewhich didn'tfailback to theallow denyso if I makethis method matchand now you can imagineI changed the code, I committed it, Ilinted it, I pushed itthe ice pipeline kicked in, built it againand whatevereither pushed it into myop policy agentor provided an endpointthat the policy agent couldpull from periodicallyand now my policy is liveand if I try againto call the endpointnow it succeedsI got a token and so onand here you also seerequest was performedand this time it says result truethat's itso that's all I wanted toshow for nowand all I have time forthe cool thing about thisas I said earlier, I want alsoto test the policiesand you can just do thatwith the built in opa testfunctionality. You basicallydefine your exampleinput queries so to speakwith the bare information that youwant to provide and then you cancreate arbitrary asserts around thatand so on. And with thatyou can basically test your access ruleswithout Kiklo justby using the built-in toolingand so on.Okay, this concludes my demo.There's a lot more slides availablein the uploaded form.Exactly, thanks.To summarize, you've seenthe simple integration ofopen policy agent and Kiklo.Code is all on GitHub, link is the nextslide. You see thataccess decisions can be delegated to opawith this, but enforced by Kiklo.And you might wonder whyshould I do that?Usually, theseaccess decisions are also enforcedon the application side. Of course, you stillhave to do that, like validating on the frontand on the back end. We have to do itsomehow on both sides. Butif Kiklo knows that an access is deniedwe can also analyze why.For instance, maybe the user is missinga role and then we can add aprocess to Kiklo that says thatokay, you cannot currently access thisapplication because you're missing that roleor you are not a member of the group. Click hereto request that role or click hereto request joining that group.And you can kickoff arbitrarymanagement processes thatsomeone grants you access to that.And later on you can try it again.That's possible when Kiklo knowsthat there exists a night based on that.Also, these mechanismsallow us flexiblepolicy management via githubsas you've seen. Adjustedcode and whatever you want tocan do with code you can do.Also, in my experience, this alsohaves to consolidateaccesslogic.Because as you've seenwith small helper functions that Iwrote, you could also writebuilding blocks of access controllogic that are shared acrossapplications that you can reuse with the same purpose.And so on.And that'sall I have with that.I say thank you.Code is on GitHub.You can find it there.If you have feedback to our talk, you can scan the QR code.And I think we have two minutes for questions.And if you have questionssome folks will bringmike.Hello.Hello.Does this in any wayaffect or relate UMAin Kiklo maybe?Do you mean user managed access?This could be leveragedregard as well.Let's say to write logicto enforce user managed access.But in this prototypeon this example, that's not part of it.Ok.Other questions?Soif there are no more questionsfeel free toSpeak to us.We will stay here around for a while.Thanks for listening.