static void Main(string[] args) { string iss = OAuth2AndOIDCParams.Isser; string aud = OAuth2AndOIDCParams.Audience; string scopes = "hoge1 hoge2 hoge3"; JObject jobj = null; JWS_RS256_XML jws_RS256 = new JWS_RS256_XML(); Console.WriteLine("PrivateKey:"); Console.WriteLine(CustomEncode.ToBase64String( CustomEncode.StringToByte(jws_RS256.XMLPrivateKey, CustomEncode.us_ascii))); Console.WriteLine(""); Console.WriteLine("PublicKey:"); Console.WriteLine(CustomEncode.ToBase64String( CustomEncode.StringToByte(jws_RS256.XMLPublicKey, CustomEncode.us_ascii))); Console.WriteLine(""); string jwtAssertion = JwtAssertion.CreateJwtBearerTokenFlowAssertion( OAuth2AndOIDCParams.Isser, OAuth2AndOIDCParams.Audience, new System.TimeSpan(0, 30, 0), scopes, jws_RS256.XMLPrivateKey); if (JwtAssertion.VerifyJwtBearerTokenFlowAssertion( jwtAssertion, out iss, out aud, out scopes, out jobj, jws_RS256.XMLPublicKey)) { if (iss == OAuth2AndOIDCParams.Isser && aud == OAuth2AndOIDCParams.Audience) { Console.WriteLine("JwtAssertion:"); Console.WriteLine(jwtAssertion); Console.WriteLine(""); Console.ReadLine(); return; } } Console.WriteLine("Error"); Console.ReadLine(); }
/// <summary>JWS検証</summary> private void btnJWSVerify_Click(object sender, EventArgs e) { bool ret = false; if (rbnJWSHS256.Checked) { // HS256 // 入力 string[] temp = this.txtJWSSign.Text.Split('.'); // 改変可能なフィールドから入力 string newJWS = CustomEncode.ToBase64UrlString(CustomEncode.StringToByte(this.txtJWSHeader.Text, CustomEncode.UTF_8)) + "." + CustomEncode.ToBase64UrlString(CustomEncode.StringToByte(this.txtJWSPayload.Text, CustomEncode.UTF_8)) + "." + temp[2]; // 検証 //JWS_HS256 jwsHS256 = new JWS_HS256(CustomEncode.StringToByte(this.txtJWSKey.Text, CustomEncode.UTF_8)); JWS_HS256 jwsHS256 = new JWS_HS256(this.txtJWSJWK.Text); ret = jwsHS256.Verify(newJWS); } else if (rbnJWSRS256_XML.Checked) { // RS256 (XML) // 入力 string[] temp = this.txtJWSSign.Text.Split('.'); // 改変可能なフィールドから入力 string newJWS = CustomEncode.ToBase64UrlString(CustomEncode.StringToByte(this.txtJWSHeader.Text, CustomEncode.UTF_8)) + "." + CustomEncode.ToBase64UrlString(CustomEncode.StringToByte(this.txtJWSPayload.Text, CustomEncode.UTF_8)) + "." + temp[2]; // 検証 JWS_RS256_XML jwsRS256 = new JWS_RS256_XML(this.txtJWSKey.Text); ret = jwsRS256.Verify(newJWS); } else if (rbnJWSRS256_Param.Checked) { // RS256 (Param) // 入力 string[] temp = this.txtJWSSign.Text.Split('.'); // 改変可能なフィールドから入力 string newJWS = CustomEncode.ToBase64UrlString(CustomEncode.StringToByte(this.txtJWSHeader.Text, CustomEncode.UTF_8)) + "." + CustomEncode.ToBase64UrlString(CustomEncode.StringToByte(this.txtJWSPayload.Text, CustomEncode.UTF_8)) + "." + temp[2]; // 検証 //JWS_RS256_Param jwsRS256 = new JWS_RS256_Param( // RS256_KeyConverter.XmlToProvider(this.txtJWSKey.Text).ExportParameters(false)); JWS_RS256_Param jwsRS256 = new JWS_RS256_Param( RS256_KeyConverter.JwkToProvider(this.txtJWSJWK.Text).ExportParameters(false)); ret = jwsRS256.Verify(newJWS); } else { // RS256 (X509) // 入力 string[] temp = this.txtJWSSign.Text.Split('.'); // 改変可能なフィールドから入力 string newJWS = CustomEncode.ToBase64UrlString(CustomEncode.StringToByte(this.txtJWSHeader.Text, CustomEncode.UTF_8)) + "." + CustomEncode.ToBase64UrlString(CustomEncode.StringToByte(this.txtJWSPayload.Text, CustomEncode.UTF_8)) + "." + temp[2]; // 検証 JWS_RS256_X509 jwsRS256 = new JWS_RS256_X509(this.CertificateFilePath_cer, ""); ret = jwsRS256.Verify(newJWS); } if (ret) { MessageBox.Show("検証成功"); } else { MessageBox.Show("検証失敗"); } }
/// <summary>JWS生成</summary> private void btnJWSSign_Click(object sender, EventArgs e) { if (rbnJWSHS256.Checked) { // HS256 string password = GetPassword.Generate(20, 10); JWS_HS256 jwsHS256 = new JWS_HS256(CustomEncode.StringToByte(password, CustomEncode.UTF_8)); // 生成 string jws = jwsHS256.Create(this.txtJWSPayload.Text); // 出力 this.txtJWSKey.Text = password; this.txtJWSJWK.Text = jwsHS256.JWK; this.txtJWSSign.Text = jws; // 改竄可能なフィールドに出力 string[] temp = jws.Split('.'); this.txtJWSHeader.Text = CustomEncode.ByteToString( CustomEncode.FromBase64UrlString(temp[0]), CustomEncode.UTF_8); this.txtJWSPayload.Text = CustomEncode.ByteToString( CustomEncode.FromBase64UrlString(temp[1]), CustomEncode.UTF_8); } else if (rbnJWSRS256_XML.Checked) { // RS256 (XML) JWS_RS256_XML jwsRS256 = new JWS_RS256_XML(); // 生成 string jws = jwsRS256.Create(this.txtJWSPayload.Text); // 出力 this.txtJWSKey.Text = jwsRS256.XMLPublicKey; this.txtJWSJWK.Text = RS256_KeyConverter.ParamToJwkPublicKey( RS256_KeyConverter.XmlToProvider(jwsRS256.XMLPublicKey).ExportParameters(false)); this.txtJWSSign.Text = jws; // 改竄可能なフィールドに出力 string[] temp = jws.Split('.'); this.txtJWSHeader.Text = CustomEncode.ByteToString( CustomEncode.FromBase64UrlString(temp[0]), CustomEncode.UTF_8); this.txtJWSPayload.Text = CustomEncode.ByteToString( CustomEncode.FromBase64UrlString(temp[1]), CustomEncode.UTF_8); } else if (rbnJWSRS256_Param.Checked) { // RS256 (Param) JWS_RS256_Param jwsRS256 = new JWS_RS256_Param(); // 生成 string jws = jwsRS256.Create(this.txtJWSPayload.Text); // 出力 this.txtJWSKey.Text = RS256_KeyConverter.ParamToXmlPublicKey(jwsRS256.RsaPublicParameters); this.txtJWSJWK.Text = RS256_KeyConverter.ParamToJwkPublicKey(jwsRS256.RsaPublicParameters); this.txtJWSSign.Text = jws; // 改竄可能なフィールドに出力 string[] temp = jws.Split('.'); this.txtJWSHeader.Text = CustomEncode.ByteToString( CustomEncode.FromBase64UrlString(temp[0]), CustomEncode.UTF_8); this.txtJWSPayload.Text = CustomEncode.ByteToString( CustomEncode.FromBase64UrlString(temp[1]), CustomEncode.UTF_8); } else { // RS256 (X509) JWS_RS256_X509 jwsRS256 = new JWS_RS256_X509(this.CertificateFilePath_pfx, this.CertificateFilePassword, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet); // 生成 string jws = jwsRS256.Create(this.txtJWSPayload.Text); // 出力 this.txtJWSKey.Text = jwsRS256.DigitalSignX509.X509PublicKey; this.txtJWSJWK.Text = RS256_KeyConverter.ParamToJwkPublicKey( RS256_KeyConverter.X509CerToProvider( this.CertificateFilePath_cer).ExportParameters(false)); this.txtJWSSign.Text = jws; // 改竄可能なフィールドに出力 string[] temp = jws.Split('.'); this.txtJWSHeader.Text = CustomEncode.ByteToString( CustomEncode.FromBase64UrlString(temp[0]), CustomEncode.UTF_8); this.txtJWSPayload.Text = CustomEncode.ByteToString( CustomEncode.FromBase64UrlString(temp[1]), CustomEncode.UTF_8); } }