C#サーバーで受信した署名付き要求を検証しようとしています。 リクエストはソーシャルプラットフォーム(naver)からのものです。 私はそれらから証明書(以下)を取得します。C#で署名付き要求を検証する
私は彼らがこのテーマに関するウィキの記事を持っている
http://code.google.com/p/devdefined-tools/
DevDefinedOAuth
を使用しています。http://code.google.com/p/devdefined-tools/wiki/OAuthSignatureValidation
ここでは私のコードです:
public static bool isValidRequest2(HttpListenerRequest request)
{
X509Certificate2 cert = new X509Certificate2();
cert.Import(Encoding.ASCII.GetBytes(
@"-----BEGIN CERTIFICATE-----
MIICqDCCAhGgAwIBAgIJANDx5Es1s04zMA0GCSqGSIb3DQEBBQUAMG0xCzAJBgNV
BAYTAktSMQowCAYDVQQIDAEgMQowCAYDVQQHDAEgMQwwCgYDVQQKDANOSE4xEjAQ
BgNVBAsMCUNvbW11bml0eTESMBAGA1UEAwwJbmF2ZXIuY29tMRAwDgYJKoZIhvcN
AQkBFgEgMB4XDTEwMDYxNDA1MzAzNVoXDTExMDYxNDA1MzAzNVowbTELMAkGA1UE
BhMCS1IxCjAIBgNVBAgMASAxCjAIBgNVBAcMASAxDDAKBgNVBAoMA05ITjESMBAG
A1UECwwJQ29tbXVuaXR5MRIwEAYDVQQDDAluYXZlci5jb20xEDAOBgkqhkiG9w0B
CQEWASAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANX++6LgORv6caQ8LCVh
RYTXi2Lko7zn4wPeqvdCqNZsxcry2mNHn/ic+0XbhNgor5L0l048f0iicW/Qu4vw
RvkZy2N8dNE3Tb5dbPLNo+S+cExv/DhbQVFKGiOOvr4vQ+2Lgw7If5g3sh6/S8Gu
ot47cOrUkiLKBKJt614bue9zAgMBAAGjUDBOMB0GA1UdDgQWBBSB1ReDAnl4lRyl
Rfpl0EZ13E5LzzAfBgNVHSMEGDAWgBSB1ReDAnl4lRylRfpl0EZ13E5LzzAMBgNV
HRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAEYdZfQjvk/wvlFP4l3mDqS4NMac
txx1lyYGa0gX4DGhb7aGwBb3qwCdSX7szuYNHHq5Clf9TGQMqc49RFC2TGNRrpSw
BZFRmyzhMsqx/dLcNIBLfz4B+SUw+yiwNKo3krYCJfqgNy0cW8sF121yWI3tPzqr
kD8kEbCa5GvxmsdT
-----END CERTIFICATE-----"));
DevDefined.OAuth.Framework.OAuthContext context = new DevDefined.OAuth.Framework.OAuthContext
{
//RawUri = request.Url,
RawUri = CleanUri(request.Url),
Cookies = new NameValueCollection(),
Headers = request.Headers,
RequestMethod = request.HttpMethod,
FormEncodedParameters = new NameValueCollection(),
QueryParameters = new NameValueCollection(request.QueryString)
};
// do I need to set them manually?.. let's try..
context.ConsumerKey = request.QueryString[ "oauth_consumer_key" ];
context.Timestamp = request.QueryString[ "oauth_timestamp" ];
context.Nonce = request.QueryString[ "oauth_nonce" ];
context.Signature = request.QueryString[ "oauth_signature" ];
var signer = new DevDefined.OAuth.Framework.Signing.OAuthContextSigner();
DevDefined.OAuth.Framework.SigningContext signingContext = new DevDefined.OAuth.Framework.SigningContext();
// use context.ConsumerKey to fetch information required for signature validation for this consumer.
signingContext.Algorithm = cert.PublicKey.Key;
//signingContext.ConsumerSecret; // if there is a consumer secret
return (signer.ValidateSignature(context, signingContext));
}
そして、ここでのサンプルリクエストです:
のURL(I は、URLを変更し、セキュリティ上の理由用ビット) :http://www.maxmax.co.cc:7677/?oauth_signature=b58RqdQ0Atnrvvy6Qi81BRv1fhmXIQEl3hY++Wi7kiinSOhWq7mluhsapEi/GvCUG6RjrYVowwTcoi MqqmVCasFlON7zU7Yyi8nOUAoClpoft0BXbT5xyNUmLOxT k47tmjWVMLniaOieVUEQLwP2yycH6hiWkf2gFWGsu9LHZbE = & oauth_nonce = 14611349243983507 &のOAuth _version = 1.0 & oauth_body_hash = 2jmj7l5rSw0yVb/vlWAYkK/YBwk = & oauth_signature_method = RSA-SHA1 & oauth_consumer_key = naver.com & xoauth_sign ature_publickey =のhttp:& //nsocialcontainer.com/server/naver_socialapp_public.cer xoauth_public_key =のhttp://nsocialcontainer.com/server /naver_socialapp_public.cer & opensocial_owner_id = 1400000000010946792 & opensocial_app_id = 25992 & oauth_timestamp = 1296334075
HTTPMETHOD:GET
のUserAgent:Jakarta CommonsのHttpClientを-/ 3.1
のQueryString
- oauth_signature:b58RqdQ0Atnrvvy6Qi81BRv1fhmXIQEl3hY ++ Wi7kiinSOhWq7mluhsapEi/GvCUG6RjrYVowwTcoiMqqmVCasFlON7zU7Yyi8nOUAoClpoft0BX bT5xyNUmLOxTk47tmjWVMLniaOieVUEQLwP2yycH6hiWkf2gFWGsu9LHZbE =
- oauth_nonce:14611349243983507 - oauth_version:1.0
- oauth_body_hash:2jmj7l5rSw0yVb/vlWAYkK/YBwk =
- oauth_signature_method:RSA-SHA1
- oauth_consumer_key:naver.com
- xoauth_signature_publickeyます:http:
- xoauth_public_key //nsocialcontainer.com/server/naver_socialapp_public.cerます:http://nsocialcontainer.com/server/naver_socialapp_public。CER
- opensocial_owner_id:1400000000010946792
- opensocial_app_id:25992
- oauth_timestamp:1296334075
ヘッダ
- X-転送先の場合:61.75.38.242
- X-Shindigの-DOS :オン - 許可 - エンコーディング:gzip、デフレート
- ホスト:www.maxmax.co .ccに:7677
- 体: ""
私は、何の例外をエラーメッセージを取得しませんが、isValidRequest2は()も、常に有効な要求と 'false' に戻ります。
私は間違って使用する必要があります。 ご協力いただければ幸いです! この質問についてご不明な点がありましたら、お尋ねください。
ありがとう!!!!あなたはおそらく、使用しているライブラリのバージョンは何
エラーは...ですか? –
何が問題なのですか? –
申し訳ありません。問題は.. isValidRequest2()は、有効なリクエストでも常に「false」を返します。 – wooohoh