본문 바로가기
프로그래밍/C#

apple client secret 생성을 위한 jwt 만들기

by 뽀도 2022. 7. 12.

 

nuget 설치

  • JWT  설치
Install-Package JWT -Version 10.0.0-beta5
  • System.IdentityModel.Tokens.Jwt 설치
Install-Package System.IdentityModel.Tokens.Jwt -Version 6.21.0

 

 

 

설명

  • apn 인증용 p8코드를 미리 발급받아 준비한다.
  • 준비한 p8을 읽어 앞 뒤의 "private key" 키워드 삭제 
  • 줄바꿈을 공백으로 변경 
  • 준비된 p8데이터를 MakeToken 함수에 넣음. 

 

 

 

CODE 


// p8데이터 읽음
var p8Data = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "\\p8data.p8");

Console.WriteLine(p8Data);

// keeping only the payload of the key 
// 불필요한 부분 제거
p8Data = p8Data.Replace("-----BEGIN PRIVATE KEY-----", "");
p8Data = p8Data.Replace("-----END PRIVATE KEY-----", "");
p8Data = p8Data.Replace("\r\n", string.Empty);


// jwt 토큰으로 변환 
var jwtSecretToken = MakeToken(p8Data);




// 변환 함수
static string MakeToken(string p8key)
{
    string aud = "https://appleid.apple.com";
    string issuer = "teamId";                   // apple 개발자 team id 
    string subject = "clientId";                // Apple 클라이언트 ID(서비스 ID이기도 함)
    string kid = "kid";                         // 다운로드한 키의 ID

    var now = DateTime.UtcNow;

    IList<Claim> claims = new List<Claim> {
        new Claim ("sub", subject),
        new Claim("iat", EpochTime.GetIntDate(now).ToString(), ClaimValueTypes.Integer64),
    };

    // 윈도우즈에서만 지원됩니다. 
    CngKey cngKey = CngKey.Import(Convert.FromBase64String(p8key), CngKeyBlobFormat.Pkcs8PrivateBlob);

    SigningCredentials signingCred = new SigningCredentials(
        new ECDsaSecurityKey(new ECDsaCng(cngKey)),
        SecurityAlgorithms.EcdsaSha256
    );

    JwtSecurityToken token = new JwtSecurityToken(
        issuer,
        aud,
        claims,
        now,
        now.AddDays(180),
        signingCred
    );
    token.Header.Add("kid", kid);
    token.Header.Remove("typ");
    token.Payload.Remove("nbf");

    JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();

    return tokenHandler.WriteToken(token);
}

 

▶ 우리클라이언트 팀에서 payload부분에 nbf는 필요 없다고 하셔서 remove로 제거함 

 

참고)

https://docs.microsoft.com/ko-kr/azure/app-service/configure-authentication-provider-apple

반응형

댓글