我开始使用SAP's SAPUI5 framework,我正在尝试单点登录以使用登录令牌(MYSAPSSO2),但我没有看到任何可以获取令牌或附加令牌的地方到OData HTTP请求。我上面链接的博客文章中的示例使用了用户名/密码但不使用令牌:
// Specify the SAP Gateway SalesOrder service as an OData model
var salesOrderService =
"https://gw.esworkplace.sap.com/sap/opu/sdata/IWFND/SALESORDER",
// The SalesOrder service requires authentication
// get the username/password from the SDN page.
username = "[username]",
password = "[password]",
// SAP Gateway only supports XML, so don't use JSON
asJson = false,
salesOrderModel = new ODataModel(salesOrderService, asJson, username, password)
即使我查看SDK中提供的ODataModel.js文件,构造函数也不会使用登录令牌:
/**
* Constructor for a new ODataModel.
*
* @param {string} sServiceUrl required - base uri of the service to request data from
* @param {string} [bJSON] (optional) true to request data as JSON
* @param {string} [sUser] (optional) user
* @param {string} [sPassword] (optional) password
*
* @class
* Model implementation for oData format
*
* @extends sap.ui.model.Model
*
* @author SAP AG
* @version 1.2.0
*
* @constructor
* @public
*/
我很好奇(虽然它是新的,如果有人对SAPUI5的SSO / MYSAPSSO2登录令牌有任何经验,我也不会感到惊讶,如果没有人知道这一点)。
答案 0 :(得分:5)
我是您所引用的博客的作者。让我试着回答你的问题。
您在3月15日的评论描述了一种代理方法。您应该尝试做的是,一旦您的代理收到了SSO令牌,您应该使用SET-COOKIE标头将其传递给客户端。
因此,当您成功通过SAP身份验证时,您会获得一个SSO令牌作为响应的HTTP标头。
E.g。
set-cookie:MYSAPSSO2 = AjQxMDM ..... BABhHAFcA%3d%3d;路径= /;域= esworkplace.sap.com
您的代理应该将其传递到客户端的浏览器并将域名更改为代理的域名,否则客户端将不会使用它。
set-cookie:MYSAPSSO2 = AjQxMDM ..... BABhHAFcA%3d%3d;路径= /;域= yourproxydomain.com
下次浏览器向您的代理发出请求时,它会自动在请求标头中包含此会话cookie,如下所示:
Cookie:MYSAPSSO2 = AjQxMDMBABhH ......%2fjmaRu5sSb28M6rEg%3d%3d
您的代理可以从HTTP请求标头中读取该Cookie并使用它来拨打电话。
我希望这会有所帮助。
答案 1 :(得分:2)
我负责SAPUI5 - 虽然我不是100%确定我是否完全理解这个问题,但我会尽力回答。 SAPUI5调用读取数据使用XMLHttpRequests,因此所有证书或cookie都会自动与请求一起发送。此外,Gateway预计将接受这些(有效)证书。 因此,根据Istak的回答并使用具有适当域的cookie,它应该在UI5中不需要API就能正常工作。
无论如何,如果我错过了什么,请详细解释。
祝你好运 斯蒂芬
答案 2 :(得分:0)
不确定SAPUI5和oData,我已经将MYSAPSSO2令牌与基于Java EE web应用程序/ sencha touch的应用程序一起使用,这些应用程序将sto SAP后端系统与SSO连接起来。您只需将令牌作为cookie传递给http请求。
有很多方法可以做到这一点,我使用的方法是SimpleClientHttpRequestFactory,或者你可以在UrlConnection本身中这样做。