외부 서비스와 대화하기 위해 JWT 토큰을 만들어야하는 WebJob이 있습니다. 나는 내 로컬 컴퓨터에 WebJob를 실행할 때 다음 코드는 작동 :CryptographicException을받지 않고 Azure WebJob에서 JWT 토큰에 서명하려면 어떻게해야합니까?
Microsoft.Azure.WebJobs.Host 그러나
public static string SignES256(byte[] p8Certificate, object header, object payload) { var headerString = JsonConvert.SerializeObject(header); var payloadString = JsonConvert.SerializeObject(payload); CngKey key = CngKey.Import(p8Certificate, CngKeyBlobFormat.Pkcs8PrivateBlob); using (ECDsaCng dsa = new ECDsaCng(key)) { dsa.HashAlgorithm = CngAlgorithm.Sha256; var unsignedJwtData = Base64UrlEncoder.Encode(Encoding.UTF8.GetBytes(headerString)) + "." + Base64UrlEncoder.Encode(Encoding.UTF8.GetBytes(payloadString)); var signature = dsa.SignData(Encoding.UTF8.GetBytes(unsignedJwtData)); return unsignedJwtData + "." + Base64UrlEncoder.Encode(signature); } }
, 나는 푸른 내 WebJob를 배포, 나는 다음과 같은 예외를 얻을 .FunctionInvocationException : 예외를 실행하는 동안 예외 : NotificationFunctions.QueueOperation ---> System.Security.Cryptography.CryptographicException : 지정한 파일을 찾을 수 없습니다. System.Security.Cryptography.CngKey.Import에서 System.Security.Cryptography.NCryptNative.ImportKey (SafeNCryptProviderHandle 제공 바이트 [] keyBlob 문자열 포맷) (바이트 [] keyBlob, CngKeyBlobFormat 형식 CngProvider 공급자)에
지정된 파일을 찾을 수 없다고하지만 파일 위치를보고있는 매개 변수는 메모리에 있습니다. 내가 수집 한 내용에서 CngKey.Import 메서드를 사용할 수있게하려면 필요한 암호화 설정이있을 수 있지만 Azure 포털에서 이와 관련된 구성을 찾을 수 없습니다.
나는 또한 JwtSecurityTokenHandler를 사용해 보았지만 사용해야하는 ES256 해싱 알고리즘을 처리하지 못하는 것 같습니다 (JwtAlgorithms 클래스에서 ECDSA_SHA256으로 참조되어 있음에도 불구하고).
의견을 보내 주시면 감사하겠습니다.
UPDATE는
이 CngKey.Import 실제로 푸른에 액세스 할 수없는 어딘가에 인증서를 저장하려고 할 수 있다는 것을 나타납니다. 저장하지 않아도됩니다. 메모리에있는 인증서에 액세스하거나 작동하기 쉬운 인증서의 다른 종류로 변환하는 더 좋은 방법이 있다면 좋습니다.
업데이트 2
이 문제는 here을 언급 한 바와 같이 사용자 프로파일을로드하지 설정 하늘빛 웹 앱 IIS 관련이있을 수 있습니다. Azure 포털 앱 설정에서 WEBSITE_LOAD_USER_PROFILE = 1로 설정하여이 기능을 활성화했습니다. Azure에서 WebJob과 Web App를 통해 코드를 실행할 때이 업데이트를 시도했지만 여전히 같은 오류가 발생합니다.
개발자 컴퓨터에서 로컬로 실행하려고하면 동일한 오류가 표시됩니까? – Niels
아니요, 로컬로 실행중인 컴퓨터에서 WebJob이 예상대로 작동하므로 아무런 예외도 발생하지 않습니다. – lehn0058
인증서를 어디서 가져 왔습니까? 나는 Azure에서 의미합니다 – Thomas