背景
#191 のレビュー (#discussion_r3732470602 / #discussion_r3732470605) から切り出しました。
league はクライアントシークレットを保存時にハッシュ化せず、初回のトークン取得成功時に bcrypt へ日和見アップグレードします (ClientRepository::validateClient())。そのため OAuth クライアント一覧に表示される値は、一度でも使われた後は事業者へ渡せないハッシュになります。管理者がハッシュをシークレットと誤認する経路が残ります。
#191 では ACP/UCP 用クライアントについてのみ、一覧での再表示をやめ (- 表示)、登録直後の完了画面で 1 度だけ平文を提示する方式を導入しました。一方 GraphQL 用の confidential クライアントは従来どおり一覧に描画され続けているため、同じ問題が残っています。
検討したいこと
isConfidential() な全クライアントで一覧のシークレット表示を統一するかどうか。ただし単純に隠すだけでは既存の導線を壊します。
- GraphQL クライアントは「登録後、初回利用前に一覧からコピーする」のが現在の運用
- 一覧に平文を出さないなら、汎用フォーム (
ClientType) 側にも発行時のワンタイム表示が必要になる
- 「一度でも使われたか」を判定する手段が無いため、表示/非表示の動的な出し分けはできない
UX 込みで設計してから実装する必要があるため、#191 とは分けています。
併せて見直す
OAuthController::index() がビュー専用に組み立てている agentCommerceClientIds の持ち方も、この方針決定に従属するため同時に再検討します。
現状は Twig に 'acp:' / 'ucp:' を直書きしない (= AgentCommerceClientType::PROTOCOL_SCOPES を正本に保つ) ためにコントローラ側で判定していますが、confidential クライアント全般で統一する方針を採るなら、この分岐自体が不要になります。
背景
#191 のレビュー (#discussion_r3732470602 / #discussion_r3732470605) から切り出しました。
league はクライアントシークレットを保存時にハッシュ化せず、初回のトークン取得成功時に bcrypt へ日和見アップグレードします (
ClientRepository::validateClient())。そのため OAuth クライアント一覧に表示される値は、一度でも使われた後は事業者へ渡せないハッシュになります。管理者がハッシュをシークレットと誤認する経路が残ります。#191 では ACP/UCP 用クライアントについてのみ、一覧での再表示をやめ (
-表示)、登録直後の完了画面で 1 度だけ平文を提示する方式を導入しました。一方 GraphQL 用の confidential クライアントは従来どおり一覧に描画され続けているため、同じ問題が残っています。検討したいこと
isConfidential()な全クライアントで一覧のシークレット表示を統一するかどうか。ただし単純に隠すだけでは既存の導線を壊します。ClientType) 側にも発行時のワンタイム表示が必要になるUX 込みで設計してから実装する必要があるため、#191 とは分けています。
併せて見直す
OAuthController::index()がビュー専用に組み立てているagentCommerceClientIdsの持ち方も、この方針決定に従属するため同時に再検討します。現状は Twig に
'acp:'/'ucp:'を直書きしない (=AgentCommerceClientType::PROTOCOL_SCOPESを正本に保つ) ためにコントローラ側で判定していますが、confidential クライアント全般で統一する方針を採るなら、この分岐自体が不要になります。