2024年1月17日水曜日

PROC HTTPでトークンを取得するサンプル

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;