Проверка подписанных запросов в C # - PullRequest
2 голосов
/ 30 января 2011

Я пытаюсь проверить входящие подписанные запросы на моем сервере C #. Запросы поступают с социальной платформы (Naver). Все, что я получаю от них, это сертификат (ниже).

Я использую DevDefinedOAuth

http://code.google.com/p/devdefined-tools/

У них есть статья на эту тему вики.

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 ) );
        }

А вот пример запроса: ( I немного изменил URL по соображениям безопасности )

Я не получаю никаких сообщений об ошибках, никаких исключений, но isValidRequest2 () всегда возвращает false даже с действительными запросами.

Я, должно быть, использую это неправильно. Любая помощь будет оценена!! Если у вас есть какие-либо вопросы по этому вопросу, пожалуйста, задавайте.

Спасибо !!!!

1 Ответ

0 голосов
/ 30 января 2011

Какую версию библиотеки вы используете, возможно, попробуйте собрать ее из исходного кода на github, если вы еще этого не сделали:

https://github.com/bittercoder/DevDefined.OAuth

Кроме того, стоит отметить, что некоторыеРеализации платформы opensocial возвращают URL-адреса с дополнительными амперсандами (такими, как раньше): подробности смотрите в нижней части этого блога здесь:

http://blog.bittercoder.com/PermaLink,guid,4f387bde-7ed6-480b-952b-bbc0ead9ebfb.aspx

Если у вас все еще возникают проблемы, еслиВы могли бы предоставить ссылку на полный пример своего потребительского кода (я предлагаю создать суть: https://gist.github.com/gists), которая была бы действительно полезна для понимания, в чем заключается проблема.

...