PROC HTTPでユーザ名とパスワードを指定してアクセストークンを取得するサンプルです。通常はOAUTH_BEARER=SAS_SERVICES を使うことが多いですが、稀にトークン取得したいというニーズがあります。このコードで?な箇所は認証のヘッダーにsas.cli:をエンコードした値を使っているところです。コロンの前がクライアントのツール、コロンの後にパスワードを指定するのが普通ですが、パスワードは空の状態でエンコードしています。このパラメータはSAS Viya CLIからauth loginするときに--verboseで出力されるデバッグの情報を見てそれに倣っています。クライアントのパスワードが空なのは理解できませんが、ログを見るとそうなっています。時間あるときにPostmanでも同じようにパラメータを指定して動くか確かめます。
/* PROC Sample of using HTTP to obtain an access token. */
%let client=sas.cli;
%let cpassword=;
%let username=alex;
%let password=hogehoge;
%let host=%sysget(SAS_SERVICES_URL);
filename resp "/tmp/foo.txt";
data _null_;
attrib buf length=$64;
buf=put("&client.:&cpassword.", $base64x64.);
put buf=;
call symputx('code', compress(buf), 'G');
run;
proc http method="POST" url="&host./SASLogon/oauth/token"
in="grant_type=password%str(&)username=&username.%str(&)password=&password." out=resp timeout=15;
headers "authorization"="Basic &code"
"Content-Type"="application/x-www-form-urlencoded";
run;
data _null_;
infile resp truncover;
input;
put _INFILE_;
run;