다음을 통해 공유


Azure ID 라이브러리를 사용하여 Azure 서비스에 JavaScript 앱을 인증하는 방법

애플리케이션이 스토리지, Key Vault 또는 Cognitive Services와 같은 Azure 리소스에 액세스해야 하는 경우 애플리케이션을 Azure에 인증해야 합니다. 이는 Azure에 배포되거나, 온-프레미스에 배포되거나, 로컬 개발자 워크스테이션에서 개발 중인 모든 애플리케이션에 적용됩니다. 이 문서에서는 JavaScript용 Azure SDK를 사용할 때 Azure에 앱을 인증하는 데 권장되는 방법을 설명합니다.

앱이 Azure 리소스에 인증할 때 연결 문자열이나 키가 아닌 토큰 기반 인증사용하도록 하는 것이 좋습니다. Azure ID 라이브러리는 토큰 기반 인증을 제공하며 앱이 로컬 개발 중이든, Azure에 배포되거나, 온-프레미스 서버에 배포되는지 여부에 관계없이 Azure 리소스에 원활하게 인증할 수 있도록 합니다.

앱이 Azure 리소스에 인증하는 데 사용해야 하는 특정 유형의 토큰 기반 인증은 앱이 실행되는 위치에 따라 달라지고 다음 다이어그램에 표시됩니다.

환경 인증
로컬 개발자가 로컬 개발 중에 앱을 실행하는 경우 - 앱은 로컬 개발을 위해 애플리케이션 서비스 주체를 사용하거나 개발자의 Azure 자격 증명을 사용하여 Azure에 인증할 수 있습니다. 이러한 각 옵션은 로컬 개발동안 인증 섹션에서 자세히 설명합니다.
Azure 앱이 Azure에서 호스트되는 경우 - 앱은 관리 ID를 사용하여 Azure 리소스에 인증해야 합니다. 이 옵션은 아래의 섹션 서버 환경의 인증에서 더 자세히 논의됩니다.
온-프레미스 앱이 온-프레미스에서 호스트되고 배포되는 경우 - 앱은 애플리케이션 서비스 주체를 사용하여 Azure 리소스에 인증해야 합니다. 이 옵션은서버 환경의 인증에 섹션에서 아래에 자세히 설명되어 있습니다.

앱이 실행되는 위치에 따라 앱에 권장되는 토큰 기반 인증 전략을 보여 주는 다이어그램입니다.

토큰 기반 인증의 장점

Azure용 앱을 빌드할 때 비밀(연결 문자열 또는 키)에 대해 토큰 기반 인증을 사용하는 것이 좋습니다. 토큰 기반 인증은 DefaultAzureCredential함께 제공됩니다.

토큰 기반 인증 비밀(연결 문자열 및 키)
최소 권한원칙은 Azure 리소스에서 앱에 필요한 특정 권한을 설정합니다. 연결 문자열 또는 키는 Azure 리소스에 대한 모든 권한을 부여합니다.
저장할 애플리케이션 비밀이 없습니다. 앱 설정 또는 환경 변수에 비밀을 저장하고 회전해야 합니다.
Azure ID 라이브러리는 백그라운드에서 토큰을 관리합니다. 이렇게 하면 토큰 기반 인증을 연결 문자열로 사용하기 쉽습니다. 비밀은 관리되지 않습니다.

연결 문자열의 사용은 프로덕션 또는 중요한 데이터에 액세스하지 않는 초기 개념 증명 앱 또는 개발 프로토타입으로 제한되어야 합니다. 그렇지 않으면 Azure 리소스에 인증할 때 Azure ID 라이브러리에서 사용할 수 있는 토큰 기반 인증 클래스를 항상 선호해야 합니다.

다음 라이브러리를 사용합니다.

DefaultAzureCredential

Azure ID 라이브러리에서 제공하는 DefaultAzureCredential 클래스를 사용하면 앱이 실행되는 환경에 따라 다른 인증 방법을 사용할 수 있습니다. 이 동작을 사용하면 코드를 변경하지 않고 로컬 개발에서 테스트 환경으로 앱을 승격할 수 있습니다. 각 환경에 대해 적절한 인증 방법을 구성하면 DefaultAzureCredential 자동으로 해당 인증 방법을 검색하고 사용합니다. 다른 환경에서 다양한 인증 방법을 사용하는 경우, 조건부 논리나 기능 플래그를 직접 코딩하기보다 DefaultAzureCredential 사용을 선호해야 합니다.

DefaultAzureCredential 사용에 대한 자세한 내용은 에서 다룹니다. 애플리케이션에서 DefaultAzureCredential를 사용하세요.

서버 환경에서 인증

서버 환경에서 호스팅할 때 각 애플리케이션에는 환경당 고유한 애플리케이션 ID 할당되어야 합니다. Azure에서 앱 ID는 서비스 주체로 표현되며, 이는 Azure에 앱을 식별하고 인증하기 위한 특수한 유형의 보안 주체입니다. 앱에 사용할 서비스 주체 유형은 앱이 실행되는 위치에 따라 달라집니다.

로컬 개발 중 인증

로컬 개발 중에 개발자의 워크스테이션에서 애플리케이션을 실행하는 경우 로컬 환경은 여전히 앱에서 사용하는 모든 Azure 서비스에 인증해야 합니다.

애플리케이션에서 DefaultAzureCredential 사용

DefaultAzureCredential는 Microsoft Entra ID에 인증하기 위한 의견이 반영된 순서가 지정된 메커니즘 시퀀스입니다. 각 인증 메커니즘은 TokenCredential 클래스에서 파생된 클래스이며 자격 증명알려져 있습니다. 런타임에 DefaultAzureCredential 첫 번째 자격 증명을 사용하여 인증을 시도합니다. 해당 자격 증명이 액세스 토큰을 획득하지 못하면 액세스 토큰을 성공적으로 가져올 때까지 시퀀스의 다음 자격 증명이 시도됩니다. 이러한 방식으로 앱은 환경별 코드를 작성하지 않고도 다양한 환경에서 다른 자격 증명을 사용할 수 있습니다.

DefaultAzureCredential을 사용하려면 애플리케이션에 @azure/identity 패키지를 추가하십시오.

npm install @azure/identity

그런 다음, 다음 코드 샘플DefaultAzureCredential 개체를 인스턴스화하고 Azure SDK 서비스 클라이언트 클래스(이 경우 Azure Blob Storage에 액세스하는 데 사용되는 BlobServiceClient)와 함께 사용하는 방법을 보여 줍니다.

import { BlobServiceClient } from '@azure/storage-blob';
import { DefaultAzureCredential } from '@azure/identity';
import 'dotenv/config';

const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
if (!accountName) throw Error('Azure Storage accountName not found');

const blobServiceClient = new BlobServiceClient(
  `https://${accountName}.blob.core.windows.net`,
  new DefaultAzureCredential()
);

DefaultAzureCredential 앱에 대해 구성된 인증 메커니즘을 자동으로 검색하고 Azure에 앱을 인증하는 데 필요한 토큰을 가져옵니다. 애플리케이션에서 둘 이상의 SDK 클라이언트를 사용하는 경우 각 SDK 클라이언트 개체와 동일한 자격 증명 개체를 사용할 수 있습니다.