JWT 방식으로 토큰 생성

JWT 방식으로 토큰 생성 시 웹표준(RFC7519) JWT를 구현하는 임의의 라이브러리(https://jwt.io 참고)를 사용하시면 되며, Payload 로는 토큰정보를, Secret 에는 암호화키를, 알고리즘은 HS256 을 적용하여 토큰을 생성할 수 있습니다.

코드 예시

아래의 토큰 정보를 "this_is_test_secret_key_at_least_32_char" 를 암호화키로 암호화하는 예시입니다.

{
    "uid": "test-user-2",
    "fullname": "박토끼",
    "email": "tokki.park@test.com",
    "ts": 1596611792131
}

Python

아래의 코드는 pyjwt 라이브러리(https://github.com/jpadilla/pyjwt)를 사용하여 JWT 토큰을 생성하는 예시입니다.

```python
import jwt

token = jwt.encode({
    "uid": "test-user-2",
    "fullname": "박토끼",
    "email": "tokki.park@test.com",
    "ts": 1596611792131
}, 'this_is_test_secret_key_at_least_32_char', algorithm='HS256')

print(token.decode('utf-8'))
# 출력값 : eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOiJ0ZXN0LXVzZXItMiIsImZ1bGxuYW1lIjoiXHViYzE1XHVkMWEwXHViMDdjIiwiZW1haWwiOiJ0b2traS5wYXJrQHRlc3QuY29tIiwidHMiOjE1OTY2MTE3OTIxMzF9.ve6WJli1HrtU03SlWuDKAmYxFSM6dmxOe-1DGH65J8o
# 출력값이 시간에 따라 다를 수 있으니, <https://jwt.io> 에서 검증해보시기 바랍니다.
```

C#

아래의 코드는 System.IdentityModel.Tokens.Jwt 라이브러리(https://www.nuget.org/packages/System.IdentityModel.Tokens.Jwt/)를 사용하여 JWT 토큰을 생성하는 예시입니다.

```csharp
using Microsoft.IdentityModel.Tokens;
using System;
using System.Collections.Generic;
using System.IdentityModel.Tokens.Jwt;
using System.Text;

namespace jwt_test
{
	class Test
	{
		static void Main(String[] args)
		{
			var tokenHandler = new JwtSecurityTokenHandler();
			var tokenDescriptor = new SecurityTokenDescriptor
			{
				Claims = new Dictionary<string, object>
				{
					{"uid", "test-user-2" },
					{"fullname", "박토끼" },
					{"email", "tokki.park@test.com" },
					{"ts", 1596611792131L },
				},
				SigningCredentials = new SigningCredentials(
					new SymmetricSecurityKey(Encoding.UTF8.GetBytes("this_is_test_secret_key_at_least_32_char")),
					SecurityAlgorithms.HmacSha256Signature
				)
			};

			var stoken = tokenHandler.CreateToken(tokenDescriptor);
			var token = tokenHandler.WriteToken(stoken);

			Console.WriteLine(token);
      // 출력값 : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiJ0ZXN0LXVzZXItMiIsImZ1bGxuYW1lIjoi67CV7Yag64G8IiwiZW1haWwiOiJ0b2traS5wYXJrQHRlc3QuY29tIiwidHMiOjE1OTY2MTE3OTIxMzEsIm5iZiI6MTU5Njc2NzQwMSwiZXhwIjoxNTk2NzcxMDAxLCJpYXQiOjE1OTY3Njc0MDF9.5Ol83EyKiRWc6FoSJPEqv4zJFlIowMDKmvVPsomQVWQ
      // 출력값이 시간에 따라 다를 수 있으니, <https://jwt.io> 에서 검증해보시기 바랍니다.
		}
	}
}
```

Java

아래의 코드는 jjwt 라이브러리(https://github.com/jwtk/jjwt)를 사용하여 JWT 토큰을 생성하는 예시입니다.

```java
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

public class Main {
	public static void main(String args[]) {
    String token = Jwts.builder()
      .setHeaderParam("typ", "JWT")  // 생략 가능
      .claim("uid", "test-user-2")
      .claim("fullname", "박토끼")
      .claim("email", "tokki.park@test.com")
      .claim("ts", 1596611792131L)
      .signWith(SignatureAlgorithm.HS256, "this_is_test_secret_key_at_least_32_char".getBytes())     
      .compact();

    System.out.println(token);
    // 출력값 : eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOiJ0ZXN0LXVzZXItMiIsImZ1bGxuYW1lIjoi67CV7Yag64G8IiwiZW1haWwiOiJ0b2traS5wYXJrQHRlc3QuY29tIiwidHMiOjE1OTY2MTE3OTIxMzF9.akIXRvSad0wjv6y86ko7-KkJHwjMfTPDwXQOYOlixHQ
    // 출력값이 시간에 따라 다를 수 있으니, <https://jwt.io> 에서 검증해보시기 바랍니다.
	}
}
```

Last updated