<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Prasoon Sharma</title>
    <description>The latest articles on DEV Community by Prasoon Sharma (@parthtiw710).</description>
    <link>https://dev.to/parthtiw710</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3993618%2Ff88daaa4-404f-4299-af7a-c3a05869f6a2.png</url>
      <title>DEV Community: Prasoon Sharma</title>
      <link>https://dev.to/parthtiw710</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/parthtiw710"/>
    <language>en</language>
    <item>
      <title>Introducing EAP: The Production-Ready Zero-Config Auth Proxy with Cloud IAM &amp; Rate Limiting</title>
      <dc:creator>Prasoon Sharma</dc:creator>
      <pubDate>Sat, 20 Jun 2026 06:35:07 +0000</pubDate>
      <link>https://dev.to/parthtiw710/introducing-eap-the-production-ready-zero-config-auth-proxy-with-cloud-iam-rate-limiting-1l1b</link>
      <guid>https://dev.to/parthtiw710/introducing-eap-the-production-ready-zero-config-auth-proxy-with-cloud-iam-rate-limiting-1l1b</guid>
      <description>&lt;p&gt;Securing web endpoints and service-to-service communication is notoriously complex. You often find yourself wrapping services with complex setups like &lt;code&gt;oauth2-proxy&lt;/code&gt;, writing custom token exchangers, or writing redundant authentication logic across different service repositories.&lt;/p&gt;

&lt;p&gt;To solve this, I built &lt;strong&gt;EAP&lt;/strong&gt;—a lightweight, zero-config authentication proxy designed to handle modern, multi-cloud enterprise authentication out of the box.&lt;/p&gt;

&lt;p&gt;With EAP, you can secure any backend service without writing a single line of auth code. Just run the Docker container, specify your environment variables, and get robust Google OAuth (U2S), JWT verification (S2S), Cloud Identity integration, and built-in rate limiting immediately.&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 Key Features of EAP
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;🔒 Double Authentication Modes:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;User-to-Server (U2S):&lt;/strong&gt; Secure browser access using &lt;strong&gt;Google OAuth&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Server-to-Server (S2S):&lt;/strong&gt; Validate server calls via &lt;strong&gt;JWT&lt;/strong&gt; with custom key signature support (RSA).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;👥 Domain &amp;amp; Email Whitelisting:&lt;/strong&gt; Restrict user login access to specific domains or specific emails via &lt;code&gt;ALLOWED_EMAILS&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;☁️ Native Cloud Provider Integrations:&lt;/strong&gt; Built-in hooks for cloud-specific authentication patterns:

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;GCP&lt;/strong&gt; (&lt;code&gt;GCP_ONLY&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;AWS Cognito&lt;/strong&gt; (&lt;code&gt;AWS_ONLY&lt;/code&gt;, token exchange configs)&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Azure AD&lt;/strong&gt; (&lt;code&gt;AZURE_ONLY&lt;/code&gt;, target resource mapping)&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Kubernetes&lt;/strong&gt; (&lt;code&gt;KUBERNETES_ONLY&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;⚡ Built-in Rate Limiting:&lt;/strong&gt; Prevent DDoS attacks and abuse with fine-grained rate limiting for both standard users and server-to-server connections.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 Quick Start (Get running in 1 minute)
&lt;/h2&gt;

&lt;p&gt;Deploying EAP is as simple as running a single command. &lt;/p&gt;

&lt;p&gt;Here is the complete configuration to launch EAP in front of your upstream backend:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:8080 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8080 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;TARGET_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"https://your-backend-service.com"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;JWT_SECRET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-jwt-signing-secret-key"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;GOOGLE_CLIENT_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-google-client-id"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;GOOGLE_CLIENT_SECRET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-google-client-secret"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;GOOGLE_REDIRECT_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"https://your-domain.com/auth/callback"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;ALLOWED_EMAILS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"user@gmail.com,@yourcompany.com"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;RSA_PRIVATE_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"-----BEGIN RSA PRIVATE KEY-----&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;-----END RSA PRIVATE KEY-----"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;GCP_ONLY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;AWS_ONLY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;AWS_COGNITO_TOKEN_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"https://your-cognito-domain.auth.us-east-1.amazoncognito.com/oauth2/token"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;AWS_CLIENT_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-cognito-client-id"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;AWS_CLIENT_SECRET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-cognito-client-secret"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;AZURE_ONLY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;AZURE_TARGET_RESOURCE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"https://database.windows.net/"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;KUBERNETES_ONLY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;RATE_LIMIT_PER_SEC&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3.0 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;RATE_BURST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;5.0 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;S2S_RATE_LIMIT_PER_SEC&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;30.0 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;S2S_RATE_BURST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;100.0 &lt;span class="se"&gt;\&lt;/span&gt;
  parth14854tiwari/eap:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔍 How it Works Under the Hood
&lt;/h2&gt;

&lt;p&gt;EAP acts as a reverse proxy sitting directly in front of your target API (&lt;code&gt;TARGET_URL&lt;/code&gt;). &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;User Visits Service:&lt;/strong&gt; If a user visits the URL via a browser, EAP checks for authentication. If unauthenticated, it initiates a Google OAuth flow. Upon successful authentication, it verifies their email against &lt;code&gt;ALLOWED_EMAILS&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Service-to-Service Requests:&lt;/strong&gt; When another backend calls your API, EAP intercepts the call, validates the JWT Bearer token using the &lt;code&gt;JWT_SECRET&lt;/code&gt; (or &lt;code&gt;RSA_PRIVATE_KEY&lt;/code&gt; if configured), and enforces rate-limiting boundaries.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Upstream Forwarding:&lt;/strong&gt; Validated requests are passed through cleanly to &lt;code&gt;TARGET_URL&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🤝 Open Source &amp;amp; Contributing
&lt;/h2&gt;

&lt;p&gt;EAP is open-source and ready for production testing. We would love to hear your feedback, issues, and feature requests.&lt;/p&gt;

&lt;p&gt;If you find EAP useful, please:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Star the repository 🌟&lt;/strong&gt; on &lt;a href="https://github.com/Parthtiw710/eap" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Open issues&lt;/strong&gt; for bugs, features, or ideas.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Submit PRs&lt;/strong&gt; to help us add support for additional OAuth providers (like GitHub or GitLab)!&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opensource</category>
      <category>security</category>
      <category>go</category>
      <category>docker</category>
    </item>
  </channel>
</rss>
