SAP ABAP Netweaver伺服器的標準登入方式講解
最近Jerry把這個公眾號之前釋出的總共230篇文章按照類別整理了一系列合集出來,比如所有的ABAP文章,放在了這個合集裡: 汪子熙的ABAP合集。
本文繼續介紹ABAP裡的一個知識點:ABAP Netweaver伺服器的登入方式(Standard Logon Procedure).
本文的英文版最先釋出於SAP社群部落格,我當時負責處理客戶報過來的關於SAP CRM Web Service的incident,遇到一個HTTP 401錯誤訊息的知識點,發現我理解得不夠清楚,因此把SAP幫助文件找來研究了一番,寫下了這篇部落格:
Learn more detail about Standard logon procedure
我們在事務碼SICF裡隨便開啟一個節點,在標籤頁Logon Data裡發現Procedure這個欄位,設定的預設值為Standard,按F1可以檢視幫助文件。
如果對於SICF節點在ABAP Netweaver伺服器裡扮演的角色感興趣,可以參考Jerry的文章: 一個13年ABAP老兵的建議:瞭解這些基礎知識,對ABAP開發有百利而無一害。
Logon Procedure幫助文件連結: https:// help.sap.com/saphelp_me 60/helpdata/en/a9/c8b14025a5c54ee10000000a1550b0/content.htm?no_cache=true
文件提到,當Procedure設定為Standard時,登入驗證將會通過下面的順序進行:
(1) Logon using HTTP fields (2) Logon with SSL certificates (3) Logon using SAP Logon Ticket (SSO) (4) HTTP Basic Authentication (5) Logon using SAP user password (SAP RFC logon) (6) Logon using SAML (7) Logon using user data stored in the service
下面我們就通過一些具體的例子,來理解這些不同的登入方式是如何進行的。
例如直接在瀏覽器裡開啟某Web Service的WSDL url:
http://:50078/sap/bc/srt/wsdl/flv_10002A111AD1/bndg_url/sap/bc/srt/rfc/sap/zws_add/506/zjerry1/jerry1?sap-client=506
輸入url敲回車,我能看到期望中的WSDL內容。然而我還觀察到了一些有趣的現象:位址列裡的http自動被轉換成了https,同時工具HTTP Watch裡觀察到了一個HTTP 307重定向。
這個從HTTP協議埠50078自動重定向到HTTPS埠44378的行為,定義在事務碼SMICM的引數裡:
也可以通過事務碼RZ11,檢視引數icm/HTTP/redirect_0的值。
然而,此時我根本沒有指定任何使用者名稱和密碼,為什麼我可以成功看到部署在ABAP Netweaver伺服器上,需要通過登入認證後才能訪問的資源?
這就是標準登入方式之一的Logon using SAP Logon Ticket (SSO-單點登入)在起作用。
摘錄一段SAP幫助文件裡對Logon using SAP Logon Ticket (SSO)的說明:
Logon using SAP Logon Ticket (MYSAPSSO2 cookie field). If no logon data is transferred as form fields or header fields, the system then tries to log on using a logon ticket. To enable this, the cookie field MYSAPSSO2 must be set.
用HTTP Watch(Chrome開發者工具也行)觀察我訪問WSDL發起的HTTP請求,果然發現了一個名為MYSAPSSO2的cookie,這是我之前成功登入伺服器之後,伺服器頒發給客戶端的logon ticket. 登入成功之後,接下來每次再訪問同一伺服器時,瀏覽器都會自動將該cookie設定到HTTP請求裡,達到無需使用者顯式提供登入資訊,也能成功訪問伺服器資源的目的。
當我將這個MYSAPSSO2 cookie清除之後,再次訪問同一資源,又看到了久違的讓我輸入使用者名稱和密碼的彈出對話方塊。
這次輸入使用者名稱和密碼之後,再次看到了WSDL內容,然而此次成功登入,採用的方式不是之前的MYSAPSSO2 Logon Ticket,而是基於使用者名稱和密碼的Basic Authentication方式(下圖藍色高亮區域)。
注意到下圖綠色高亮區域的set-cookie:使用者成功登入後,伺服器頒發的MYSAPSSO2 cookie,通過HTTP響應的set-cookie欄位, 返回給瀏覽器。下一次瀏覽器再訪問該資源時,會自動在HTTP請求裡帶上該cookie欄位,又重新使用MYSAPSSO2 Logon Ticket的方式進行登入認證了。
下面是幾種通過ABAP程式碼來訪問Netweaver伺服器資源時,如何指定登入認證資訊的例子。
例1:ABAP程式碼裡未提供任何登入認證資訊
SAPGUI裡執行上圖的ABAP程式碼,會遇到一個彈出對話方塊,只有手動輸入使用者名稱和密碼,該程式碼才能順利取回資源。
如果新增一行程式碼:
lo_http_client->propertytype_logon_popup = if_http_client=>co_disabled.
可以阻止使用者名稱和密碼輸入的對話方塊彈出,但此時伺服器會直接返回HTTP 401 Unauthorized Error:
例2:在ABAP程式裡提供使用者名稱和密碼的幾種方式
可以通過如下方式提供明文的使用者名稱和密碼:
也可以在事務碼SM59裡建立一個型別為H:HTTP Connection to ABAP System的Destination:
將使用者名稱和密碼維護到這個Destination的Logon & Security頁面的對應欄位去:
然後基於這個Destination建立cl_http_client的例項。這種方式安全性比在程式碼裡直接明文指定使用者名稱和密碼要好一些。
當然我也試過,將MYSAPSSO2的cookie值拷貝出來:
直接通過set_cookie方法設定給cl_http_client的例項,一樣可以成功訪問系統裡的資源。
只是cookie有時效性,會過期,因此在生產場景的程式碼中,需要現用現取。關於ABAP CL_HTTP_CLIENT有關cookie的詳細使用方式,請參考我的部落格:
Regarding cookie manipulation in CL_HTTP_CLIENT to avoid CSRF token validation failure issue
大家下次如果遇到有關HTTP請求和伺服器登入認證的相關問題,不妨按照Jerry本文介紹的方法,通過使用HTTP Watch和Chrome開發者工具,以及查閱SAP幫助文件的方式自行研究,感謝閱讀。
ABAP專題
-
Jerry的ABAP, Java和JavaScript亂燉
-
ABAP開發人員未來應該學些什麼
-
Jerry 2017年的五一小長假:
8種經典排序演算法的ABAP實現
-
Jerry的ABAP原創技術文章合集
-
300行ABAP程式碼實現一個最簡單的區塊鏈原型
-
使用Java+SAP雲平臺+SAP Cloud Connector呼叫ABAP On-Premise系統裡的函式
-
在SAP雲平臺的CloudFoundry環境下消費ABAP On-Premise OData服務
-
ABAP vs Java, 蛙泳 vs 自由泳
-
聊聊C語言和ABAP
-
動手使用ABAP Channel開發一些小工具,提升日常工作效率
-
我用ABAP做過的那些無聊的事情
-
不喜歡SAP GUI?
那試試用Eclipse進行ABAP開發吧
-
使用Visual Studio Code編寫和啟用ABAP程式碼
-
你的ABAP程式給佛祖開過光麼?
來試試Jerry這個小技巧
-
在SAP雲平臺ABAP程式設計環境上編寫第一段ABAP程式
-
SAP官方釋出的ABAP程式設計規範
-
ABAP Code Inspector那些隱藏的功能,您都知道嗎?
-
還在用ABAP進行SAP產品的二次開發?來了解下這種全新的二次開發理念吧
-
ABAP Netweaver體內的那些寄生式程式語言
-
從SAP社群上的一篇部落格開始,聊聊SAP產品命名背後的那份情懷
-
雲端的ABAP Restful服務開發
-
如何在SAP雲平臺ABAP程式設計環境裡把CDS view暴露成OData服務
-
使用abapGit在ABAP On-Premises系統和SAP雲平臺ABAP環境之間進行程式碼傳輸
-
30分鐘用Restful ABAP Programming模型開發一個支援增刪改查的Fiori應用
-
Jerry帶您瞭解Restful ABAP Programming模型系列之二:Action和Validation的實現
-
Jerry帶您瞭解Restful ABAP Programming模型系列之三:
雲端ABAP應用除錯
-
SAP雲平臺上的ABAP程式設計環境裡如何消費第三方服務
-
ABAP開發者上雲的時候到了 - 現在大家可以免費使用SAP雲平臺ABAP環境的試用版了
-
學而不思則罔 - SAP雲平臺ABAP程式設計環境的由來和適用場景
-
SAP雲平臺裡的三叉戟應用
-
如何基於Restful ABAP Programming模型開發並部署一個支援增刪改查的Fiori應用
-
SAP 2019 TechEd Key Note解讀:雲時代下SAP從業人員如何做二次開發?
-
有哪些ABAP關鍵字和語法,到了ABAP雲環境上就沒辦法用了?
-
ABAP開發環境終於支援以駝峰命名法自動格式化ABAP變數名了
-
利用ABAP 740的新關鍵字REDUCE完成一個實際工作任務
-
一段讓人瑟瑟發抖的ABAP程式碼
-
昨日萬聖節ABAP怪獸級程式碼謎團,公佈答案啦
-
介紹一種在ABAP核心態進行內表高效拷貝的方法
-
使用SAP Cloud Application Programming模型開發OData的一個實際例子
-
當ABAP遇見普羅米修斯
-
使用ABAP繪製可伸縮向量圖
-
ABAP開發環境語法高亮的那些事兒
-
SAP錯誤訊息除錯之七種武器:
讓所有的錯誤訊息都能被定位
-
使用ABAP操作Excel的幾種方法
-
SAP GUI裡的收藏夾事務碼管理工具
-
SAP GUI和Windows登錄檔
-
有了Debug許可權就能幹壞事?小心了,你的一舉一動盡在系統監控中
-
ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX這些東東是什麼鬼
-
實現ABAP條件斷點的三種方式
-
使用SAT跟蹤監控從瀏覽器開啟的SAP應用的效能和呼叫棧
-
一個13年ABAP老兵的建議:瞭解這些基礎知識,對ABAP開發有百利而無一害
-
SAP ABAP Netweaver容器化, 不可能完成的任務嗎?
-
SAP產品增強技術回顧
-
SAP API開發方法大全
-
淺談Java和SAP ABAP的靜態代理和動態代理,以及ABAP面向切面程式設計的嘗試
-
SAP ABAP應用伺服器的HTTP響應狀態碼(Status Code)
-
SAP ABAP裡存在Java List這種集合工具類麼?CL_OBJECT_COLLECTION瞭解一下
-
ABAP面試題系列:寫一組會出現死鎖(Deadlock)的ABAP程式
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2689682/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ABAP Netweaver, Hybris Commerce和SAP 雲平臺的登入認證
- SAP ABAP 標準表和其欄位的命名規則講解
- SAP ABAP Netweaver 裡的 ABAP 會話概念會話
- ABAP Netweaver和git的快捷方式Git
- 關於無法用 https 登入 SAP ABAP Netweaver 系統的問題和解決方案HTTP
- SAP ABAP Netweaver和Hybris Commerce的部署策略
- SAP ABAP Netweaver裡的胖介面(fat interface)
- 從ABAP Netweaver的SICF到SAP Kyma的Lambda FunctionFunction
- SAP Hybris和ABAP Netweaver裡的DAO(Data access object)Object
- SAP ABAP Netweaver 裡的使用者會話概念會話
- ABAP Netweaver, SAP Cloud Platform和Kubernetes的使用者區分CloudPlatform
- 如何使用Prometheus採集SAP ABAP Netweaver的應用日誌資料Prometheus應用日誌
- SAP ABAP Netweaver 容器化的一些前沿性研究工作分享
- SAP ABAP 處理 Excel 的標準函式 TEXT_CONVERT_XLS_TO_SAP 介紹試讀版Excel函式
- SAP Commerce Cloud 裡的 Site API 呼叫方式講解CloudAPI
- ABAP Netweaver 和 ABAP Platform 這兩個名詞的辨析Platform
- 使用Java程式通過http post訪問ABAP Netweaver伺服器JavaHTTP伺服器
- 最詳細的 SAP ABAP Web Service 建立和消費步驟講解Web
- 設定SAP標準報表顯示介面預設值的方式
- SAP ABAP的CI/CD解決方案
- SAP Netweaver的負載均衡訊息伺服器 vs CloudFoundry的App Router負載伺服器CloudAPP
- Linux的標準輸入、標準輸出和標準錯誤Linux
- ABAP Netweaver體內的那些寄生式程式語言
- SAP ABAP Function Module 的動態呼叫方式使用方式介紹試讀版Function
- ssh方式登入雲伺服器時設定別名登陸伺服器
- 從 ABAP Netweaver 到 ABAP Platform,我們一直在努力Platform
- 通俗易懂的 SAP ABAP 會話管理(Session Management)概念講解,包含具體的例項會話Session
- keycloak~作為第三方登入的對接標準
- 透過介面標準化ABAP OO開發
- 微信小程式登入方式的修改解決方案微信小程式
- SAP Netweaver和Hybris的資料庫層資料庫
- Netweaver和SAP雲平臺的quota管理
- 遠端伺服器登入軟體,遠端伺服器登入軟體功能介紹,伺服器新增方式伺服器
- scp的免密登入方式
- SAP Hybris的Master Tenant和Netweaver的System ClientASTNaNclient
- SAP掃盲系列之二:SAP ABAP應用伺服器的組成部分伺服器
- 如何把某個網站的SSL Server certificate鏈匯入到ABAP Netweaver系統裡網站Server
- 淺談 SAP ABAP 系統裡的 ALV 輸出方式實現