2024年1月17日水曜日

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

PROC HTTPでユーザ名とパスワードを指定してアクセストークンを取得するサンプルです。通常はOAUTH_BEARER=SAS_SERVICES を使うことが多いですが、稀にトークン取得したいというニーズがあります。このコードで?な箇所は認証のヘッダーにsas.cli:をエンコードした値を使っているところです。コロンの前がクライアントのツール、コロンの後にパスワードを指定するのが普通ですが、パスワードは空の状態でエンコードしています。このパラメータはSAS Viya CLIからauth loginするときに--verboseで出力されるデバッグの情報を見てそれに倣っています。クライアントのパスワードが空なのは理解できませんが、ログを見るとそうなっています。時間あるときにPostmanでも同じようにパラメータを指定して動くか確かめます。

  1. /* PROC Sample of using HTTP to obtain an access token. */  
  2. %let client=sas.cli;  
  3. %let cpassword=;  
  4. %let username=alex;  
  5. %let password=hogehoge;  
  6. %let host=%sysget(SAS_SERVICES_URL);  
  7. filename resp "/tmp/foo.txt";  
  8.   
  9. data _null_;  
  10.     attrib buf length=$64;  
  11.     buf=put("&client.:&cpassword.", $base64x64.);  
  12.     put buf=;  
  13.     call symputx('code', compress(buf), 'G');  
  14. run;  
  15.   
  16. proc http method="POST" url="&host./SASLogon/oauth/token"   
  17.         in="grant_type=password%str(&)username=&username.%str(&)password=&password." out=resp timeout=15;  
  18.     headers "authorization"="Basic &code"   
  19.         "Content-Type"="application/x-www-form-urlencoded";  
  20. run;  
  21.   
  22. data _null_;  
  23.     infile resp truncover;  
  24.     input;  
  25.     put _INFILE_;  
  26. run;  

0 件のコメント :

コメントを投稿