From 37ea90e0d6f0b2173016a057f7ee92858f75bc21 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 25 Sep 2025 18:57:07 +0000 Subject: [PATCH 1/2] Initial plan From 7dbde8d1386fc580376487a72eaa726a2351c5e3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 25 Sep 2025 19:09:01 +0000 Subject: [PATCH 2/2] Add comprehensive Keycloak OAuth support to products-web application Co-authored-by: shoootyou <19865273+shoootyou@users.noreply.github.com> --- products-web/.env.keycloak.example | 37 +++ products-web/KEYCLOAK.md | 264 ++++++++++++++++++ products-web/QUICKSTART.md | 21 +- products-web/README.md | 77 ++++- products-web/app.py | 140 ++++++++-- .../screenshots/keycloak-config-expanded.png | Bin 0 -> 65388 bytes .../screenshots/keycloak-login-page.png | Bin 0 -> 47262 bytes 7 files changed, 509 insertions(+), 30 deletions(-) create mode 100644 products-web/.env.keycloak.example create mode 100644 products-web/KEYCLOAK.md create mode 100644 products-web/screenshots/keycloak-config-expanded.png create mode 100644 products-web/screenshots/keycloak-login-page.png diff --git a/products-web/.env.keycloak.example b/products-web/.env.keycloak.example new file mode 100644 index 0000000..eea9454 --- /dev/null +++ b/products-web/.env.keycloak.example @@ -0,0 +1,37 @@ +# Keycloak OAuth Configuration Example +# Copy this file to .env and fill in your actual Keycloak values + +# Keycloak Client Configuration +CLIENT_ID=products-web-client +CLIENT_SECRET=your_keycloak_client_secret_here + +# Keycloak Server Configuration +# Replace keycloak.example.com and realm-name with your actual values +KEYCLOAK_SERVER_URL=https://keycloak.example.com +KEYCLOAK_REALM=your-realm-name + +# OAuth Scopes (space-separated) +# Keycloak common scopes: openid profile email +SCOPE=openid profile email + +# Redirect URI (must match what's configured in Keycloak client) +REDIRECT_URI=http://localhost:8501/oauth2callback + +# Base URL will be constructed automatically from KEYCLOAK_SERVER_URL and KEYCLOAK_REALM +# Leave empty to auto-construct, or set manually for custom configurations +BASE_URL= + +# For manual URL configuration (advanced users only - leave empty for auto-construction): +# AUTHORIZE_URL=https://keycloak.example.com/realms/your-realm-name/protocol/openid-connect/auth +# TOKEN_URL=https://keycloak.example.com/realms/your-realm-name/protocol/openid-connect/token +# REFRESH_TOKEN_URL=https://keycloak.example.com/realms/your-realm-name/protocol/openid-connect/token +# REVOKE_TOKEN_URL=https://keycloak.example.com/realms/your-realm-name/protocol/openid-connect/revoke + +# ProductsAgent API Configuration +PRODUCTS_AGENT_URL=http://localhost:8000 + +# Authentication Provider (set to 'keycloak' to enable Keycloak-specific features) +AUTH_PROVIDER=keycloak + +# Logging Level (DEBUG, INFO, WARNING, ERROR) +LOG_LEVEL=INFO \ No newline at end of file diff --git a/products-web/KEYCLOAK.md b/products-web/KEYCLOAK.md new file mode 100644 index 0000000..80c5d55 --- /dev/null +++ b/products-web/KEYCLOAK.md @@ -0,0 +1,264 @@ +# Keycloak Setup Guide for Products Web App + +This guide explains how to configure the products-web application to use Keycloak for authentication instead of Microsoft Entra ID. + +## Overview + +The products-web application supports both Microsoft Entra ID and Keycloak as OAuth2 authentication providers. This flexibility allows you to integrate with your existing identity management infrastructure. + +## Prerequisites + +- Keycloak server (version 15+ recommended) +- Administrative access to your Keycloak realm +- Products-web application source code +- Python 3.12+ with required dependencies + +## Keycloak Configuration + +### 1. Create a New Client + +1. Log into your Keycloak Admin Console +2. Navigate to your realm (or create a new one) +3. Go to **Clients** → **Create** +4. Configure the client: + +```yaml +Client ID: products-web-client +Client Protocol: openid-connect +Root URL: http://localhost:8501 +``` + +### 2. Client Settings + +Configure the following settings for your client: + +**Access Type:** `confidential` + +**Standard Flow:** `Enabled` (Authorization Code Flow) + +**Valid Redirect URIs:** +``` +http://localhost:8501/oauth2callback +https://your-domain.com/oauth2callback # For production +``` + +**Web Origins:** +``` +http://localhost:8501 +https://your-domain.com # For production +``` + +**Advanced Settings:** +- Proof Key for Code Exchange Code Challenge Method: `S256` (recommended) + +### 3. Get Client Credentials + +1. Go to the **Credentials** tab of your client +2. Copy the **Secret** value - you'll need this for `CLIENT_SECRET` + +### 4. Configure User Attributes (Optional) + +If you want to include additional user information in JWT tokens: + +1. Go to **Client Scopes** +2. Add desired scopes like `profile`, `email` +3. Configure mappers for additional claims if needed + +## Application Configuration + +### 1. Environment Variables + +Create a `.env` file based on `.env.keycloak.example`: + +```env +# Keycloak Client Configuration +CLIENT_ID=products-web-client +CLIENT_SECRET=your_actual_client_secret_here + +# Keycloak Server Configuration +KEYCLOAK_SERVER_URL=https://keycloak.yourdomain.com +KEYCLOAK_REALM=your-realm-name + +# OAuth Scopes +SCOPE=openid profile email + +# Redirect URI +REDIRECT_URI=http://localhost:8501/oauth2callback + +# Authentication Provider +AUTH_PROVIDER=keycloak + +# ProductsAgent API Configuration +PRODUCTS_AGENT_URL=http://localhost:8000 + +# Logging +LOG_LEVEL=INFO +``` + +### 2. Alternative: Manual URL Configuration + +For advanced users who want to specify URLs manually: + +```env +# Manual URL configuration (instead of auto-construction) +AUTH_PROVIDER=keycloak +AUTHORIZE_URL=https://keycloak.yourdomain.com/realms/your-realm/protocol/openid-connect/auth +TOKEN_URL=https://keycloak.yourdomain.com/realms/your-realm/protocol/openid-connect/token +REFRESH_TOKEN_URL=https://keycloak.yourdomain.com/realms/your-realm/protocol/openid-connect/token +REVOKE_TOKEN_URL=https://keycloak.yourdomain.com/realms/your-realm/protocol/openid-connect/revoke +``` + +## Running the Application + +### 1. Install Dependencies + +```bash +cd products-web +python3 -m venv .venv +source .venv/bin/activate +pip install -r requirements.txt +``` + +### 2. Set Environment Variables + +```bash +# Copy and modify the Keycloak example +cp .env.keycloak.example .env + +# Edit .env with your actual Keycloak configuration +nano .env +``` + +### 3. Start the Application + +```bash +streamlit run app.py +``` + +### 4. Test Authentication + +1. Navigate to `http://localhost:8501` +2. Click "Login with Keycloak" +3. You'll be redirected to your Keycloak login page +4. After successful authentication, you'll be returned to the application + +## Troubleshooting + +### Common Issues + +#### 1. "Invalid redirect URI" +- Ensure the redirect URI in your `.env` exactly matches what's configured in Keycloak +- Check for trailing slashes and protocol mismatches + +#### 2. "Client not found" +- Verify `CLIENT_ID` matches the client ID in Keycloak +- Ensure you're using the correct realm + +#### 3. "Invalid client credentials" +- Double-check the `CLIENT_SECRET` value +- Ensure the client is set to "confidential" access type + +#### 4. "Invalid scope" +- Verify the scopes in your `.env` are configured in Keycloak +- Common scopes: `openid`, `profile`, `email` + +### Debugging Tips + +#### Enable Debug Logging +```env +LOG_LEVEL=DEBUG +``` + +#### Check Configuration Display +The application shows configuration details in the "Configuration Details" expander on the authentication page. + +#### Network Debugging +Use browser developer tools to inspect: +- OAuth redirect flows +- Token responses +- API calls to Keycloak endpoints + +## Advanced Configuration + +### Custom Claims and Scopes + +To include custom user attributes in tokens: + +1. **Create Custom Client Scope** in Keycloak +2. **Add Protocol Mappers** for your attributes +3. **Assign Scope** to your client +4. **Update SCOPE** environment variable + +Example for custom user attributes: +```env +SCOPE=openid profile email roles groups custom-attributes +``` + +### SSL/TLS Configuration + +For production deployments: + +1. **Use HTTPS URLs** in all configuration +2. **Configure SSL certificates** in Keycloak +3. **Update redirect URIs** to use HTTPS +4. **Set secure cookie options** if needed + +### Multi-Realm Support + +To support multiple Keycloak realms: + +1. Set up separate `.env` files per realm +2. Use different client IDs for each realm +3. Consider using realm-specific redirect URIs + +## Security Considerations + +### Production Checklist + +- [ ] Use HTTPS for all URLs +- [ ] Set strong client secrets +- [ ] Configure appropriate token lifetimes +- [ ] Enable PKCE (Proof Key for Code Exchange) +- [ ] Review and minimize scope permissions +- [ ] Set up proper CORS policies +- [ ] Configure session timeout appropriately +- [ ] Enable audit logging in Keycloak + +### Token Security + +- Tokens are stored in Streamlit session state (server-side) +- JWT validation occurs on every API call +- Automatic token refresh is supported +- Logout clears all session data + +## Comparison with Entra ID + +| Feature | Keycloak | Microsoft Entra ID | +|---------|----------|-------------------| +| **Cost** | Free (self-hosted) | Paid per user | +| **Deployment** | Self-managed | Cloud-managed | +| **Customization** | Highly customizable | Limited customization | +| **Enterprise Features** | Full-featured | Advanced enterprise features | +| **Setup Complexity** | Medium | Low | +| **Token Standards** | Full OAuth2/OIDC | Full OAuth2/OIDC | + +## Support and Resources + +### Keycloak Documentation +- [Keycloak Documentation](https://www.keycloak.org/documentation) +- [OAuth2/OIDC Configuration](https://www.keycloak.org/docs/latest/server_admin/index.html#_client_credentials) + +### Application Resources +- Check the main README.md for overall architecture +- See QUICKSTART.md for quick setup instructions +- Review products-agent README for backend configuration + +### Getting Help + +If you encounter issues: + +1. Check the application logs (`LOG_LEVEL=DEBUG`) +2. Verify Keycloak server logs +3. Review network traffic in browser dev tools +4. Consult Keycloak community forums +5. Check the OAuth2 specification for protocol details \ No newline at end of file diff --git a/products-web/QUICKSTART.md b/products-web/QUICKSTART.md index d3f8a93..70cd9ea 100644 --- a/products-web/QUICKSTART.md +++ b/products-web/QUICKSTART.md @@ -12,15 +12,32 @@ source .venv/bin/activate uv pip install streamlit streamlit-oauth "python-jose[cryptography]" python-dotenv requests cryptography ``` -### 2. Configure Environment +### 2. Configure Authentication Provider + +Choose your preferred authentication provider: + +#### Option A: Microsoft Entra ID (Default) ```bash -# Copy environment template +# Copy environment template cp .env.example .env # Edit .env with your Microsoft Entra ID credentials: # CLIENT_ID, CLIENT_SECRET, TENANT_ID ``` +#### Option B: Keycloak +```bash +# Copy Keycloak environment template +cp .env.keycloak.example .env + +# Edit .env with your Keycloak configuration: +# CLIENT_ID, CLIENT_SECRET, KEYCLOAK_SERVER_URL, KEYCLOAK_REALM +``` + +📖 **For detailed Keycloak setup, see [KEYCLOAK.md](./KEYCLOAK.md)** +# CLIENT_ID, CLIENT_SECRET, TENANT_ID +``` + ### 3. Run Application ```bash # Start the Streamlit app diff --git a/products-web/README.md b/products-web/README.md index f39da2e..cd7a188 100644 --- a/products-web/README.md +++ b/products-web/README.md @@ -1,14 +1,26 @@ # Products Web - Streamlit Application -A modern Streamlit web application that provides a secure interface for Microsoft Entra ID OAuth authentication integrated with an intelligent ProductsAgent chat system. This application serves as the frontend for interacting with AI-powered product management capabilities while demonstrating end-to-end authentication flows in a zero-trust architecture. +A modern Streamlit web application that provides a secure interface for OAuth authentication integrated with an intelligent ProductsAgent chat system. This application serves as the frontend for interacting with AI-powered product management capabilities while demonstrating end-to-end authentication flows in a zero-trust architecture. +## Supported Authentication Providers + +This application supports multiple OAuth2/OpenID Connect providers: + +- **Microsoft Entra ID** (Azure AD) - Default provider +- **Keycloak** - Open-source identity and access management +- **Custom OAuth2/OIDC** - Any compliant OAuth2 provider + +📖 **For Keycloak setup instructions, see [KEYCLOAK.md](./KEYCLOAK.md)** ## Prerequisites - Python 3.12 or higher - [uv](https://github.com/astral-sh/uv) package manager - Docker and Docker Compose (for containerized deployment) -- Microsoft Entra ID tenant with configured application registration +- Authentication provider: + - **Microsoft Entra ID**: tenant with configured application registration, OR + - **Keycloak**: server with configured client, OR + - **Custom OAuth2**: provider with client credentials ## Local Development Setup @@ -42,7 +54,11 @@ uv pip install -r requirements.txt uv pip install -e . ``` -### 3. Environment Configuration +### 3. Authentication Provider Configuration + +Choose one of the supported authentication providers and create the appropriate configuration: + +#### Option A: Microsoft Entra ID (Default) Create a `.env` file with your Microsoft Entra ID configuration: @@ -57,6 +73,61 @@ SCOPE=openid profile email api://.onmicrosoft.com/products-agent/Age REDIRECT_URI=http://localhost:8501/oauth2callback BASE_URL=https://login.microsoftonline.com +# Authentication Provider (optional, defaults to entra_id) +AUTH_PROVIDER=entra_id + +# ProductsAgent API Configuration +PRODUCTS_AGENT_URL=http://localhost:8001 +``` + +#### Option B: Keycloak + +Create a `.env` file with your Keycloak configuration: + +```env +# Keycloak Client Configuration +CLIENT_ID=products-web-client +CLIENT_SECRET=your_keycloak_client_secret_here + +# Keycloak Server Configuration +KEYCLOAK_SERVER_URL=https://keycloak.yourdomain.com +KEYCLOAK_REALM=your-realm-name + +# OAuth Settings +SCOPE=openid profile email +REDIRECT_URI=http://localhost:8501/oauth2callback + +# Authentication Provider +AUTH_PROVIDER=keycloak + +# ProductsAgent API Configuration +PRODUCTS_AGENT_URL=http://localhost:8001 +``` + +📖 **For detailed Keycloak setup instructions, see [KEYCLOAK.md](./KEYCLOAK.md)** + +#### Option C: Custom OAuth2 Provider + +For other OAuth2/OIDC compliant providers, manually specify the endpoints: + +```env +# Custom OAuth2 Provider Configuration +CLIENT_ID=your_client_id +CLIENT_SECRET=your_client_secret + +# Manual URL Configuration +AUTHORIZE_URL=https://your-provider.com/oauth2/authorize +TOKEN_URL=https://your-provider.com/oauth2/token +REFRESH_TOKEN_URL=https://your-provider.com/oauth2/token +REVOKE_TOKEN_URL=https://your-provider.com/oauth2/revoke + +# OAuth Settings +SCOPE=openid profile email +REDIRECT_URI=http://localhost:8501/oauth2callback + +# Authentication Provider +AUTH_PROVIDER=custom + # ProductsAgent API Configuration PRODUCTS_AGENT_URL=http://localhost:8001 ``` diff --git a/products-web/app.py b/products-web/app.py index 68e0b14..7c0fb34 100644 --- a/products-web/app.py +++ b/products-web/app.py @@ -140,22 +140,43 @@ # Environment variables CLIENT_ID = os.environ.get("CLIENT_ID") CLIENT_SECRET = os.environ.get("CLIENT_SECRET") -TENANT_ID = os.environ.get("TENANT_ID") +TENANT_ID = os.environ.get("TENANT_ID") # For Microsoft Entra ID +KEYCLOAK_SERVER_URL = os.environ.get("KEYCLOAK_SERVER_URL") # For Keycloak +KEYCLOAK_REALM = os.environ.get("KEYCLOAK_REALM") # For Keycloak SCOPE = os.environ.get("SCOPE", "openid profile email User.Read") REDIRECT_URI = os.environ.get("REDIRECT_URI", "http://localhost:8501/oauth2callback") -BASE_URL = os.environ.get("BASE_URL", "https://login.microsoftonline.com") +BASE_URL = os.environ.get("BASE_URL") PRODUCTS_AGENT_URL = os.environ.get("PRODUCTS_AGENT_URL", "http://localhost:8000") - -# Construct OAuth URLs dynamically from base URL and tenant ID -if TENANT_ID and BASE_URL: - # Always construct URLs dynamically - no environment variable overrides - AUTHORIZE_URL = f"{BASE_URL}/{TENANT_ID}/oauth2/v2.0/authorize" - TOKEN_URL = f"{BASE_URL}/{TENANT_ID}/oauth2/v2.0/token" - REFRESH_TOKEN_URL = f"{BASE_URL}/{TENANT_ID}/oauth2/v2.0/token" - # Microsoft Entra ID doesn't have a standard token revocation endpoint - REVOKE_TOKEN_URL = None -else: - AUTHORIZE_URL = TOKEN_URL = REFRESH_TOKEN_URL = REVOKE_TOKEN_URL = None +AUTH_PROVIDER = os.environ.get("AUTH_PROVIDER", "entra_id") # 'entra_id' or 'keycloak' + +# Construct OAuth URLs based on the authentication provider +AUTHORIZE_URL = os.environ.get("AUTHORIZE_URL") +TOKEN_URL = os.environ.get("TOKEN_URL") +REFRESH_TOKEN_URL = os.environ.get("REFRESH_TOKEN_URL") +REVOKE_TOKEN_URL = os.environ.get("REVOKE_TOKEN_URL") + +if not all([AUTHORIZE_URL, TOKEN_URL, REFRESH_TOKEN_URL]): + if AUTH_PROVIDER.lower() == "keycloak" and KEYCLOAK_SERVER_URL and KEYCLOAK_REALM: + # Keycloak URL construction + keycloak_base = f"{KEYCLOAK_SERVER_URL}/realms/{KEYCLOAK_REALM}/protocol/openid-connect" + AUTHORIZE_URL = f"{keycloak_base}/auth" + TOKEN_URL = f"{keycloak_base}/token" + REFRESH_TOKEN_URL = f"{keycloak_base}/token" + REVOKE_TOKEN_URL = f"{keycloak_base}/revoke" + if not BASE_URL: + BASE_URL = KEYCLOAK_SERVER_URL + elif TENANT_ID and (BASE_URL or AUTH_PROVIDER.lower() == "entra_id"): + # Microsoft Entra ID URL construction (default behavior) + base_url = BASE_URL or "https://login.microsoftonline.com" + AUTHORIZE_URL = f"{base_url}/{TENANT_ID}/oauth2/v2.0/authorize" + TOKEN_URL = f"{base_url}/{TENANT_ID}/oauth2/v2.0/token" + REFRESH_TOKEN_URL = f"{base_url}/{TENANT_ID}/oauth2/v2.0/token" + # Microsoft Entra ID doesn't have a standard token revocation endpoint + REVOKE_TOKEN_URL = None + if not BASE_URL: + BASE_URL = base_url + else: + AUTHORIZE_URL = TOKEN_URL = REFRESH_TOKEN_URL = REVOKE_TOKEN_URL = None # Initialize session state for chat if "chat_messages" not in st.session_state: @@ -540,7 +561,8 @@ def main(): # Header with logout button col1, col2 = st.columns([4, 1]) with col1: - st.title("đŸĢ† Secure Agentic Demo: HCP Vault x Bedrock x Entra ID ") + provider_display = "Keycloak" if AUTH_PROVIDER.lower() == "keycloak" else "Entra ID" + st.title(f"đŸĢ† Secure Agentic Demo: HCP Vault x Bedrock x {provider_display}") with col2: if "token" in st.session_state: st.markdown('
', unsafe_allow_html=True) @@ -550,35 +572,102 @@ def main(): st.markdown("---") - # Check configuration + # Check configuration based on authentication provider missing_config = [] if not CLIENT_ID: missing_config.append("CLIENT_ID") if not CLIENT_SECRET: missing_config.append("CLIENT_SECRET") - if not TENANT_ID: - missing_config.append("TENANT_ID") + + if AUTH_PROVIDER.lower() == "keycloak": + if not KEYCLOAK_SERVER_URL: + missing_config.append("KEYCLOAK_SERVER_URL") + if not KEYCLOAK_REALM: + missing_config.append("KEYCLOAK_REALM") + else: # Default to Entra ID + if not TENANT_ID: + missing_config.append("TENANT_ID") if missing_config: st.error(f"Missing required environment variables: {', '.join(missing_config)}") - st.info( - "Please create a .env file based on .env.example and fill in your Microsoft Entra ID configuration." - ) + if AUTH_PROVIDER.lower() == "keycloak": + st.info( + "Please create a .env file based on .env.keycloak.example and fill in your Keycloak configuration." + ) + with st.expander("💡 Keycloak Setup Help", expanded=True): + st.markdown(""" + **Required Configuration:** + - `CLIENT_ID`: Your Keycloak client ID + - `CLIENT_SECRET`: Your Keycloak client secret + - `KEYCLOAK_SERVER_URL`: Your Keycloak server URL (e.g., https://keycloak.yourdomain.com) + - `KEYCLOAK_REALM`: Your Keycloak realm name + + **Quick Setup:** + 1. Copy `.env.keycloak.example` to `.env` + 2. Update with your Keycloak server details + 3. Create a client in your Keycloak realm + 4. Set redirect URI to: `http://localhost:8501/oauth2callback` + + 📖 **See [KEYCLOAK.md](./KEYCLOAK.md) for detailed setup instructions** + """) + else: + st.info( + "Please create a .env file based on .env.example and fill in your Microsoft Entra ID configuration." + ) + with st.expander("💡 Microsoft Entra ID Setup Help", expanded=True): + st.markdown(""" + **Required Configuration:** + - `CLIENT_ID`: Your Azure AD application (client) ID + - `CLIENT_SECRET`: Your Azure AD client secret + - `TENANT_ID`: Your Azure AD directory (tenant) ID + + **Quick Setup:** + 1. Copy `.env.example` to `.env` + 2. Register an application in Azure AD + 3. Add redirect URI: `http://localhost:8501/oauth2callback` + 4. Generate a client secret + 5. Copy the IDs into your `.env` file + """) + st.stop() + + # Validate OAuth URL construction + if not AUTHORIZE_URL or not TOKEN_URL: + st.error("❌ OAuth URL construction failed") + if AUTH_PROVIDER.lower() == "keycloak": + st.error("Could not construct Keycloak OAuth URLs. Please verify:") + st.markdown(""" + - `KEYCLOAK_SERVER_URL` is a valid URL (e.g., https://keycloak.yourdomain.com) + - `KEYCLOAK_REALM` is specified + - URLs should not have trailing slashes + """) + else: + st.error("Could not construct Microsoft Entra ID OAuth URLs. Please verify:") + st.markdown(""" + - `TENANT_ID` is specified + - `BASE_URL` is valid (or use default) + """) st.stop() # Authentication flow if "token" not in st.session_state: st.header("đŸšĒ Authentication Required") - st.write( - "Please authenticate with Microsoft Entra ID to access the ProductsAgent chat." - ) + provider_name = "Keycloak" if AUTH_PROVIDER.lower() == "keycloak" else "Microsoft Entra ID" + st.write(f"Please authenticate with {provider_name} to access the ProductsAgent chat.") with st.expander("â„šī¸ Configuration Details", expanded=False): + st.write(f"**Authentication Provider:** {AUTH_PROVIDER}") st.write(f"**Client ID:** {CLIENT_ID}") - st.write(f"**Tenant ID:** {TENANT_ID}") + if AUTH_PROVIDER.lower() == "keycloak": + st.write(f"**Keycloak Server:** {KEYCLOAK_SERVER_URL}") + st.write(f"**Realm:** {KEYCLOAK_REALM}") + else: + st.write(f"**Tenant ID:** {TENANT_ID}") st.write(f"**Base URL:** {BASE_URL}") st.write(f"**Scopes:** {SCOPE}") st.write(f"**Products API:** {PRODUCTS_AGENT_URL}") + if AUTHORIZE_URL: + st.write(f"**Authorize URL:** {AUTHORIZE_URL}") + st.write(f"**Token URL:** {TOKEN_URL}") # Create OAuth2Component instance oauth2 = OAuth2Component( @@ -591,8 +680,9 @@ def main(): ) # Authorization button + button_text = f"Login with {provider_name}" result = oauth2.authorize_button( - "Login with Microsoft", + button_text, REDIRECT_URI, SCOPE, height=600, diff --git a/products-web/screenshots/keycloak-config-expanded.png b/products-web/screenshots/keycloak-config-expanded.png new file mode 100644 index 0000000000000000000000000000000000000000..72430094e8595a008299e3a518bac0d6a8b60309 GIT binary patch literal 65388 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 literal 0 HcmV?d00001 diff --git a/products-web/screenshots/keycloak-login-page.png b/products-web/screenshots/keycloak-login-page.png new file mode 100644 index 0000000000000000000000000000000000000000..5ed2db0b91cd5413e0b76c7b32c4842f8f5d6b1c GIT binary patch literal 47262 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
  • +wV1|t)*Sx?*`u6s*WP5V%o9%@` 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 literal 0 HcmV?d00001