본문 바로가기

Spring

Spiring JWt를 이용한 토큰 생성

반응형

Dependency

		<!-- JWt -->

		<dependency>
			<groupId>io.fusionauth</groupId>
			<artifactId>fusionauth-jwt</artifactId>
			<version>3.4.0</version>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.7</version>
		</dependency>

 

 

login API

	@ApiOperation(value = "로그인 처리")
	@PostMapping("login")
	public ResponseEntity<String> login(@RequestBody Member member) {
		System.out.println(member.getUserid());
		member = memberService.login(member);
		if (member != null) {
			String token = getToken(member);
			return new ResponseEntity<String>(token, HttpStatus.OK);
		} else {
			return new ResponseEntity<String>(FAIL, HttpStatus.NO_CONTENT);
		}

	}

member의 데이터가 sql에 존재한다면 member 의 id를 이용해서 token을 생성한다 이때 id는 유일값이 어야함

그리고 token을 vue에다가 보낸다. 실패시에는 실패 신호를 보낸다.

 

이값을 뷰 단에서 static 영역의 데이터 vuex로 token을 받으면 된다. 

 

 

getToken 토큰 만드는방법

// 암호화 하는 방법임 : 내이름 넣음
	static Signer signer = HMACSigner.newSHA256Signer("hong jeong min");

	static public String getToken(Member member) {
		// Userid로 토큰을 만든다.
		// plusMinutes 는 토큰을 등록하는 시간임 지금은 1분
		JWT jwt = new JWT().setIssuer(member.getUserid()).setIssuedAt(ZonedDateTime.now(ZoneOffset.UTC))
				.setSubject("f1e33ab3-027f-47c5-bb07-8dd8ab37a2d3")
				.setExpiration(ZonedDateTime.now(ZoneOffset.UTC).plusMinutes(1));
		// Sign and encode the JWT to a JSON string representation
		String token = JWT.getEncoder().encode(jwt, signer);

		return token;
	}

JWT 토큰은 Singner Issuer  현재시간을 이용해서 토큰을 만든다.  setSubject는 토큰이 유효화 토크인지 확인하는 암호화 키이다.     Singer + Issuer + Date  + subject ->>> 토큰 

 

토큰 복호화

// 복호화 하는 방법 : 내이름 넣음 
	// 토큰이 필요한 API 정보에 대해서 유효성을 체크해주면된다
	static Verifier verifier = HMACVerifier.newVerifier("hong jeong min");
	static public boolean cmpToekn(String token) {
		try {
			// Build an HMC verifier using the same secret that was used to sign the JWT
			JWT jwt = JWT.getDecoder().decode(token, verifier);
			assertEquals(jwt.subject, "f1e33ab3-027f-47c5-bb07-8dd8ab37a2d3");
		} catch (Exception e) {
			return false;
		}
		return true;
	}

복호화 하기위해서는 처음 사용한 암호화 signer이 필요하다 . 이때 hong jeong min 을 암호화 할때 사용햇으니 복화할때도 사용한다. (원래 이과정이 다른블로그를 보면 암호단계를 높히기 위해 복잡한데 짧게 짜기위해 이렇게사용)

 

그러면 verifiter + token 을 가지고   디코더를 한다. 

 

assertEquals는 완벽하게 같을때 작용하는 함수고 같지않으면 런타임 에러를 발생시킨다.

jwt.subject는 복호화햇을때 유효한 키인지 판단하는 것이다. 이렇게 userid를 몰라도 상대가 암호화된 키만 가지고 유효한 키인지 아닌지 판단할때 jwt를 사용한다.

 

 

이제 vuex 에서  store을 통해 관리하면 된다. 이때 로컬스토리지를 따로 관리해야 하기때문에 모듈화한다.

 

모듈화 하는 방법은 밑에 주소에서 참조했다.

 

https://velog.io/@skyepodium/VUEX-store-%EC%97%AC%EB%9F%AC-%EA%B0%9C%EB%A5%BC-%EB%AA%A8%EB%93%88%ED%99%94%ED%95%98%EA%B8%B0

 

VUEX store 여러 개를 모듈화하기

vuex 에서 store를 여러개 만들고 쉽게 사용해봅시다.

velog.io

 

반응형

'Spring' 카테고리의 다른 글

Spring git으로 pull 받은 프로젝트 임폴트가안될때  (0) 2020.07.21
Spring 설치하기 및 설정하기  (0) 2020.07.15
Spring의 느낌을 느껴보자  (0) 2020.05.28
Spring : web.xml  (0) 2020.05.27
Spring : pom.xml  (0) 2020.05.27