https://auth.astravue.com/realms/astravue/protocol/openid-connect/authresponse_type=code — Requests an authorization code.client_id=YOUR_CLIENT_ID — Your app's Client ID.redirect_uri=YOUR_REGISTERED_REDIRECT_URI — Must match one of the URIs you registered.state=RANDOM_STRING — (Recommended) A random string to prevent CSRF attacks.https://auth.astravue.com/realms/astravue/protocol/openid-connect/auth?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REGISTERED_REDIRECT_URI&scope=openid&state=RANDOM_STRINGredirect_uri with an authorization code in the URL:https://yourapp.com/callback?code=AUTHORIZATION_CODE&state=RANDOM_STRINGPOST https://auth.astravue.com/realms/astravue/protocol/openid-connect/tokengrant_type=authorization_codecode=AUTHORIZATION_CODE (from previous step)redirect_uri=YOUR_REGISTERED_REDIRECT_URIclient_id=YOUR_CLIENT_IDclient_secret=YOUR_CLIENT_SECRETaccess_token (valid for 30 minutes) and refresh_token (long-lived).POST https://auth.astravue.com/realms/astravue/protocol/openid-connect/tokengrant_type=refresh_tokenrefresh_token=YOUR_REFRESH_TOKENclient_id=YOUR_CLIENT_IDclient_secret=YOUR_CLIENT_SECRETaccess_token and potentially a new refresh_token.⚠️ Never expose your client secret in frontend or public code.