Leo Yeh's Blog

SAS Viya (108)

教學目標

初步了解如何透過 REST API 整合 SAS Viya 平台身份驗證機制至應用程式中的基本概念。

重點概念

首先 SAS Viya 平台提供 REST API 能夠讓開發者以 SAS Viya 平台為分析中台客製開發許多以分析應用和模型管理為主的應用程式,然而任何應用程式皆需要有安全控管的機制,此時我們就能夠透過 REST API 整合 SAS Viya 平台身份驗證機制至應用程式中,本篇主要說明透過 Python 開發應用程式整合 SAS Viya 身份驗證機制實作方式,主要有三個步驟,分別為:

  1. 透過 REST API 註冊以密碼為登入方式的客戶端。(第一次註冊)
  2. 透過 REST API 輸入使用者和密碼取得存取憑證。(每次操作)
  3. 透過 REST API 驗證存取憑證是否在有效期間內。(每次操作)

接著透過 REST API 註冊以密碼為登入方式的客戶端,請參考之前所撰寫的「初步了解 SAS Viya 存取 REST API 驗證和授權的基本概念」部落格文章,當註冊完成客戶端之後,我們會取得客戶端 ID 和秘密,此時就能夠透過 REST API 輸入客戶端 ID 和秘密與使用者名稱和密碼取得存取憑證,請參考以下 Python 程式碼。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import json, requests
base_url ='http://<SAS Viya 網址>'
url = base_url + '/SASLogon/oauth/token#password'
headers = {'Accept': 'application/json', 'Consul-Token': 'application/x-www-form-urlencoded'}
data = {
"client_id":"<客戶端 ID>",
"client_secret":"<客戶端秘密>",
"grant_type":"password",
"username":"<使用者帳號>",
"password":"<使用者密碼>"
}
r = requests.post(url, headers=headers, data=data)
try:
access_token = json.loads(r.text)['access_token']
print("登入成功。")
except:
print("登入失敗。")

再來我們透過上述 Python 程式碼成功取得存取憑證之後,此時就代表使用者已經登入成功,下一步就能夠透過 REST API 驗證存取憑證是否在有效期間內,我們主要能夠透過取得授權規則來判斷存取憑證是否在有效期間內,請參考以下 Python 程式碼。

1
2
3
4
5
6
7
8
9
10
11
import json, requests
access_token= '<存取憑證>'
base_url = 'http://<SAS Viya 網址>'
url = base_url + '/authorization/rules'
headers = {'Accept': 'application/vnd.sas.collection+json','Authorization': 'Bearer ' + access_token}
r = requests.get(url, headers=headers)
try:
rules_items = json.loads(r.text)['items']
print("有效存取。")
except:
print("無效存取。")

若存取憑證在有效期間內,則能夠取得有權限存取之授權規則的所有項目,反之若是存取憑證不在有效期間內,則會無法取得有權限存取之授權規則的所有項目,並且主要有兩種原因,第一是因為存取憑證到期,則會返回有「Access token expired」文字的錯誤訊息,第二是因為存取憑證格式不正確無法解析,則會返回「Cannot convert access token to JSON」文字的錯誤訊息,因此透過此 REST API 機制將能夠有效達到資訊安全的防護,避免使用者在未授權的情況下存取應用程式。

1
{"errorCode":0,"message":"Access token expired: …","details":["traceId: 4826703d0252caad","path: /authorization/rules"],"remediation":null,"links":[],"version":2,"httpStatusCode":401}
1
{"errorCode":0,"message":"Cannot convert access token to JSON","details":["correlator: 2484bd6a-07a3-479f-8f08-8f40d984628a","traceId: 72504591fe6a9e33","path: /authorization/rules"],"remediation":null,"links":[],"version":2,"httpStatusCode":401}

最後我們就能夠基於上述三個步驟的實作概念,以 Python 開發實作應用程式整合 SAS Viya 身份驗證機制,至於若要開發網站應用程式的登入畫面,則也能夠套用上述三個步驟的實作概念,像是我們能夠透過 Python 的 Flask 框架建立網站應用程式登入畫面的 API,當使用者輸入帳號和密碼按下登入之後,除了透過 REST API 輸入使用者和密碼取得存取憑證之外,更需要透過「session[“access_token”] = access_token」的 Python 程式碼儲存存取憑證至連線 Session 中,而當使用者按下登出之後,則僅需執行「session.clear()」的 Python 程式碼清除連線 Session 中的存取憑證,至於每個網站操作畫面皆需要先透過「access_token=session[“access_token”]」取得連線 Session 中的存取憑證,再透過 REST API 驗證存取憑證是否在有效期間內,若不在有效期間內或發生異常情況就透過「return redirect(“logon”)」的 Python 程式碼返回登入畫面即可。

總結透過 REST API 整合 SAS Viya 平台身份驗證機制至應用程式僅是客製開發許多以分析應用和模型管理為主之應用程式的第一步,至於下一步就是我們要如何整合現有所提供的 REST API 客製開發應用程式來解決客戶所面臨分析應用和模型管理的問題,更進一步為企業組織帶來更高的商業價值。

相關資源

⬅️ Go back