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://<XXXX>: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的原创文章,请关注公众号"汪子熙":


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,924评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,902评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,716评论 0 239
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,783评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,166评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,510评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,784评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,476评论 0 196
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,196评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,459评论 2 243
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,978评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,321评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,964评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,046评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,803评论 0 193
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,530评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,420评论 2 265