RFC 8693 クイズ

subject, actor, audience, 委任authority

0 / 0

一次資料

exchangeの構文とauthorization policy、actorの履歴とaccess-controlの入力、委任されたauthorityとtoken・channel bindingを区別します。Section番号はRFC 8693を指します。

Q1: 新しいtokenを「誰のために」要求するかを表すrequest inputはどれ?

単一選択
RFC 8693 Sections 1.1と2.1は、subject_tokenをrequestの対象となるparty、つまり「誰のために」tokenを要求するかを表すtokenとして定義するため、Bが正しい。actor_tokenは任意のacting partyを表し、requested_token_typeはprincipalではなく希望する出力形式を表す。

Q2: authorization serverはこのrequestをどう処理する?

単一選択

gatewayはmTLSでtoken endpointへclient authenticationした。form bodyには有効なsubject_tokenとそのtype、さらにactor_tokenがあるが、actor_token_typeを省略している。

RFC 8693 Section 2.1は、actor_tokenがある場合にactor_token_typeをREQUIREDとし、ない場合の送信を禁止する。Section 2.2.2は不正なrequestにinvalid_requestを要求するため、Cが正しい。client authenticationはtoken typeを補わず、actorを黙って捨てると意味が変わり、invalid_targetはresourceやaudienceに関するerrorである。

Q3: 意図したleast privilegeを表すrequest設計はどれ?

単一選択

gatewayはresource Aでread、resource Bでwriteを必要とするが、Aでwriteを許可してはならない。一つのexchange requestへ二つのresourcescope=read writeを入れる案がある。

RFC 8693 Section 2.1.1は、要求する権限を全scopeと全targetのCartesian productとして定義し、位置による対応付けはしない。BならAでwriteを要求せずに済む。Aは存在しない順序規則を作り、Cはtarget集合を分割せず拡大し、Dは必要な権限を表さずservice policy任せにする。

Q4: このexchange failureで要求されるerrorはどれ?

単一選択

要求されたbackend audienceはpolicy上許可されているが、提供されたsubject_tokenのsignature validationに失敗した。

RFC 8693 Section 2.2.2は、不正またはpolicy上受理できないsubject_tokenactor_tokenにOAuthのinvalid_requestをMUSTで要求するため、Aが正しい。invalid_targetはresourceまたはaudienceを受理できない場合に使う。validation failureは一時的failureでも、空tokenを返す成功responseでもない。

Q5: このsuccess responseは構造上正しい?

単一選択

responseはSAML 2.0 assertionをaccess_tokenに格納し、issued_token_typeをSAML 2.0のtoken-type URI、token_typeN_Aとした。このassertionはOAuth access tokenとしては使えない。

RFC 8693 Section 2.2.1は、歴史的理由によりaccess_token fieldで任意の発行security tokenを運ぶ。issued_token_typeは表現形式を、token_typeはOAuth access tokenとしての利用方法を示し、その考え方が該当しない場合はN_Aを使う。したがってCが正しい。AとBは二種類のtypeを混同し、Dはclientに必要な表現形式を捨ててしまう。

Q6: 正しいresponse reviewはどれ?

単一選択

clientはscope=read writeを要求した。policyはreadだけのJWTを発行したが、clientがJWTをdecodeできるという理由で、JSON token responseからtop-levelのscopeを省略した。

RFC 8693 Section 2.2.1は、発行scopeが要求scopeと同一の場合に限りresponseのscopeをOPTIONALとし、それ以外ではREQUIREDとするため、Bが正しい。tokenを読めることはresponse要件を消さず、scope縮小こそ報告が必要な場合であり、refresh tokenの有無は関係しない。

Q7: 設計から取り除くべきlifecycle assumptionはどれ?

単一選択

gatewayがinput tokenをbackend tokenへ交換する。設計者は、exchangeがinput tokenを消費し、後のinput renewalがbackend tokenの期限を延長し、input revocationがbackend tokenへ自動伝播すると仮定している。これらを定めるprofileやdeployment mechanismはない。

