Repository navigation
DRAFT offers without twins, step A: allow_preauth_offer on the base scopes; datastore-offer follows the config - #83
Merged
Conversation
…(per environment) and datastore-offer follows the rendered config SUNET/vc#840. issuer.allowPreauthOffer (default off; on for gdc) renders allow_preauth_offer on every login-gated datastore scope. scripts/datastore.py mints against the base scope when the rendered config flags it, else the <type>_offer twin; a named twin is never rewritten. The twins stay; step B removes them after an offer for the base scope has been redeemed. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
DRAFT, not deployed. Step A of the offer-twins removal (the user's plan: flag the base scopes -> move minting -> remove the twins LAST). Base:
deploy/gdc-nymauth-verifier(the merged state after #82). Step B is #84 (stacked on this one; do not deploy it before step A has been verified live).Needs a vc apigw image carrying SUNET/vc#840 (
allow_preauth_offer, head 952426dc5), which is in the integration build015b26efc1b216ada20b1079996f31707837c922(rebuild in progress; the pin provenance block is updated with the deploy).What
issuer.allowPreauthOffer(values-base.yaml, default false; true for gdc inenvironments/gdc.yaml):chart/templates/04-issuer.yamlrendersallow_preauth_offer: trueon every datastore scope whoseauth_provideris notpreauth, never on a preauth scope.scripts/datastore.py(offer_scope):make datastore-offer SCOPE=<type>mints against the base scope when the RENDERED apigw config flags it, otherwise against the<type>_offertwin; a named<type>_offeris never rewritten; a twin-styleDOCUMENT_ID(document_id_nym_auth_offer_alice-001) is mapped to the base document id (document_id_nym_auth_alice-001). The twins stay in this step, so the Pixel nym_auth rounds keep working withnym_auth_offeruntil a base-scope offer has been redeemed.Why gdc can set the flag (the #840 startup guard)
The guard refuses to start unless
api_auth.oidc.enable, orapi_auth.jwks.enablewith the admin UI off. gdc's rendered apigw config:api_auth.jwks.enable: true,oidc.enablenot set (false),admin_ui_enablenot set (vc default false). Passes; vc was told these values. The flag is off by default because an image with #840 refuses to start with it set where that does not hold, and an older image ignores it (a base-scope mint then fails with invalid_scope).Tests
tests/test_offer_without_twins.py(8): flag off by default, on for every login-gated scope and never on a preauth one, gdc sets it, and the fiveoffer_scopecases. Proven non-vacuous (making the template always render the flag fails the first two).make vc-config-parityclean (five accepted-diffs entries for gdc'sallow_preauth_offer);tests/golden/fly_up.jsonrefreshed. Full suite: only the unrelated 4test_chaterrors.Deploy order (gdc)
New vc images -> deploy with the flag set -> mint an offer for the BASE scope (
make datastore-offer SCOPE=nym_auth DOCUMENT_ID=document_id_nym_auth_alice-001 ENV=gdc) -> redeem it on the Pixel (offer withcredential_configuration_idnym_auth; the seed must still be delivered) -> only then step B.🤖 Generated with Claude Code