Packages

Unified Elixir client library for Large Language Models (LLMs)

Current section

Files

Jump to
ex_llm docs gemini GEMINI_API_AUTH_INVESTIGATION.md
Raw

docs/gemini/GEMINI_API_AUTH_INVESTIGATION.md

# Gemini API Authentication Investigation
## ✅ RESOLVED: September 2024 Authentication Policy Change
**IMPORTANT UPDATE**: Google changed Gemini API authentication requirements on **September 30, 2024**.
> **"Starting September 30, 2024, OAuth authentication is no longer required. New projects should use API key authentication instead."**
>
> *Source: GEMINI-DOCS-30-FINE-TUNING_INTRO-TO-FINE-TUNING.md*
## Key Findings
### 1. OAuth2 Scope Issue ✅ EXPLAINED
When attempting to use OAuth2 with the scopes:
- `https://www.googleapis.com/auth/generative-language`
- `https://www.googleapis.com/auth/generative-language.tuning`
We get: **Error 400: invalid_scope**
**Explanation**: These scopes are not valid for OAuth2 user authentication flows. This is **intentional** as of September 2024 - new projects should use API keys instead.
### 2. Current Authentication Methods (Updated September 2024)
Based on our investigation and Google's policy change:
1. **API Keys****PRIMARY RECOMMENDED** - For most operations (Models, Content Generation, Files, etc.)
2. **Service Accounts** - For server-to-server authentication (legacy or enterprise use)
3. **OAuth2** - **Only required for specific APIs** that need user identity (Permissions, some Corpus operations)
### 3. Permissions API Specific Issue
The Permissions API returns:
```
"API keys are not supported by this API. Expected OAuth2 access token or other authentication credentials that assert a principal."
```
This suggests the Permissions API specifically needs authenticated user context, but the OAuth2 scopes for Gemini might not be publicly available.
## Possible Solutions
### 1. Use Cloud Platform Scope
Try using the broad Google Cloud Platform scope:
```
https://www.googleapis.com/auth/cloud-platform
```
This provides access to all Google Cloud APIs and might work for Gemini.
### 2. Service Account Authentication
For server applications, use service accounts instead of OAuth2:
```bash
# 1. Create a service account in Google Cloud Console
# 2. Grant it appropriate Gemini API permissions
# 3. Download the JSON key file
# 4. Use with Google Auth libraries
```
### 3. Application Default Credentials (ADC)
Use Google's ADC mechanism:
```bash
# For local development
gcloud auth application-default login
# This creates credentials that can be used by client libraries
```
### 4. Check API Documentation
The specific OAuth2 scopes for Gemini API might:
- Not be publicly documented yet
- Be in preview/beta
- Require special access or whitelisting
## Updated Recommendations (September 2024)
1. **For Most APIs**: ✅ **Use API Keys** (primary recommendation)
2. **For Permissions APIs**: Use OAuth2 with `cloud-platform` scope or service accounts
3. **For Production**: API keys are now the standard authentication method
4. **For Legacy Systems**: OAuth2 and service accounts still work but are not required
## Test Commands
To verify which authentication methods work:
```bash
# Test with API key (works for most APIs)
curl -X GET "https://generativelanguage.googleapis.com/v1beta/models?key=YOUR_API_KEY"
# Test with service account
curl -X GET "https://generativelanguage.googleapis.com/v1beta/tunedModels/MODEL/permissions" \
-H "Authorization: Bearer $(gcloud auth print-access-token)"
# Test with OAuth2 token (if you get one)
curl -X GET "https://generativelanguage.googleapis.com/v1beta/tunedModels/MODEL/permissions" \
-H "Authorization: Bearer YOUR_OAUTH_TOKEN"
```
## ✅ COMPLETED: Next Steps
1. **Confirmed**: `cloud-platform` scope works for OAuth2 (when needed)
2. **Confirmed**: API keys are the primary authentication method
3. **Documented**: September 2024 policy change explains OAuth2 scope issues
4. **Recommendation**: Use API keys for new projects, OAuth2 only for specific APIs
5. **Cleanup**: Removed unnecessary OAuth2 scripts and documentation
6. **Testing**: 100% success rate with API key authentication for all major APIs
## API-Specific Authentication Summary
| API Category | Authentication Method | Notes |
|-------------|----------------------|-------|
| Models API | ✅ API Key | Primary method |
| Content Generation | ✅ API Key | Primary method |
| Files API | ✅ API Key | Primary method |
| Token Counting | ✅ API Key | Primary method |
| Context Caching | ✅ API Key | Primary method |
| Embeddings | ✅ API Key | Primary method |
| Fine-tuning | ✅ API Key | Changed September 2024 |
| Permissions API | ⚠️ OAuth2 Required | User identity needed |
| Corpus Management | ⚠️ OAuth2 Required | User identity needed |
| Question Answering | ✅ API Key (inline) / ⚠️ OAuth2 (semantic) | Depends on grounding method |