first commit
Security: Sync from Public / sync-from-public (push) Has been cancelled
Test: Benchmark Nightly / build (push) Has been cancelled
Test: Benchmark Nightly / Notify Cats on failure (push) Has been cancelled
CI: Python / Checks (push) Has been cancelled
Test: Evals Python / Workflow Comparison Python (push) Has been cancelled
Util: Check Docs URLs / check-docs-urls (push) Has been cancelled
Test: Visual Storybook / Cloudflare Pages (push) Has been cancelled
Test: E2E Performance / build-and-test-performance (push) Has been cancelled
Test: Workflows Nightly / Run Workflow Tests (push) Has been cancelled
Util: Cleanup CI Docker Images / Delete stale CI images (push) Has been cancelled
Test: Benchmark Destroy Env / build (push) Has been cancelled
Util: Update Node Popularity / update-popularity (push) Has been cancelled
Test: E2E Coverage Weekly / Coverage Tests (push) Has been cancelled
Security: Sync from Public / sync-from-public (push) Has been cancelled
Test: Benchmark Nightly / build (push) Has been cancelled
Test: Benchmark Nightly / Notify Cats on failure (push) Has been cancelled
CI: Python / Checks (push) Has been cancelled
Test: Evals Python / Workflow Comparison Python (push) Has been cancelled
Util: Check Docs URLs / check-docs-urls (push) Has been cancelled
Test: Visual Storybook / Cloudflare Pages (push) Has been cancelled
Test: E2E Performance / build-and-test-performance (push) Has been cancelled
Test: Workflows Nightly / Run Workflow Tests (push) Has been cancelled
Util: Cleanup CI Docker Images / Delete stale CI images (push) Has been cancelled
Test: Benchmark Destroy Env / build (push) Has been cancelled
Util: Update Node Popularity / update-popularity (push) Has been cancelled
Test: E2E Coverage Weekly / Coverage Tests (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
import { getBearerTokenProvider } from '@azure/identity';
|
||||
import { NodeOperationError, type ISupplyDataFunctions } from 'n8n-workflow';
|
||||
|
||||
import { N8nOAuth2TokenCredential } from './N8nOAuth2TokenCredential';
|
||||
import type {
|
||||
AzureEntraCognitiveServicesOAuth2ApiCredential,
|
||||
AzureOpenAIOAuth2ModelConfig,
|
||||
} from '../types';
|
||||
|
||||
const AZURE_OPENAI_SCOPE = 'https://cognitiveservices.azure.com/.default';
|
||||
/**
|
||||
* Creates Entra ID (OAuth2) authentication for Azure OpenAI
|
||||
*/
|
||||
export async function setupOAuth2Authentication(
|
||||
this: ISupplyDataFunctions,
|
||||
credentialName: string,
|
||||
): Promise<AzureOpenAIOAuth2ModelConfig> {
|
||||
try {
|
||||
const credential =
|
||||
await this.getCredentials<AzureEntraCognitiveServicesOAuth2ApiCredential>(credentialName);
|
||||
// Create a TokenCredential
|
||||
const entraTokenCredential = new N8nOAuth2TokenCredential(this.getNode(), credential);
|
||||
const deploymentDetails = await entraTokenCredential.getDeploymentDetails();
|
||||
|
||||
// Use getBearerTokenProvider to create the function LangChain expects
|
||||
// Pass the required scope for Azure Cognitive Services
|
||||
const azureADTokenProvider = getBearerTokenProvider(entraTokenCredential, AZURE_OPENAI_SCOPE);
|
||||
|
||||
this.logger.debug('Successfully created Azure AD Token Provider.');
|
||||
|
||||
return {
|
||||
azureADTokenProvider,
|
||||
azureOpenAIApiInstanceName: deploymentDetails.resourceName,
|
||||
azureOpenAIApiVersion: deploymentDetails.apiVersion,
|
||||
azureOpenAIEndpoint: deploymentDetails.endpoint,
|
||||
};
|
||||
} catch (error) {
|
||||
this.logger.error(`Error setting up Entra ID authentication: ${error.message}`, error);
|
||||
|
||||
throw new NodeOperationError(
|
||||
this.getNode(),
|
||||
`Error setting up Entra ID authentication: ${error.message}`,
|
||||
error,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user