2017-11-20 13 views
0

나는 이것을 묻는 방법을 모르지만 웹 (java-jwt 또는 jjwt 등)에서 다양한 Json Web Token 구현을 사용하려고 시도 할 때 모두 서명 과정의 일부로 RSAPrivateKey을 사용합니다. JWT 서명을 위해 mscapi.RSAPrivateKey를 어떻게 사용합니까?

그러나 내가 가지고있는 문제는 분명히 mscapi.RSAPrivateKeyjava.security.interfaces.RSAPrivateKey와 같은 API를 제공하지 않고 내가 내 래퍼 클래스를 작성하려고 할 때, 나는 getEncoded 또는 getFormat를 작성하는 방법에 대한 아무 생각이다 (필자는 "RS256"또는 비슷한 것을 반환해야한다고 생각합니다).

  1. mscapi.RSAPrivateKey은 어떻게 포장 할 수 있습니까?
  2. mscapi.RSAPrivateKeyjava.security.interfaces.RSAPrivateKey으로 변환하는 올바른 방법은 무엇입니까?

답변

2

JWT에 서명하기 위해 개인 키를 가져올 필요가 없습니다. 암호화 공급자는 사용자의 경우 mscapi에서 콘텐츠를 추출하지 못하게하거나 의도적으로 콘텐츠를 사용할 수 없도록 (예 : 스마트 카드 사용) 콘텐츠를 숨 깁니다. 그러나 mscapi는 서명 또는 암호화에이 키를 사용할 수 있으므로 라이브러리가 PrivateKey (RSAPrivate 키가 아닌)의 인스턴스로 jwt에 서명 할 수있는 이유가 없습니다.

설명하는 문제는 this과 유사합니다. jjwt가 PrivateKey를 캐스팅하려고 시도하고 mscapi 래퍼가 일반적인 인터페이스를 구현하지 않는 것 같습니다.

getEncoded가 필요하면 mscapi 키에 래퍼를 만들 수 없다고 생각합니다. 왜냐하면 말했듯이, 키잉 자료에 액세스하지 못했기 때문입니다. 그래서 jjwt를 사용하여 토큰 (header.payload)을 만들고 표준 서명 api를 사용하여 직접 서명 할 것을 제안합니다.

+0

이상한 점은'java.security.Signature'를 사용하고 일반적으로'getInstance'를 수행 한 다음 패스합니다. 내 'PrivateKey' 그것을, 그리고 아무 문제없이 서명 할 수 있습니다. 그러나 모든 JWT 플러그인은 자바처럼'PrivateKey'를 사용하지 않는다. 그래서 내가 그것을 포장하려고합니다. 저는 그 글을 읽었습니다. 사실, 저자에게 물어볼 질문을 게시했습니다 : https://github.com/jwtk/jjwt/issues/273 그러나 인터페이스를 구현하려 할 때 생성 방법을 모르겠습니다. 'getEncoded '. – codenamezero

+0

제발, 업데이트 된 답변을 참조하십시오 – pedrofb

+0

오, 내가 서클 롤에서 주위를 돌고 있었다. 그래서 원래 작성한 코드가 작동하는 것으로 밝혀졌습니다. 'Signature.getInstance ("SHA256withRSA")'를 사용하여 서명을하고 있었는데, 내가 틀린 일을하고 있다는 것을 잘못 검증했다는 것을 증명하는 것이 었습니다. 그런 다음 제 3 자 JWT 라이브러리를 사용하여 그 일을하려고했습니다. 제 3 자 도서관을 사용하지 않고 다른 사람들이 JWT에 관심이있을 수 있으므로 아래의 저의 해결책을 게시하십시오. – codenamezero