Estoy tratando de implementar el protocolo híbrido (OpenId + OAuth) usando PL/SQL. He configurado la autenticación de OpenID con éxito en google para mi sitio http://example.com, donde el usuario se dirige a cuentas de Google para la autenticación. Después de la autenticación exitosa, el usuario se redirige a example.com con OAuthRequestToken adjunto. Estoy tratando de cambiar este token con OAuthAccessToken para acceder a varios servicios de google. El OAutheRequestToken que consigo después híbrido (OpenID + OAuth) de autenticación es como sigue:Implementación PL/SQL OpenID + OAuth - 400 - Solicitud incorrecta
oauth_token = 4/AR17dDMb4xHG3L4WFYLIzkhCj0c7
El oauth_base_string
consigo es el siguiente:
oauth_base_string = GET&https%3A%2F%2Fwww.google.com%2Faccounts%2FOAuthGetAccessToken&oauth_consumer_key%3Dexample.com%26oauth_nonce%3D56575A5754587057576E6C77576B78695757354F%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1308046070%26oauth_version%3D1.0%26oauth_token%3D4%2FAR17dDMb4xHG3L4WFYLIzkhCj0c7
continuación, coloco una solicitud para intercambiar este oauth_token (OAuthRequestToken) con OAuthAccessToken en la cadena de consulta como:
https://www.google.com/accounts/OAuthGetAccessToken?oauth_consumer_key=example.com&oauth_token=4/AR17dDMb4xHG3L4WFYLIzkhCj0c7&oauth_signature_method=HMAC-SHA1&oauth_signature=RpqSLGp5nIGvL8W4vmC8inUfBFQ%3D&oauth_timestamp=1308046070&oauth_nonce=56575A5754587057576E6C77576B78695757354F&oauth_version=1.0
Esto resulta en 400 - Solicitud incorrecta.
He intentado buscar algo similar pero todavía no tuve suerte. This Post de Stack Overflow se ocupa de un problema similar. Se dice
...% escape puede ser un problema
que es un poco confuso.
¿Tenemos que urlencode oauth_signature
param dos veces en la solicitud?
estoy usando el siguiente código para generar oauth_signature
:
oauth_sig_mac := DBMS_CRYPTO.mac (UTL_I18N.string_to_raw
(oauth_base_string,
'AL32UTF8'),DBMS_CRYPTO.hmac_sh1,
UTL_I18N.string_to_raw (oauth_key,
'AL32UTF8'));
oauth_signature := UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode
(oauth_sig_mac));
aquí:
oauth_key := urlencode('oauth-consumer-secret-key') || '&';
Cualquier ayuda es muy apreciada.
Aunque todavía estoy trabajando en esto, aquí es una actualización. Comparé los parámetros de cadena base que genero arriba, individualmente con lo que generan las bibliotecas de PHP/JAVA. La única diferencia que encontré fue la longitud del parámetro 'oauth_nonce'. mientras que las bibliotecas PHP/JAVA generan 'oauth_nonce' de longitud 32, el procedimiento anterior genera 'oauth_nonce' de longitud 40. Modifiqué mi código anterior para generar 'oauth_nonce' de la misma longitud 32. Sin embargo, sigo recibiendo el mismo error: '400 - Solicitud incorrecta'. –
Hola, estoy a punto de implementar algo similar yo. ¿Obtuviste el implementado al final? – mwrf
¿No está omitiendo http: // o https: // en la variable de firma de juramento? –