Azure SignalR Service는 Microsoft Entra 애플리케이션에 대한 요청을 권한 부여하기 위해 Microsoft Entra ID를 지원합니다.
이 문서에서는 Microsoft Entra 애플리케이션을 사용하여 리소스에 대한 요청을 인증하기 위한 리소스와 코드를 설정하는 방법을 설명합니다.
Microsoft Entra ID에 애플리케이션 등록
첫 번째 단계는 Microsoft Entra ID에 애플리케이션을 등록하는 것입니다.
애플리케이션을 등록한 후 애플리케이션 개요 페이지에서 애플리케이션(클라이언트) ID 및 디렉터리(테넌트) ID 값을 찾을 수 있습니다. 이러한 GUID는 다음 단계에서 유용할 수 있습니다.
자격 증명 추가
앱을 등록한 후 인증서, 클라이언트 암호(문자열) 또는 페더레이션된 ID 자격 증명을 기밀 클라이언트 앱 등록에 자격 증명으로 추가할 수 있습니다. 자격 증명을 사용하면 런타임에 사용자와의 상호 작용 없이 애플리케이션이 자체적으로 인증할 수 있으며, 웹 API에 액세스하는 기밀 클라이언트 애플리케이션에서 사용됩니다.
Azure Portal에서 역할 할당 추가
다음 단계에서는 Azure SignalR Service 리소스에 대한 서비스 주체 또는 관리 ID에 SignalR 앱 서버 역할을 할당하는 방법을 설명합니다. 세부 단계에 대해서는 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.
참고
관리 그룹, 구독, 리소스 그룹 또는 단일 리소스를 비롯한 모든 범위에 역할을 할당할 수 있습니다. 범위에 대한 자세한 내용은 Azure RBAC의 범위 이해를 참조하세요.
Azure Portal에서 Azure SignalR Service 리소스로 이동합니다.
사이드바에서 액세스 제어(IAM)를 선택합니다.
추가>역할 할당 추가를 선택합니다.
역할 탭에서 시나리오에 따라 SignalR 앱 서버 또는 기타 SignalR 기본 제공 역할을 선택합니다.
역할 설명 사용 사례 SignalR 앱 서버 서버 연결 만들기 및 키 생성 API에 액세스합니다. 기본 모드에서 실행되는 Azure SignalR 리소스가 있는 앱 서버에서 가장 일반적으로 사용됩니다. SignalR Service 소유자 REST API, 서버 연결 만들기, 키/토큰 생성 API를 포함한 모든 데이터 평면 API에 대한 모든 권한이 있습니다. Azure SignalR 리소스가 있는 협상 서버의 경우 REST API 권한과 인증 API 권한이 모두 필요하므로 서버리스 모드에서 실행됩니다. SignalR REST API 소유자 데이터 평면 REST API에 대한 모든 액세스 권한. Azure SignalR Management SDK를 사용하여 연결 및 그룹을 관리하지만 서버 연결을 만들거나 협상 요청을 처리하지 않습니다. SignalR REST API 읽기 권한자 데이터 평면 REST API에 대한 읽기 전용 액세스. 읽기 전용 REST API를 호출하는 모니터링 도구를 작성할 때 사용합니다. 다음을 선택합니다.
Microsoft Entra 애플리케이션용.
Assign access
행에서 사용자, 그룹 또는 서비스 주체를 선택합니다.Members
행에서select members
를 클릭한 다음 팝업 창에서 ID를 선택합니다.
Azure 리소스에 대한 관리 ID의 경우
Assign access
행에서 관리 ID를 선택합니다.Members
행에서select members
를 클릭한 다음 팝업 창에서 애플리케이션을 선택합니다.
다음을 선택합니다.
할당을 검토한 다음 검토 + 할당을 클릭하여 역할 할당을 확인합니다.
중요
새로 추가된 역할 할당이 전파되는 데 최대 30분이 걸릴 수 있습니다.
Azure 역할을 할당하고 관리하는 방법에 대해 자세히 알아보려면 다음 문서를 참조하세요.
- Azure Portal을 사용하여 Azure 역할 할당
- REST API를 사용하여 Azure 역할 할당
- Azure PowerShell을 사용하여 Azure 역할 할당
- Azure CLI를 사용하여 Azure 역할 할당
- Azure Resource Manager 템플릿을 사용하여 Azure 역할 할당
C#용 Microsoft.Azure.SignalR 앱 서버 SDK 구성
Azure SignalR 서버 SDK는 Azure.Identity 라이브러리를 활용하여 리소스에 연결하기 위한 토큰을 생성합니다. 자세한 사용법을 알아보려면 클릭합니다.
참고
테넌트 ID는 SignalR 리소스가 있는 테넌트의 테넌트 ID와 일치해야 합니다.
인증서와 함께 Microsoft Entra 애플리케이션 사용
services.AddSignalR().AddAzureSignalR(option =>
{
var credential = new ClientCertificateCredential("tenantId", "clientId", "path-to-cert");
option.Endpoints = [
new ServiceEndpoint(new Uri(), "https://<resource>.service.signalr.net"), credential);
];
});
클라이언트 암호를 통해 Microsoft Entra 애플리케이션 사용
services.AddSignalR().AddAzureSignalR(option =>
{
var credential = new ClientSecretCredential("tenantId", "clientId", "clientSecret");
option.Endpoints = [
new ServiceEndpoint(new Uri(), "https://<resource>.service.signalr.net"), credential);
];
});
페더레이션된 ID를 통해 Microsoft Entra 애플리케이션 사용
조직에서 클라이언트 암호/인증서 사용을 사용하지 않도록 설정한 경우 인증을 위해 관리 ID를 신뢰하도록 애플리케이션을 구성할 수 있습니다.
자세한 내용은 관리 ID를 신뢰하도록 애플리케이션 구성(미리 보기)을 참조하세요.
참고
관리 ID를 신뢰하도록 애플리케이션을 구성하는 것은 미리 보기 기능입니다.
services.AddSignalR().AddAzureSignalR(option =>
{
var msiCredential = new ManagedIdentityCredential("msiClientId");
var credential = new ClientAssertionCredential("tenantId", "appClientId", async (ctoken) =>
{
// Entra ID US Government: api://AzureADTokenExchangeUSGov
// Entra ID China operated by 21Vianet: api://AzureADTokenExchangeChina
var request = new TokenRequestContext([$"api://AzureADTokenExchange/.default"]);
var response = await msiCredential.GetTokenAsync(request, ctoken).ConfigureAwait(false);
return response.Token;
});
option.Endpoints = [
new ServiceEndpoint(new Uri(), "https://<resource>.service.signalr.net"), credential);
];
});
이 자격 증명은 사용자가 할당한 관리 ID를 사용하여 clientAssertion
을 생성하고 이를 사용하여 인증을 위해 clientToken
과 교환합니다.
appClientId
및 tenantId
는 SignalR 리소스의 테넌트에서 프로비전한 엔터프라이즈 애플리케이션이어야 합니다.
여러 엔드포인트 사용
자격 증명은 엔드포인트마다 다를 수 있습니다.
이 샘플에서 Azure SignalR SDK는 클라이언트 암호를 사용하여 resource1
에 연결하고 인증서를 사용하여 resource2
에 연결합니다.
services.AddSignalR().AddAzureSignalR(option =>
{
var credential1 = new ClientSecretCredential("tenantId", "clientId", "clientSecret");
var credential2 = new ClientCertificateCredential("tenantId", "clientId", "path-to-cert");
option.Endpoints = new ServiceEndpoint[]
{
new ServiceEndpoint(new Uri("https://<resource1>.service.signalr.net"), credential1),
new ServiceEndpoint(new Uri("https://<resource2>.service.signalr.net"), credential2),
};
});
이 샘플 링크에서 보다 많은 샘플을 찾을 수 있습니다.
Azure Functions의 Azure SignalR Service 바인딩
Azure Functions의 Azure SignalR Service 바인딩은 포털의 애플리케이션 설정 또는 로컬로 local.settings.json을 사용하여 Azure SignalR Service 리소스에 액세스하도록 Microsoft Entra 애플리케이션 ID를 구성합니다.
먼저 Azure SignalR Service의 서비스 URI를 지정해야 합니다. 서비스 URI의 키는 serviceUri
입니다. 연결 이름 접두사(기본값은 AzureSignalRConnectionString
)와 구분 기호로 시작됩니다. 구분 기호는 Azure Portal에서는 밑줄(__
)이고, local.settings.json 파일에서는 콜론(:
)입니다. 바인딩 속성 ConnectionStringSetting
을 사용하여 연결 이름을 사용자 지정할 수 있습니다. 계속 읽어 샘플을 찾습니다.
그런 다음 미리 정의된 환경 변수 또는 SignalR 지정 변수에서 Microsoft Entra 애플리케이션 ID를 구성할지 여부를 선택합니다.
미리 정의된 환경 변수에서 ID 구성
미리 정의된 환경 변수 목록은 환경 변수를 참조하세요. 여러 서비스가 있는 경우 서비스별로 ID를 구성할 필요가 없도록 동일한 애플리케이션 ID를 사용하는 것이 좋습니다. 다른 서비스에서도 해당 서비스의 설정에 따라 이러한 환경 변수를 사용할 수 있습니다.
예를 들어, 클라이언트 암호 자격 증명을 사용하려면 local.settings.json 파일에서 다음과 같이 ID를 구성합니다.
{
"Values": {
"<CONNECTION_NAME_PREFIX>:serviceUri": "https://<SIGNALR_RESOURCE_NAME>.service.signalr.net",
"AZURE_CLIENT_ID": "...",
"AZURE_CLIENT_SECRET": "...",
"AZURE_TENANT_ID": "..."
}
}
Azure Portal에서 다음과 같이 설정을 추가합니다.
<CONNECTION_NAME_PREFIX>__serviceUri=https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
AZURE_CLIENT_ID = ...
AZURE_TENANT_ID = ...
AZURE_CLIENT_SECRET = ...
SignalR 지정 변수에서 ID 구성
SignalR 지정 변수는 serviceUri
키와 동일한 키 접두사를 공유합니다. 사용할 수 있는 변수 목록은 다음과 같습니다.
clientId
clientSecret
tenantId
다음은 local.settings.json 파일에서 클라이언트 암호 자격 증명을 사용하기 위한 샘플입니다.
{
"Values": {
"<CONNECTION_NAME_PREFIX>:serviceUri": "https://<SIGNALR_RESOURCE_NAME>.service.signalr.net",
"<CONNECTION_NAME_PREFIX>:clientId": "...",
"<CONNECTION_NAME_PREFIX>:clientSecret": "...",
"<CONNECTION_NAME_PREFIX>:tenantId": "..."
}
}
Azure Portal에서 다음과 같이 설정을 추가합니다.
<CONNECTION_NAME_PREFIX>__serviceUri = https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
<CONNECTION_NAME_PREFIX>__clientId = ...
<CONNECTION_NAME_PREFIX>__clientSecret = ...
<CONNECTION_NAME_PREFIX>__tenantId = ...
다음 단계
다음 관련 문서를 참조하세요.