OpenAI-DotNet-Proxy
A simple Proxy API gateway for OpenAI-DotNet to make authenticated requests from a front end application without exposing your API keys.
Getting started
Install from NuGet
Install package OpenAI-DotNet-Proxy from Nuget.  Here's how via command line:
Install-Package OpenAI-DotNet-Proxy
Documentation
Using either the OpenAI-DotNet or com.openai.unity packages directly in your front-end app may expose your API keys and other sensitive information. To mitigate this risk, it is recommended to set up an intermediate API that makes requests to OpenAI on behalf of your front-end app. This library can be utilized for both front-end and intermediary host configurations, ensuring secure communication with the OpenAI API.
Front End Example
In the front end example, you will need to securely authenticate your users using your preferred OAuth provider. Once the user is authenticated, exchange your custom auth token with your API key on the backend.
Follow these steps:
- Setup a new project using either the OpenAI-DotNet or com.openai.unity packages.
 - Authenticate users with your OAuth provider.
 - After successful authentication, create a new 
OpenAIAuthenticationobject and pass in the custom token with the prefixsess-. - Create a new 
OpenAISettingsobject and specify the domain where your intermediate API is located. - Pass your new 
authandsettingsobjects to theOpenAIClientconstructor when you create the client instance. 
Here's an example of how to set up the front end:
var authToken = await LoginAsync();
var auth = new OpenAIAuthentication($"sess-{authToken}");
var settings = new OpenAISettings(domain: "api.your-custom-domain.com");
var api = new OpenAIClient(auth, settings);
This setup allows your front end application to securely communicate with your backend that will be using the OpenAI-DotNet-Proxy, which then forwards requests to the OpenAI API. This ensures that your OpenAI API keys and other sensitive information remain secure throughout the process.
Back End Example
In this example, we demonstrate how to set up and use OpenAIProxy in a new ASP.NET Core web app. The proxy server will handle authentication and forward requests to the OpenAI API, ensuring that your API keys and other sensitive information remain secure.
- Create a new ASP.NET Core minimal web API project.
 - Add the OpenAI-DotNet nuget package to your project.
- Powershell install: 
Install-Package OpenAI-DotNet-Proxy - Dotnet install: 
dotnet add package OpenAI-DotNet-Proxy - Manually editing .csproj: 
<PackageReference Include="OpenAI-DotNet-Proxy" /> 
 - Powershell install: 
 - Create a new class that inherits from 
AbstractAuthenticationFilterand override theValidateAuthenticationmethod. This will implement theIAuthenticationFilterthat you will use to check user session token against your internal server. - In 
Program.cs, create a new proxy web application by callingOpenAIProxy.CreateWebApplicationmethod, passing your customAuthenticationFilteras a type argument. - Create 
OpenAIAuthenticationandOpenAISettingsas you would normally with your API keys, org id, or Azure settings. 
public partial class Program
{
    private class AuthenticationFilter : AbstractAuthenticationFilter
    {
        public override async Task ValidateAuthenticationAsync(IHeaderDictionary request)
        {
            await Task.CompletedTask; // remote resource call to verify token
            // You will need to implement your own class to properly test
            // custom issued tokens you've setup for your end users.
            if (!request.Authorization.ToString().Contains(TestUserToken))
            {
                throw new AuthenticationException("User is not authorized");
            }
        }
    }
    public static void Main(string[] args)
    {
        var auth = OpenAIAuthentication.LoadFromEnvironment();
        var settings = new OpenAISettings(/* your custom settings if using Azure OpenAI */);
        using var openAIClient = new OpenAIClient(auth, settings);
        OpenAIProxy.CreateWebApplication<AuthenticationFilter>(args, openAIClient).Run();
    }
}
Once you have set up your proxy server, your end users can now make authenticated requests to your proxy api instead of directly to the OpenAI API. The proxy server will handle authentication and forward requests to the OpenAI API, ensuring that your API keys and other sensitive information remain secure.