Skip to content

Check whether the OAuth2 redirect URI for mint.tacc.utexas.edu is already registered #73

Closed

Description

@mosoriob

Question

ui-react uses OAuth2 against Keycloak/Tapis, and login fails on first contact if the redirect URI is not registered for the exact origin serving the app.

Since ui-react is replacing Lit at an origin that already exists and already does OAuth, the URI may already be registered — but the callback path differs: ui-react uses /oauth2/callback (see App.tsx), and the Lit app's path is not necessarily the same.

Confirm what is registered for https://mint.tacc.utexas.edu today, and whether https://mint.tacc.utexas.edu/oauth2/callback is among the allowed redirect URIs. If not, register it.

This is the classic item discovered on demo day. Settle it before T8, not during.


Sharpened by Tag helm-charts 9.0.0-beta.3 and bump the submodule pointer off beta.2:
the chart's values.yaml documents that ui_react.config.client_id must be a client
distinct from the legacy UI's, because the identity provider allows one callback
URL per client
— so adding /oauth2/callback to the existing client would break login
on the Lit app rather than sit alongside it.

That matters here because the rollout decided in
Confirm SUBSIDE can live without the un-ported Lit screens
keeps Lit deployed-but-unrouted as the only undo. An undo whose login is broken is not an undo.

So this ticket has two answers to produce, not one:

  1. What is registered for https://mint.tacc.utexas.edu today, and on which client.
  2. Whether TACC's IdP really is one-callback-per-client — and if so, a second client
    id
    for ui-react, leaving the Lit client untouched.

Activity

  1. added
    wayfinder:taskWayfinder ticket: manual work that unblocks a decision
    on Aug 8, 2026
  2. self-assigned this
    on Aug 8, 2026
  3. mosoriob commented on Aug 8, 2026

    @mosoriob
    ContributorAuthor

    Answer

    The redirect URI is registered already. No work is necessary at the identity provider.
    ui-react uses the same OAuth2 client as ui.

    The ticket expected a different callback path for ui. That expectation was wrong. Both apps
    use the browser origin plus /oauth2/callback. See mint-ui-lit/src/util/oauth2-adapter.ts:56.

    1. What is registered

    The identity provider is Tapis, tenant portals. It is not Keycloak.

    The OAuth2 client is mint. The ui app uses this client today. Its registered
    callback_url is exactly:

    https://mint.tacc.utexas.edu/oauth2/callback
    

    ui-react sends the same URL from that host. Source:
    https://mint.tacc.utexas.edu/config.js.

    How I proved this

    Tapis compares the redirect_uri on GET /v3/oauth2/authorize. It does this before the login
    page. Thus a test needs no password. Tests on 2026-08-08:

    client_id redirect_uri Result
    mint https://mint.tacc.utexas.edu/oauth2/callback 302 to login — match
    mint https://mint.tacc.utexas.edu/nope/callback 400 — no match
    mint http://mint.tacc.utexas.edu/oauth2/callback 400 — no match

    The last two rows are important. They show that the test is accurate. Tapis compares the
    scheme, the host and the path.

    I also tested mint-vercel, mint-local and four possible React client names. Each MINT client
    has one origin. No React client exists.

    2. One callback URL for each client

    This is correct. A Tapis client has one callback_url field. See the
    Tapis documentation.

    But #70 made a wrong conclusion from this fact. ui_react does not need its own client:

    1. Both apps send the same URL. There is no second URL to add.
    2. Only one app has a route at the host at one time. Flip mint.tacc.utexas.edu to ui-react #77 keeps ui deployed with no route.

    Decision: ui-react uses the client mint. Thus the cutover and the rollback need no
    change at Tapis.

    Warning: the chart disagrees

    charts/mint/values.yaml and the fail in templates/ui-react-config.yaml say that ui_react
    must use a different client. That text is not correct for this cutover. It assumes two different
    origins. The template stops only if client_id is empty. The value mint is permitted.

    Effects on other tickets

    The container serves the callback path correctly. docker/nginx.conf uses
    try_files $uri /index.html.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

wayfinder:taskWayfinder ticket: manual work that unblocks a decision

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions