@@ -143,25 +143,31 @@ protected function nonce():string{
143
143
* @throws \chillerlan\OAuth\Core\ProviderException
144
144
*/
145
145
protected function getSignature (string $ url , array $ params , string $ method , string $ accessTokenSecret = null ):string {
146
- $ parseURL = parseUrl ($ url );
146
+ $ parsed = parseUrl ($ url );
147
147
148
- if (!isset ($ parseURL ['host ' ]) || !isset ($ parseURL ['scheme ' ]) || !in_array ($ parseURL ['scheme ' ], ['http ' , 'https ' ], true )){
148
+ if (!isset ($ parsed ['host ' ]) || !isset ($ parsed ['scheme ' ]) || !in_array ($ parsed ['scheme ' ], ['http ' , 'https ' ], true )){
149
149
throw new ProviderException ('getSignature: invalid url ' );
150
150
}
151
151
152
- $ query = $ this ->parseQuery ($ parseURL ['query ' ] ?? '' );
152
+ $ query = $ this ->parseQuery ($ parsed ['query ' ] ?? '' );
153
153
$ signatureParams = array_merge ($ query , $ params );
154
154
155
155
unset($ signatureParams ['oauth_signature ' ]);
156
156
157
- $ key = implode ( ' & ' , array_map ( ' rawurlencode ' , [ $ this -> options -> secret , $ accessTokenSecret ?? '' ]));
157
+ // https://tools.ietf.org/html/rfc5849#section-3.4.1.1
158
158
$ data = array_map ('rawurlencode ' , [
159
159
strtoupper ($ method ?? 'POST ' ),
160
- $ parseURL ['scheme ' ].':// ' .$ parseURL ['host ' ].($ parseURL ['path ' ] ?? '' ),
160
+ $ parsed ['scheme ' ].':// ' .$ parsed ['host ' ].($ parsed ['path ' ] ?? '' ),
161
161
$ this ->buildQuery ($ signatureParams ),
162
162
]);
163
163
164
- return base64_encode (hash_hmac ('sha1 ' , implode ('& ' , $ data ), $ key , true ));
164
+ // https://tools.ietf.org/html/rfc5849#section-3.4.2
165
+ $ key = array_map ('rawurlencode ' , [
166
+ $ this ->options ->secret ,
167
+ $ accessTokenSecret ?? ''
168
+ ]);
169
+
170
+ return base64_encode (hash_hmac ('sha1 ' , implode ('& ' , $ data ), implode ('& ' , $ key ), true ));
165
171
}
166
172
167
173
/**
0 commit comments