WNS(Windows 푸시 알림 서비스)를 사용하여 인증하는 방법(Windows 런타임 앱)

[ 이 문서는 Windows 런타임 앱을 작성하는 Windows에서 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]

이 항목에서는 WNS(Windows 푸시 알림 서비스)를 사용하여 클라우드 서버를 인증하고 액세스 토큰을 받는 방법에 대해 설명합니다.

사전 요구 사항

지침

단계 1: 대시보드에 앱 등록

WNS를 통해 알림을 보내려면 먼저 앱을 등록해야 합니다. Windows 스토어 앱을 제출, 인증 및 관리할 수 있는 개발자 포털인 대시보드를 통해 등록합니다. 대시보드를 통해 앱을 등록하면 클라우드 서비스가 WNS에 인증하는 데 —사용할 자격 증명(패키지 SID(보안 식별자) 및 비밀 키)이 —제공됩니다.

등록하려면

  1. Windows 개발자 센터의 Windows 스토어 앱 페이지로 이동한 후 Microsoft 계정으로 로그인합니다.

  2. 로그인한 다음 대시보드 링크를 클릭합니다.

  3. 대시보드에서 앱 제출을 선택합니다.

    새 앱 전송 옵션 위치

  4. 앱 제출 페이지에서 앱 이름을 선택합니다.

    앱 전송 페이지

  5. 앱에 고유한 이름을 지정합니다. 이름을 입력하고 이름 예약 단추를 클릭합니다. 이름을 사용할 수 있는 경우 앱에 예약됩니다. 앱의 이름을 예약한 다음 원할 경우 다른 세부 정보를 수정할 수 있습니다.

단계 2: 앱의 ID 값 얻기

앱의 이름을 예약할 때 Windows 스토어에서 관련 자격 증명이 만들어졌습니다. 또한 앱의 매니페스트 파일(package.appxmanifest)에 있어야 하는 ID 값(—이름 및 게시자—)이 할당되었습니다. 앱을 Windows 스토어에 이미 업로드한 경우 해당 값이 매니페스트에 자동으로 추가되었습니다. 앱을 업로드하지 않은 경우에는 수동으로 ID 값을 매니페스트에 추가해야 합니다.

  1. Services(서비스) 링크를 선택합니다.

    Services(서비스) 링크가 표시된 앱의 페이지

  2. Services(서비스) 페이지의 Microsoft Azure 모바일 서비스 섹션 아래에서 Live 서비스 링크를 선택합니다.

    Services(서비스) 페이지

  3. Push notifications and Live Connect services info(푸시 알림 및 Live Connect 서비스 정보) 페이지에서 여기 표시된 **Identifying your app(앱 식별)**을 선택합니다.

    앱 식별 옵션 위치

  4. 앱 식별 페이지에서는 앱 매니페스트에 포함할 identity 요소를 제공합니다. 텍스트 편집기에서 매니페스트를 열고 페이지의 지침에 따라 해당 요소를 추가합니다.

    매니페스트에 복사해야 하는 ID 요소

단계 3: 앱의 자격 증명 얻기

  1. Identifying your app(앱 식별) 페이지의 맨 아래에서 여기 표시된 Authenticating your service(서비스 인증) 링크를 클릭합니다.

    서비스 인증 옵션 위치

  2. Authenticating your service(서비스 인증) 페이지에서는 다음과 같이 보안 식별자 및 클라이언트 암호를 제공합니다. 이 앱에 푸시 알림을 보내려면 클라우드 서비스가 이러한 자격 증명을 정확하게 사용해야 합니다. 다른 클라우드 서비스의 자격 증명을 사용하여 이 앱에 알림을 보낼 수 없으며 이 자격 증명을 사용하여 다른 앱에 알림을 보낼 수도 없습니다.

    참고  이 페이지에서 새 자격 증명을 생성할 수도 있습니다.

     

    SID 및 비밀 키를 표시하는 Authenticating your service(서비스 인증) 페이지

  3. SID와 클라이언트 암호를 클라우드 서버에 업로드합니다.

    중요  SID와 클라이언트 암호는 안전하게 저장되어야 하며 클라우드 서비스에서 액세스해야 합니다. 이 정보를 공개하거나 도용하면 허락 없이 또는 모르게 공격자가 사용자에게 알림을 보낼 수 있습니다.

     

