如何通过Azure代理预身份验证并从SAP服务器访问Odata

2020-09-14 06:09发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


您好专家

我们有一个移动应用程序(使用Xamarin开发工具),并希望使用来自受Azure应用程序代理保护的SAP服务器的Odata服务。 我们在通过代理服务器预身份验证并到达SAP服务器时遇到了一些问题。 我需要一些意见/建议,我们如何才能通过?

这是一个非常复杂的环境,所以请允许我在开始时提供一些背景知识。

涉及的系统

  • SAP FEX是SAP Fiori服务器。 它提供了一些Odata服务。 SAP OAuth令牌也从此处发出。 它接受来自ADFS的SAML身份验证。
  • ADFS – SAP FEX的IDP。 信任关系建立在FEX和ADFS之间。 浏览器SSO工作正常。
  • Azure AD – Azure AD,提供用于从Internet访问的身份验证服务,例如MFA(多因素身份验证)。 它使用ADFS作为身份验证代理。
  • Azure应用程序代理–保护SAP资源的代理服务。 它接受Azure AD身份验证结果,即Azure AD JWT access_token。

内部网场景

Internet场景

我们遵循下面链接中的SAP文档。 而且,我们能够在Intranet中获得Odata服务,该服务在图片中没有Azure AD和Azure应用程序代理。

https://help.sap.com/查看器/e815bb97839a4d83be6c4fca48ee5777/7.51.6/zh-CN/01043cc6765b48cfbc1564a9839a29ee.html

我们还能够通过Microsoft ADAL库从Azure AD获取访问令牌,并且代理服务器可以接受该令牌。 我们在http请求的授权标头中添加了access_token,然后该请求到达了SAP系统,并且由于该请求未带有SAP要求的身份验证,因此我们从SAP系统中收到了HTTP 401错误。

但是,如果我们将SAP身份验证携带到http请求的授权标头中,则无法通过代理身份验证。 我们也不能在同一请求中携带两个授权标头,因为它不允许我这样做。

所以问题是我们如何在互联网场景中同时通过代理身份验证和SAP身份验证并到达Odata服务? 是否有人曾经有过类似的经历并与我分享一些想法?

顺便说一句,浏览器对Odata服务的访问似乎可以从Internet正常运行。 因此,我相信必须有一种方法可以使其在移动应用中正常工作。

谢谢

沉阳

(22.2 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


您好专家

我们有一个移动应用程序(使用Xamarin开发工具),并希望使用来自受Azure应用程序代理保护的SAP服务器的Odata服务。 我们在通过代理服务器预身份验证并到达SAP服务器时遇到了一些问题。 我需要一些意见/建议,我们如何才能通过?

这是一个非常复杂的环境,所以请允许我在开始时提供一些背景知识。

涉及的系统

  • SAP FEX是SAP Fiori服务器。 它提供了一些Odata服务。 SAP OAuth令牌也从此处发出。 它接受来自ADFS的SAML身份验证。
  • ADFS – SAP FEX的IDP。 信任关系建立在FEX和ADFS之间。 浏览器SSO工作正常。
  • Azure AD – Azure AD,提供用于从Internet访问的身份验证服务,例如MFA(多因素身份验证)。 它使用ADFS作为身份验证代理。
  • Azure应用程序代理–保护SAP资源的代理服务。 它接受Azure AD身份验证结果,即Azure AD JWT access_token。

内部网场景

Internet场景

我们遵循下面链接中的SAP文档。 而且,我们能够在Intranet中获得Odata服务,该服务在图片中没有Azure AD和Azure应用程序代理。

https://help.sap.com/查看器/e815bb97839a4d83be6c4fca48ee5777/7.51.6/zh-CN/01043cc6765b48cfbc1564a9839a29ee.html

我们还能够通过Microsoft ADAL库从Azure AD获取访问令牌,并且代理服务器可以接受该令牌。 我们在http请求的授权标头中添加了access_token,然后该请求到达了SAP系统,并且由于该请求未带有SAP要求的身份验证,因此我们从SAP系统中收到了HTTP 401错误。

但是,如果我们将SAP身份验证携带到http请求的授权标头中,则无法通过代理身份验证。 我们也不能在同一请求中携带两个授权标头,因为它不允许我这样做。

所以问题是我们如何在互联网场景中同时通过代理身份验证和SAP身份验证并到达Odata服务? 是否有人曾经有过类似的经历并与我分享一些想法?

顺便说一句,浏览器对Odata服务的访问似乎可以从Internet正常运行。 因此,我相信必须有一种方法可以使其在移动应用中正常工作。

谢谢

沉阳

(22.2 kB)
付费偷看设置
发送
3条回答
当学会了学习
1楼-- · 2020-09-14 07:00

我遵循了下面的文档,它在Intranet场景中正常工作。

https://wiki.scn.sap.com/wiki/display/Security/Leave+Request+Approvals+on+Android+-+OAuth+2.0+powered

黑丝骑士
2楼-- · 2020-09-14 06:55

嗨,托尼,

感谢您的帮助。 是的,我正在使用Azure应用程序代理。

我无法听从您的第一个建议。 Azure代理和我的SAP应用程序都需要身份验证。 为什么我需要禁用AP SSO?

对于第二个建议,令牌SICF服务的登录方法无法修改。 请检查下面的屏幕。

此服务仅支持基本身份验证和SSL证书身份验证。

Climb_Ma
3楼-- · 2020-09-14 07:12

您好Chenyang,

请从stackoverflow中检查此线程:https://stackoverflow.com/questions/29282578/multiple-http-authorization-headers

讨论将多个值放入HTTP授权标头中。 结果参差不齐,因此我不确定Azure和SAP是否支持此方法。 但是,在您的图表中,步骤3&4已经提供了解决此问题的方法。 在步骤4中,您是否设法获得SAP访问令牌? 您遇到什么错误? 在步骤4中,无需将两个授权标头包含在一个请求中,因为此时您已经通过了Azure代理身份验证,并且只要该请求包含Azure会话cookie,它就可以了。

T

一周热门 更多>