Hello,
can someone please help me convert the following (working) cURL command into the PROC HTTP equivalent?
curl -k http://sasviya01.race.sas.com/SASLogon/oauth/token -H "Content-Type: application/x-www-form-urlencoded" -u "sas.cli:" -d "grant_type=password&username=geladm&password=lnxsas"
This is as far as I have got, however I am struggling to understand the -u switch "sas.cli:"
any help much appreciated!
regards,
Richard
Hi @RichardP. I'm not sure where you'll be using the proc http call, but basic auth is not considered best practice from a security standpoint. To answer you question the following call worked for me (I substituted your env values in the example):
filename out TEMP;
filename hdrs TEMP;
proc http url="http://sasviya01.race.sas.com/SASLogon/oauth/token"
method="POST"
auth_basic
Webusername="sas.cli"
webpassword=""
in='grant_type=password&username=geladm&password=lnxsas'
headerout=hdrs
headerout_overwrite
out=out;
headers "Accept"="application/json";
run;
%put return code is: &SYS_PROCHTTP_STATUS_CODE.;
data _null_;
infile out;
input;
put _infile_;
run;
I ran the program in SAS Studio. The first part of the program retrieves the access token. The second part displays the result.
The -u in your original cURL call is for "client_id:client_secret". This is reflected in the proc http call above.
I hope this helps,
Joe
Blog post articles on authentication you may find helpful:
Join us for SAS Community Trivia
SAS Bowl XLIII, The New SAS Developer Portal
Wednesday, August 14, 2024, at 10 a.m. ET | #SASBowl
-u in cURL refers to user name/password for basic authentication. In the below, "sas.cli" would be the username and whatever is after the ":" would be the password.
In PROC HTTP you are using AUTH_NTLM instead of basic authentication. You would instead want to use AUTH_BASIC and WEB_USERNAME and WEB_PASSWORD options.
Hi thanks for your reply. In my cURL command I have a username "geladm" and a password "lnxsas". Therefore I am confused as to where the -u switch information should go. I have tried your suggestion and a whole heap of combinations but I always get an access error.
regards,
Richard
Hi @RichardP. I'm not sure where you'll be using the proc http call, but basic auth is not considered best practice from a security standpoint. To answer you question the following call worked for me (I substituted your env values in the example):
filename out TEMP;
filename hdrs TEMP;
proc http url="http://sasviya01.race.sas.com/SASLogon/oauth/token"
method="POST"
auth_basic
Webusername="sas.cli"
webpassword=""
in='grant_type=password&username=geladm&password=lnxsas'
headerout=hdrs
headerout_overwrite
out=out;
headers "Accept"="application/json";
run;
%put return code is: &SYS_PROCHTTP_STATUS_CODE.;
data _null_;
infile out;
input;
put _infile_;
run;
I ran the program in SAS Studio. The first part of the program retrieves the access token. The second part displays the result.
The -u in your original cURL call is for "client_id:client_secret". This is reflected in the proc http call above.
I hope this helps,
Joe
Blog post articles on authentication you may find helpful:
Join us for SAS Community Trivia
SAS Bowl XLIII, The New SAS Developer Portal
Wednesday, August 14, 2024, at 10 a.m. ET | #SASBowl
Joe,
thank you so much for this!! Your solution worked first time. In response to your remark, I will be creating a simple report showing the tables used in a VA report. I actually posted a question about this (and thank you for your help here as well).
https://communities.sas.com/t5/Developers/Create-a-report-table-relationship-report/m-p/617481
I was following a paper - OpenID Connect Opens the Door to SAS® Viya® APIs. I was trying to create an access token for SAS Studio (duh!) Thanks to your help I now realise that SAS Studio is already a client and therefore gaining an access token is not needed. By adding the OAUTH_BEARER=SAS_SERVICES to the PROC HTTP statement I can take advantage of the authentication which took place with SAS Logon.
many thanks!
Richard
Very helpful. BTW, you may find it a bit easier to display the response JSON to the log using the jsonpp() function :
data _null_;
rc = jsonpp('out','log');
run;
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
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.