APNS 공급자 인증


HTTP/2 프로토콜을 이용하여 APNS Provider API를 사용할 경우, JWT(Json Web Token) 을 지원하며 이를 통해 공급자 인증을 수행할 수 있다.
또한 APNS 개발자 계정의 고유한 key 값을 통해 JWT가 만들어지며 모든 앱에 Notification을 수행할 수 있는 강력한 방법이다.

HTTP/2 프로토콜을 이용하여 JWT를 사용하지 않고, 인증서를 통해 공급자 인증을 수행한다면 당연하게도 하나의 앱에서 Notificaiton을 수행한다.

공급자 인증을 수행하기 전에 JWT에 대해 자세히 알아봐야 한다.






JWT


- JWT JSON 객체를 전달할 수 있고 여기에 서명하거나 암호화 할 수 있다.

- JWT 는 보통 2가지 경우에서 사용한다.


(1)인증

(2)정보 교류


- 구조 


aaaaa.bbbb.cccccc

                                              header       payload      signature    



(1) JWT Header


- Typ : 토큰의 타입 

- Alg : 알고리즘



{

  "typ": "JWT",

  "alg": "HS256“

 }







(2) JWT Payload



payload 부분에는 토큰에 담을 정보가 들어있다
- payload에 담는 정보의 한 ‘조각’ 을 클레임(claim) 이라고 부르고, 이는 name / value 의 한 쌍으로 이뤄져있다. 
- 토큰에는 여러개의 클레임 들을 넣을 수 있습니다.
- 클레임 의 종류는 다음과 같이 크게 세 분류로 나뉘어져있다.

 등록된 (registered) 클레임, 공개 (public) 클레임, 비공개 (private) 클레임



{

  "iss": "velopert.com",  //등록된 클레임

   "exp": "1485270000000",  //등록된 클레임

   "https://velopert.com/jwt_claims/is_admin": true,  //공개된 클레임

   "username": "velopert    //비공개 클레임

}




- 클레임의 종류 


iss: 토큰 발급자 (issuer)

sub: 토큰 제목 (subject)

aud: 토큰 대상자 (audience)

exp: 토큰의 만료시간 (expiraton), 시간은 NumericDate 형식으로 되어있어야 하며 (: 1480849147370) 언제나 현재 시간보다 이후로 설정


nbf: Not Before 를 의미하며, 토큰의 활성 날짜와 비슷한 개념. 여기에도 NumericDate 형식으로 날짜를 지정하며, 이 날짜가 지나기 전까지는 토큰이 처리되지 않는다.


iat: 토큰이 발급된 시간 (issued at), 이 값을 사용하여 토큰의 age 가 얼마나 되었는지 판단 가능하다.

jti: JWT의 고유 식별자로서, 주로 중복적인 처리를 방지하기 위하여 사용됩니다. 일회용 토큰에 사용하면 유용하다.








(3) JWT Signature


- 서명 부분을 만들려면
인코딩 된 헤더, 인코딩 된 페이로드, 암호, 헤더에 지정된 알고리즘을 서명해야한다.

- 예를 들어 HMAC SHA256 알고리즘을 사용하려면 다음과 같은 방법으로 서명을 만든다.


{

  base64_header + "." + base64_payload,

  secret

) base64_endcoding















참고: https://jwt.io/




+ Recent posts