C# IOS 로그인 인증 구현

  • IOS 토큰은 JWT로 구성
  • 아래 jwt 홈페이지에서 IOS에서 발급받은 토큰을 넣으면 아래 그림처럼 나온다.
  • 해당 예제에서는 Microsoft.IdentityModel.Tokens, System.IdentityModel.Tokens.Jwt 패키지를 사용
  • 아래는 예제 코드
var parts = Resource1.token_ios2.Split('.');
var header = parts[0];
var payload = parts[1];

// 헤더 정보가 궁금하거나 TokenValidationParameters에 ValidAudience, ValidIssuer값을 모를경우 사용
var hh = JwtHeader.Base64UrlDeserialize(header);
var pp = JwtPayload.Base64UrlDeserialize(payload);



  • apple에 key발급
  • 발급받은 json에 kid랑 토큰에 kid랑 일치
 // 꼭 key를 발급받아야함. kid가 토큰 header에 kid와 일치
string url = "https://appleid.apple.com/auth/keys";
string responseText = string.Empty;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.Timeout = 30 * 1000;
using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse()) {
     HttpStatusCode status = resp.StatusCode;
     Console.WriteLine(status);
 Stream respStream = resp.GetResponseStream(); using (StreamReader sr = new StreamReader(respStream)) {     responseText = sr.ReadToEnd(); }
 }  
  • 발급받은 key와 정보로 객체 생성
 // 발급받은 key를 사용
var jwks = new JsonWebKeySet(responseText);

// jwt.io 사이트에서 encoded시에 나오는 iss,aud
var validationParameters = new TokenValidationParameters {
     IssuerSigningKeys = jwks.Keys,
     ValidAudience = "aud",  // aud는 어플리케이션id 
     ValidIssuer = "iss", // iss는 고정 
     ValidateLifetime = true,
     ValidateAudience = true,
     ValidateIssuer = true,
 }; 
  • 토큰과 위에서 생성한 객체로 인증
  var tokenHandler = new JwtSecurityTokenHandler();
 try {
     var claimsPrincipal = tokenHandler.ValidateToken(Resource1.token_ios2, validationParameters, out SecurityToken securityToken);
     if (securityToken == null) {
         // 인증 실패
     }
 } catch (Exception ex) {
     // 인증 실패
     Console.WriteLine(ex);
 } 

Leave a Reply

Your email address will not be published. Required fields are marked *