APNS에 대한 토큰 기반(HTTP/2) 인증

개요

이 문서에서는 토큰 기반 인증과 함께 새 APNS HTTP/2 프로토콜을 사용하는 방법을 설명합니다.

새 프로토콜 사용의 주요 이점은 다음과 같습니다.

  • 토큰 생성은 비교적 간단합니다(인증서에 비해).
  • 만료 날짜가 없습니다. 인증 토큰과 해당 해지를 제어할 수 있습니다.
  • 이제 페이로드는 최대 4KB일 수 있습니다.
  • 동기 피드백
  • Apple의 최신 프로토콜을 사용하고 있습니다. 인증서는 여전히 사용 중단으로 표시된 이진 프로토콜을 사용합니다.

이 새 메커니즘을 사용하는 작업은 다음 두 단계로 수행할 수 있습니다.

  • Apple 개발자 계정 포털에서 필요한 정보를 가져옵니다.
  • 새 정보를 사용하여 알림 허브를 구성합니다.

이제 Notification Hubs가 APNS에서 새 인증 시스템을 사용하도록 설정되었습니다.

APNS에 인증서 자격 증명을 사용하여 마이그레이션한 경우 토큰 속성은 시스템에서 인증서를 덮어쓰지만 애플리케이션은 계속해서 원활하게 알림을 받습니다.

Apple에서 인증 정보 가져오기

토큰 기반 인증을 사용하려면 Apple 개발자 계정에서 다음 속성을 가져와야 합니다.

키 식별자

Apple 개발자 계정의 Certificates, Identifiers & Profiles(인증서, 식별자 및 프로파일)Keys(키) 페이지에서 키 식별자를 가져올 수 있습니다.

Certificates

Identifiers

애플리케이션 식별자 및 애플리케이션 이름

애플리케이션 이름 및 식별자는 개발자 계정의 인증서, 식별자 및 프로필 페이지에서도 사용할 수 있습니다.

Certificates and IDs

.NET SDK 또는 Azure Portal을 통해 구성

최신 클라이언트 SDK를 사용하거나 Azure Portal에서 토큰 기반 인증을 사용하도록 허브를 구성할 수 있습니다. 포털에서 토큰 기반 인증을 사용하도록 설정하려면 Azure Portal에 로그인한 다음, 알림 허브의 설정 > Apple(APNS) 패널로 이동합니다. 인증 모드 속성에서 토큰선택하여 모든 관련 토큰 속성으로 허브를 업데이트합니다.

Configure token

  • Apple 개발자 계정에서 검색한 속성을 입력합니다.
  • 애플리케이션 모드(프로덕션 또는 샌드박스)를 선택합니다.
  • 저장 단추를 클릭하여 APNS 자격 증명을 업데이트합니다.

토큰 기반 자격 증명은 다음 필드로 구성됩니다.

  • 키 ID: Apple 개발자 포털에서 생성된 프라이빗 키의 식별자입니다. 예를 들면 2USFGKSKLT입니다.
  • 팀 ID: “접두사” 또는 “앱 접두사”라고도 합니다. Apple 개발자 포털에서 조직의 식별자입니다(예: S4V3D7CHJR).
  • 번들 ID: "앱 ID"라고도 합니다. 애플리케이션의 번들 식별자입니다. 예를 들면 다음과 같습니다 com.example.myapp. 하나의 앱에 대해 하나의 키만 사용할 수 있습니다. 이 값은 apns-topic 알림을 보낼 때 HTTP 헤더에 매핑되며 특정 애플리케이션을 대상으로 하는 데 사용됩니다. 명시적으로 값을 apns-topic 설정할 수 없습니다.
  • 토큰: “키” 또는 “프라이빗 키”라고도 합니다. Apple 개발자 포털에 생성된 .p8 파일에서 가져옵니다. 키는 APNS를 사용하도록 설정해야 합니다(키를 생성할 때 Apple 개발자 포털에서 선택됨). 이 값은 NH 포털/API에 제공할 때 PEM 헤더/바닥글을 제거해야 합니다.
  • 엔드포인트: Notification Hubs 포털 블레이드의 토글 및 API의 문자열 필드입니다. 유효한 값은 https://api.development.push.apple.com:443/3/device 또는 https://api.sandbox.push.apple.com:443/3/device입니다. Notification Hubs는 알림을 보내기 위해 프로덕션 또는 샌드박스 환경에 이 값을 사용합니다. 앱의 aps-environment 권한과 일치해야 합니다. 그렇지 않으면 생성된 APNS 디바이스 토큰이 환경과 일치하지 않고 알림이 전송되지 않습니다.

올바른 사용을 보여 주는 코드 샘플은 다음과 같습니다.

NamespaceManager nm = NamespaceManager.CreateFromConnectionString(_endpoint);
string token = "YOUR PRIVATE KEY HERE";
string keyId = "YOUR KEY ID HERE";
string appName = "YOUR APP NAME HERE";
string appId = "YOUR APP ID HERE";
NotificationHubDescription desc = new NotificationHubDescription("PATH TO YOUR HUB");
desc.ApnsCredential = new ApnsCredential(token, keyId, appId, appName);
desc.ApnsCredential.Endpoint = @"https://api.development.push.apple.com:443/3/device";
nm.UpdateNotificationHubAsync(desc);

다음 단계