2016-07-29 12 views
0

Googleのfirebaseで検証する必要があるjwtトークンを生成します。下記のJWTトークンを生成するために私のコードは、私が「RsaSha256Signature」それは、その後jwtを生成中にエラーが発生しましたSignatureAlgorithmがサポートされていません

「: 『System.InvalidOperationExceptionが:暗号アルゴリズム』 http://www.w3.org/2001/04/xmldsig-more#rsa-sha256 'は、このコンテキストではサポートされていません 。例外」エラーを私に与えにアルゴリズムを変更するまで、それが正常に動作します

私はそれを変更いけないし、「HmacSha256Signature」としてそれを使用している場合は、それが正常に動作

  var plainTextSecurityKey = "-----BEGIN PRIVATE KEY-----; 
      var signingKey = new InMemorySymmetricSecurityKey(Encoding.UTF8.GetBytes(plainTextSecurityKey)); 
      var signingCredentials = new SigningCredentials(signingKey, 
       SecurityAlgorithms.HmacSha256Signature, SecurityAlgorithms.Sha256Digest); 

      var claimsIdentity = new ClaimsIdentity(new List<Claim>() 
     { 
      new Claim(ClaimTypes.NameIdentifier, email), 
      new Claim(ClaimTypes.Role, role), 
     }, "Custom"); 

      var securityTokenDescriptor = new SecurityTokenDescriptor() 
      { 
       AppliesToAddress = "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit", 
       TokenIssuerName = "serviceemail", 
       Subject = claimsIdentity, 
       SigningCredentials = signingCredentials, 
      }; 

      var tokenHandler = new JwtSecurityTokenHandler(); 
      var plainToken = tokenHandler.CreateToken(securityTokenDescriptor); 
      var signedAndEncodedToken = tokenHandler.WriteToken(plainToken); 

      var tokenValidationParameters = new TokenValidationParameters() 
      { 
       ValidAudiences = new string[] 
      { 
       "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit", 
       "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit" 
      }, 
       ValidIssuers = new string[] 
      { 
       "service email", 
       "service email" 
      }, 
       IssuerSigningKey = signingKey 
      }; 

      SecurityToken validatedToken; 
      tokenHandler.ValidateToken(signedAndEncodedToken, 
       tokenValidationParameters, out validatedToken); 

      return validatedToken.ToString(); 

答えて

1

あなたsigningKeyあなたがRsaSha256Signatureを使用することはできませんので、RSAキーではありません。あなたが固定されたパスフレーズ

var plainTextSecurityKey = "-----BEGIN PRIVATE KEY-----; 
var signingKey = new InMemorySymmetricSecurityKey(Encoding.UTF8.GetBytes(plainTextSecurityKey)); 
var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256Signature, SecurityAlgorithms.Sha256Digest); 

とHMAC対称鍵を作成しているので、HmacSha256Signature作品は、私はC#での専門家ではないけど、おそらくあなたは、あなたが含まれているキーストアが必要になりますthis

// NOTE: Replace this with your actual RSA public/private keypair! 
var provider = new RSACryptoServiceProvider(2048); 
var parameters = provider.ExportParameters(true); 

// Build the credentials used to sign the JWT 
var signingKey = new RsaSecurityKey(parameters); 
var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.RsaSha256); 

ようなものが必要秘密鍵と公開鍵。 HMACは対称アルゴリズムであり、署名と検証の鍵は同じですが、RSAに鍵ペアが必要です。

関連する問題