Skip to content

Instantly share code, notes, and snippets.

@manhduy
Created January 2, 2020 09:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save manhduy/ace7eee7a7835ed0f11a2f16e50854b1 to your computer and use it in GitHub Desktop.
Save manhduy/ace7eee7a7835ed0f11a2f16e50854b1 to your computer and use it in GitHub Desktop.
Future<Response> get(String url) async {
String wsseHeader = await generateAuthHeader();
final response = await httpClient.get(url,
headers: {
HttpHeaders.contentTypeHeader: 'application/vnd.api+json',
'Authorization': 'WSSE profile="UsernameToken"',
'X-WSSE': wsseHeader
},
);
return response;
}
Future<String> generateAuthHeader() async {
String userName = 'username';
String apiKey = 'apikey';
var uuid = Uuid();
String md5Str = md5.convert(utf8.encode(uuid.v1())).toString();
String none = base64.encode(utf8.encode(md5Str));
String created = DateTime.now().toUtc().toIso8601String();
String input = utf8.decode(base64.decode(none)) +
created + apiKey;
String digest = base64.encode(sha1.convert(utf8.encode(input)).bytes);
String wsseHeader = 'UsernameToken Username="$userName", PasswordDigest="$digest", Nonce="$none", Created="$created"';
return wsseHeader;
}
@manhduy
Copy link
Author

manhduy commented Jan 2, 2020

Flutter - Genearate WSSE header

Flutter http does not support to generate WSSE header. These above code is used for generate the header for http request. I converted from php code:

$userName = 'your username';
$userApiKey = 'your apiKey';
$nonce = base64_encode(substr(md5(uniqid()), 0, 16));
$created  = date('c');
$digest   = base64_encode(sha1(base64_decode($nonce) . $created . $userApiKey, true));

$wsseHeader = "Authorization: WSSE profile=\"UsernameToken\"\n";
$wsseHeader.= sprintf(
    'X-WSSE: UsernameToken Username="%s", PasswordDigest="%s", Nonce="%s", Created="%s"',
    $userName,
    $digest,
    $nonce,
    $created
);

https://doc.oroinc.com/backend/api/using/how-to-use-wsse-authentication/#header-generation

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment