2.0 인증 관련 질문입니다.

신동훈

2023.08.28읽음 546

작성하신 내용은 누구나 볼 수 있습니다.

계정 이름, 도메인 이름, Client ID, Client Secret 등의 비공개 정보는 기입하지마세요.

안녕하세요.

이런 인증 작업을 해본적이 없어 헤매고 있습니다.

봇을 사용할거라 서비스 계정으로 인증을 하려고 합니다.

먼저 C#으로 JWT을 만들었는데 정상적으로 만들어졌는지 잘 모르겠습니다.

인터넷에서 찾은 코드로

private static string GenerateJWTTokenCustom(IEnumerable<Claim> claimEnumerable, string secretKey)
{
byte[] keyByteArray = Encoding.UTF8.GetBytes(secretKey);
   SymmetricSecurityKey symmetricSecurityKey = new SymmetricSecurityKey(keyByteArray);
SigningCredentials credentials = new SigningCredentials(symmetricSecurityKey, SecurityAlgorithms.HmacSha256);
JwtSecurityToken token = new JwtSecurityToken
(
claims: claimEnumerable,
signingCredentials: credentials
);
string tokenString = new JwtSecurityTokenHandler().WriteToken(token);
return tokenString;
}
을 이용해 만드려고 했습니다.
secretKey는 다운로드한 비밀 키로 했고
Claim은
private static IEnumerable<Claim> GetClaims()
{
var claims = new Claim[]
{
new Claim("iss", "Client ID"),
new Claim("sub", "Service Account"),
new Claim("iat", UnixTimeNow(0)), // JWT create time
new Claim("exp", UnixTimeNow(1))  // JWT expire time,
};
return claims;
}
을 이용했습니다.
나온 결과물로 포스트맨을 이용해 토큰을 받아오려 했는데 unsupported_grant_type이라고 뜨는데 토큰을 제대로 받아온 것인지 부터가 확신이 없습니다.
질문입니다.
1. 다운로드한 secretKey를 메모장으로 열어서 ---BEGIN PRIVATE KEY---, ---END PRIVATE KEY---를 제외한 사이에 있는 값을 그대로 긁어서 string으로 사용했는데 맞는 방법인가요?
2. 문서에는 header와 claim set으로 작업 후 secretKey를 이용하는 것 같은데 (순서가) 제 생각에 저는 secretKey와 claim을 한번에 하는 방식 같습니다. 문제 없을까요?
확인 부탁드립니다.
감사합니다.

작성자가 BEST로 채택한 코멘트입니다.

Steve_

private 키 값의 코드는 모든 내용을 그대로 사용하시면 될 것으로 보이네요.

그리고 JWT 인증 관련해서는 https://jwt.io에서 테스트도 해볼 수 있어서 구조를 파악하시는데 도움이 될거예요.

아참, 컨텐츠 타입도 다시 확인해봐야겠지만, 인코딩이 잘 되었는지도 확인해보세요. 인증 방식이 조금 다르긴 하지만 JP에도 유사한 내용의 글이 있으니 참고해보세요.
https://forum.worksmobile.com/jp/posts/100869

2023.08.28

0

댓글4

  • 업데이트 된 답글입니다.

    Steve_

    private 키 값의 코드는 모든 내용을 그대로 사용하시면 될 것으로 보이네요.

    그리고 JWT 인증 관련해서는 https://jwt.io에서 테스트도 해볼 수 있어서 구조를 파악하시는데 도움이 될거예요.

    아참, 컨텐츠 타입도 다시 확인해봐야겠지만, 인코딩이 잘 되었는지도 확인해보세요. 인증 방식이 조금 다르긴 하지만 JP에도 유사한 내용의 글이 있으니 참고해보세요.
    https://forum.worksmobile.com/jp/posts/100869

    2023.08.28

    0
  • 업데이트 된 답글입니다.

    신동훈 작성자

    감사합니다.
    계속 시도해보고 있는데 일단 알고리즘을 HmacSha256을 쓰고 있어서 RSA256으로 바꿔보고 있습니다.
    또, 문서에는 "iat"와 "exp"가 값처럼(큰 따옴표 없이) 들어가 있는데 저는 "123456789"와 같이 문자처럼 들어가있더라구요. 이것도 문제가 될까요?

    2023.08.28

    0
  • 업데이트 된 답글입니다.

    신동훈 작성자

    openssl을 통해서 다운로드 받은 private.key 를 private.pem으로 변환 후 rsa로 jwt를 만들었는데 jwt.io에서 Invalid Signature라고 뜨네요.. header랑 payload쪽은 정상적으로 나오는데 어느 부분이 문제인지 짐작이 가지 않습니다ㅠㅠ

    2023.08.28

    0
  • 업데이트 된 답글입니다.

    신동훈 작성자

    성공했습니다.
    curl문을 여태 포스트맨에서 Body에 raw에 그냥 텍스트로 넣었던게 문제였네요.. 도움 주셔서 감사합니다.

    2023.08.28

    0
이전 글API Call Rate Limit 관련 문의
다음 글https://developers.worksmobile.com/kr/docs/difference-between-api?lang=ko 안뜸.
목록

궁금한 점을 해결하지 못하셨나요?
지금 바로 NAVER WORKS 사용자들에게 물어보세요!