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_me60/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的原創文章,請關注公眾號"汪子熙":
總結
以上是生活随笔為你收集整理的SAP ABAP Netweaver服务器的标准登录方式讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 抖音年度报告怎么查2021 2021抖音
- 下一篇: 地理数据可视化:Simple,Not E