This document is about: PUN 2
SWITCH TO

PUN 2 is in maintenance / LTS mode. Aside from some fixes no further feature updates are planned. Of course, existing PUN 2 projects will continue to run. New projects should consider Fusion or Quantum.

수정중인 페이지 입니다.

JWT 인증

개요

JWT (JSON 웹 토큰) 인증은 기존의 커스텀 인증과는 다릅니다.
JWT 인증을 사용하려면 클라이언트가 특별한 토큰을 전달해야 합니다.
Photon 서버는 외부 웹 서비스를 호출하지 않고, 단순히 해당 토큰을 검증합니다.
토큰은 JWT 형식을 사용하며 보안상의 이유로 암호화됩니다.

대시보드 설정

JWT를 인증 제공자로 추가하는 것은 간단하며, Photon 애플리케이션 관리 화면에서 몇 초 만에 설정할 수 있습니다.
애플리케이션의 "Manage" 페이지로 이동한 후, "Authentication" 섹션을 아래로 스크롤 하세요.
JWT용 신규 인증 제공자를 추가하거나 기존 제공자를 편집할 경우 필수 설정은 다음과 같습니다:

  • secret1, 필수 값 <KeyHash>;<KeyEncryption>;<KeySignature>. 항상 "secret1"을 설정해야 합니다.
  • secret2, 선택 값 <KeyHash2>;<KeyEncryption2>;<KeySignature2>.
    "secret2"는 키를 변경해야 할 때 사용할 수 있습니다.
    대시보드의 변경 사항이 모든 서버에 적용되기까지 시간이 걸리므로, "secret2"에는 이전 값을, "secret1"에는 새로운 값을 입력하면 됩니다.
    이렇게 하면 미리 안전하게 조정할 수 있습니다.

예시 Secret

secret1:
00000000-0000-0000-0000-000000000001;00000000-0000-0000-0000-000000000002;00000000-0000-0000-0000-000000000003

구성 요소는 다음과 같습니다:

  • Key Hash: 00000000-0000-0000-0000-000000000001
  • Key Encryption: 00000000-0000-0000-0000-000000000002
  • Key Signature: 00000000-0000-0000-0000-000000000003

참고: 단순화를 위해 GUID를 사용했지만, 다른 문자열을 선택할 수도 있습니다.

토큰 생성

토큰 생성에는 여러 라이브러리를 사용할 수 있습니다 (예: C#의 System.IdentityModel.Tokens.Jwt).
암호화 구현 예시는 제공된 테스트 콘솔 애플리케이션의 소스를 참조할 수 있습니다.

토큰 형식: <base64UrlEncode(header)>.<base64UrlEncode(payload)>.<Signature>

JSON

{
  "alg": "HS256",
  "typ": "JWT"
}

Payload

JSON

{
   // jwt
    "exp" : [timestamp],   // 만료 시간
    "iat" : [timestamp],   // 발급 시각 (선택)
    "nbf" : [timestamp],   // 사용 가능 시점 (선택)
    // Photon
    "UserId" : [string:value, optional],
    "Nickname" : [string:value, optional],
    "AuthCookie" : [Dictionary<string, object>, optional]
}

Signature

MACSHA256(
      base64UrlEncode(header) + "." +
      base64UrlEncode(payload),
      [secret]
   )

예시

JSON:

JSON

{
   "alg":"HS256",
   "typ":"JWT"
}
.
{
   "UserId":"Jason2000",
   "Nickname":"Jason",
   "nbf":1519314827,
   "exp":1519318427,
   "iat":1519314827
}

서명 및 인코딩 (secret "00000000-0000-0000-0000-000000000003" 사용):

text

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOiJKYXNvbjIwMDAiLCJOaWNrbmFtZSI6Ikphc29uIiwibmJmIjoxNTE5MzE0ODI3LCJleHAiOjE1MTkzMTg0MjcsImlhdCI6MTUxOTMxNDgyN30.B2gs4_qEBbwXsjOvW8ZbORiBxLrcmsE96P77Kzyaf2c

생성된 토큰은 JWT debugger에서 테스트할 수 있습니다.
"Encoded" 필드에 붙여 넣고, 서명을 검증하려면 "secret" 필드에 00000000-0000-0000-0000-000000000003 값을 입력하세요.

암호화

사용되는 암호화 방식에 대한 세부사항은 다음과 같습니다:

  • 형식: [IV][encrypted data][HMAC]
  • 암호화 알고리즘: AES
  • IV 크기: 16
  • 패딩: PKCS7 (System.Security.Cryptography 기본값)
  • 블록 크기: 16
  • HMAC 크기: 32
  • 해시 알고리즘: SHA256
  • 해시 및 암호화 키: 대시보드 문자열 값을 UTF-8 바이트 배열로 변환 후 SHA256 해시

클라이언트 코드

클라이언트는 생성된 JWT 토큰 문자열을 암호화, URL 인코딩, Base64 포맷으로 전송해야 합니다:

C#

PhotonNetwork.AuthValues = new AuthenticationValues();
authValues.AuthType = CustomAuthenticationType.Jwt; // 9
authValues.SetAuthPostData(jwtTokenString);
// do not set AuthValues.Token or authentication will fail
// connect
Back to top