Hi All,
To authenticate an API call with a provider we use I need to produce a digest which is proving pretty challenging. The steps to produce are:
I've managed (by much Googling..) to do step one but am at a loss as to how to do steps 2 and 3 in SAS? Has anyone tackled something similar?
I am also making an assumption that the code below is the SAS equivalent of Step 4?
digest = SHA256(concatenated_field_secret) ;
Many thanks in advance, I've tried various attempts but none seem right.
Code so far is (anonymised):
data fields (keep = fields);
*nonce;
nonce = UUIDGEN();
*timestamp-epoch;
dt = datetime();
unixEpoch = dhms('01jan1970'd,0,0,0);
epoch = sum(dt,-unixEpoch);
*fields;
fields = catx('+','CLIENT_ID',nonce,epoch,'POST','https://API_PROVIDER/media/search HTTP/1.1');
run;
warm regards
Steve
Not too sure what step 2 means, all the characters you have encode the same in ASCII and UTF8.
About step 3, this is how to use base64 encoding:
data TEST;
ENCODE = put('12345abcde',$base64x20.);
DECODE = input(ENCODE,$base64x20.);
run;
About step 4, you probably want to use function HASHING_HMAC.
Thanks Chris, really appreciate the response and I'll give your suggestions a try. I have anonymised the post as it had my client specific client-id, is there a way you know of that can encode?
@SteveNZ - The MD5 function works great for anonymising IDs and we are on 9.4M2. We do something like this:
Client_Key = md5(cats('ClientID', Client_ID)),$hex10.);
SHA256 is safer than MD5.
MD5 vulnerabilities have been discovered, so it is no longer recommended for that cryptography.
It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.