단계 4: 클라우드 서버의 자격 증명을 WNS로 보내기

클라우드 서비스는 "application/x-www-for-urlencoded" 형식을 사용하는 HTTPS 인증 요청을 통해 자격 증명(SID 및 클라이언트 암호)을 제공합니다.

이 예제에서는 샘플 HTTPS 인증 요청을 보여 줍니다. 여기에는 grant_type에 패키지 SID와 비밀 키가 포함되어 있습니다. 이 코드를 복사할 경우 "client_id" 필드의 고유한 패키지 SID와 "client_secret" 필드의 고유한 비밀 키를 바꾸어야 합니다. 구문 정보는 푸시 알림 서비스 요청 및 응답 헤더를 참조하세요.


POST /accesstoken.srf HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: https://login.live.com
Content-Length: 211
 
grant_type=client_credentials&client_id=ms-app%3a%2f%2fS-1-15-2-2972962901-2322836549-3722629029-1345238579-3987825745-2155616079-650196962&client_secret=Vex8L9WOFZuj95euaLrvSH7XyoDhLJc7&scope=notify.windows.com

WNS가 서버로 인증 요청에 응답을 보냅니다. 해당 응답 코드가 "200 OK"인 경우 인증에 성공했으며, 액세스 토큰이 만료될 때까지 클라우드 서버가 보내는 알림에 저장하고 사용해야 액세스 토큰이 응답에 포함됩니다.

성공한 인증에 대한 WNS 응답의 예가 여기에 나와 있습니다.


HTTP/1.1 200 OK   
Cache-Control: no-store
Content-Length: 422
Content-Type: application/json
 
{
    "access_token":"EgAcAQMAAAAALYAAY/c+Huwi3Fv4Ck10UrKNmtxRO6Njk2MgA=", 
    "token_type":"bearer"
}

다음 예제는 인증 요청을 보내고 회신을 받는 데 필요한 코드를 제공합니다. 다음 지시문을 포함하기만 하면, 고유한 클라우드 서버 코드에 이 예제를 직접 복사할 수 있습니다.

using System.Runtime.Serialization.Json;

using System.Runtime.Serialization;

using System.IO;


[DataContract]
public class OAuthToken
{
    [DataMember(Name = "access_token")]
    public string AccessToken { get; set; }
    [DataMember(Name = "token_type")]
    public string TokenType { get; set; }
}

private OAuthToken GetOAuthTokenFromJson(string jsonString)
{
    using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(jsonString)))
    {
        var ser = new DataContractJsonSerializer(typeof(OAuthToken));
        var oAuthToken = (OAuthToken)ser.ReadObject(ms);
        return oAuthToken;
    }
}

protected OAuthToken GetAccessToken(string secret, string sid)
{
    var urlEncodedSecret = HttpUtility.UrlEncode(secret);
    var urlEncodedSid = HttpUtility.UrlEncode(sid);

    var body =
      String.Format("grant_type=client_credentials&client_id={0}&client_secret={1}&scope=notify.windows.com", urlEncodedSid, urlEncodedSecret);

    string response;
    using (var client = new WebClient())
    {
        client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
        response = client.UploadString("https://login.live.com/accesstoken.srf", body);
    }
    return GetOAuthTokenFromJson(response);
}

관련 항목

WNS(Windows 푸시 알림 서비스) 개요

푸시 알림 서비스 요청 및 응답 헤더

푸시 알림 및 정기 알림 샘플

빠른 시작: 푸시 알림 보내기

알림 채널을 요청, 생성 및 저장하는 방법