RFC 8693 Section 2.1によれば、exchangeは通常input tokenのvalidityへ影響せず、inputとoutputの間に強いlinkageを作らない。input renewalがoutputを変更するとは期待されず、revocation propagationは望ましい場合があっても、implementation、token type、deployment固有である。したがって三つとも保証されず、Dが正しい。A、B、Cはいずれかの非保証動作をprotocol propertyに変えている。

Q8: 正確なauthorization reviewはどれ?

単一選択

盗まれたsubject JWTにmay_act.sub=gateway-7がある。unauthenticated callerはgateway-7を名乗るactor tokenも提示する。authorization serverはunidentified clientを許可し、二つの名前が一致したことだけで承認する予定である。

RFC 8693 Sections 2.1と4.4では、may_actをactorになれるかの判断材料にできるが、authorization serverは提供tokenを検証し、authorization policyを適用する必要がある。unidentified clientを許可するかはdeployment判断であり、Section 2.1はcompromised tokenを誰でもSTSで利用できる危険を警告する。Bが不足するcontrolを示す。Aはclaimをcaller proofと混同し、CはRFCを逆に読み、Dはexchangeをauthenticateもauthorizeもしない。

Q9: 発行されたtokenに合うauthorization・audit上の解釈はどれ?

単一選択

gatewayがAliceのsubject tokenと自分のactor tokenを交換する。発行tokenにはsub=aliceact.sub=gateway-7、backend向けaudience、縮小されたscopeがある。backend policyは、誰が誰に代わってcallしたかを保持する必要がある。

RFC 8693 Section 1.1は、actorが自分のidentityを保ってsubjectのために動くdelegationと、impersonationを区別する。Section 4.1ではtop-levelのactを現在のactorとし、過去のactorを入れ子で表せる。Cはこの区別とtokenの宛先制約を保持する。AとDは現在のactor contextを失い、Bは限定されたdelegationをより広いimpersonationへ変えてしまう。

Q10: backendは交換後のtokenを元client sessionのproofとして扱ってよい?

単一選択

clientがgrantとsession-bound proofをgatewayへ送る。gatewayは両方を検証し、grantをaudience-restrictedなbearer access tokenへ交換して、自分のact claimを入れる。その後、別のTLS connectionでbackendを呼ぶ。backendは元のproof、exporter値、client sessionとの他のbindingを受け取らない。

RFC 8693 Section 1は、仕様の範囲を基本的なtoken exchange protocolに限定し、tokenのsecurity特性、proof of possession、deploymentのtrust modelをprofileやpolicyに委ねる。有効な交換tokenは、そのaudience・scope・subject・actorの意味に従ってbackend callをauthorizeできるが、別TLS sessionのevidenceを新たに作るわけではない。Cは二つの保証を分離する。Dは誤りで、resource serverが受領tokenをbackend用tokenへ交換する例は明示されている。

Q11: act claimの規則に適合するaccess-controlとauditの扱いはどれ?

単一選択

tokenのtop-levelはsub=alice、current actorはact.sub=service-16、nested prior actorはact.act.sub=service-77である。resource serverはtokenを検証し、三つのidentityを利用したい。

RFC 8693 Section 4.1は、access-control policyでtokenのtop-level claimと最外側actのcurrent actorだけを考慮するよう要求する。nested prior actorは情報用途の履歴で、access controlに使ってはならないため、Bが正しい。AとCは過去の履歴を規範的に使い、Dは明示的に判断対象となるcurrent actorまで捨てている。

Q12: 指定されたprivacy requirementを満たすissuance policyはどれ?

単一選択

authorization serverはTLS経由でgateway clientへtokenを発行する。各tokenにはAliceのemail、employee number、完全なactor historyが入る。backendが必要なのはpseudonymous subjectとcurrent actorだけであり、policy上gatewayは直接識別子を知ってはならない。

RFC 8693 Section 6はencrypted channelを要求し、clientへ見せたくない情報はintended recipient向けにencryptすることを要求し、必要最小限のdataだけを含めることを推奨する。Cは三つの条件を満たす。TLSはgatewayで終端し、Base64urlは暗号化ではなく、nestingはclaim構造を変えるだけで機密性を与えないため、A、B、Dは不適切である。