我正在使用SAP S/4 HANA Cloud SDK(S4 SDK)和云应用程序编程模型(CAPM)。我在Neo中有工作流和Fiori工件,它们使用在Cloud Foundry(CF)中运行的S4 SDK服务。然后,S4 SDK服务使用系统用户调用S/4 HANA(公共)云。我已经按照以下链接设置了从Neo到CF的Principle Propagation:
Principal Propagation from the Neo to the Cloud Foundry Environment
我已经开发我的项目几个月了。现在是时候设置对OData服务的基于角色的访问了。例如,我需要确保我有后端验证,以检查只有批准者才能将我的请求的状态设置为“已批准”。
我计划通过在my-service.cds文件中声明多个OData服务来实现这一点。然后使用spring-security,我将只给予那些拥有approvers role-collection的人访问approvers服务的权限。
我在关注这个博客:
Step 7 with SAP S/4HANA Cloud SDK: Secure your Application on SAP Cloud Platform, CloudFoundry
我的xs-security.json看起来像这样:
{
"xsappname": "s4projectcreate",
"tenant-mode": "dedicated",
"description": "Security profile of called application",
"scopes": [
{
"name": "uaa.user",
"description": "UAA"
},
{
"name": "$XSAPPNAME.AdminApprove",
"description": "UAA"
},
{
"name": "$XSAPPNAME.RiskApprove",
"description": "UAA"
}
],
"role-templates": [
{
"name": "Token_Exchange",
"description": "UAA",
"scope-references": [
"uaa.user"
]
},
{
"name": "Admin_Approver",
"description": "Request Admin Approver",
"scope-references": [
"$XSAPPNAME.AdminApprove"
]
},
{
"name": "Risk_Approver",
"description": "Request Risk Approver",
"scope-references": [
"$XSAPPNAME.RiskApprove"
]
}
]
}
我在我的spring-security.xml中做了以下条目(其他如博客所述):
<sec:intercept-url pattern="/odata/v2/ProjCreateApprover/**" access="#oauth2.hasScope('${xs.appname}.AdminApprove')" method="GET" />
<sec:intercept-url pattern="/odata/v2/**" access="isAuthenticated()" method="GET" />
当我去CF驾驶舱(org。级别)并导航到“安全性/角色”部分,我可以创建一个新的角色集合并向其中添加两个角色模板。
然后,我导航到信任配置,在那里我看到SCIA(也称为SAP Cloud Identity)和“Neo”部分。后者是我在设置从Neo到CF的主要传播时配置的。我可以进入任何一个帐户并输入我的用户电子邮件地址。然后,我可以将我的角色集合分配给用户(我)。
问题是,无论我在这里做什么,似乎都无法通过新的安全检查。当我尝试访问受保护的路径时,总是收到以下消息:访问被拒绝access_denied
我应该如何分配这个角色?我是否使用电子邮件地址,因为这通常是CF中的ID?我应该在空间甚至应用程序层面做些什么吗?我需要重新绑定XSUAA服务或其他什么吗?
我在浏览器中测试。如果我还没有会话,它会让我登录。未受保护的服务仍然工作正常。
附录:这是JWT的有效负载。看起来我确实有角色的作用域:
{
"jti": "aa4f13c4c456429ab7d7f**218b1ef86",
"ext_attr": {
"enhancer": "XSUAA",
"zdn": "test**n"
},
"given_name": "P0000**",
"xs.user.attributes": {},
"family_name": "unknown.org",
"sub": "123526eb-fda8-49cf-a507-506**d28efba",
"scope": [
"s4projectcreate!t23.AdminApprove",
"openid",
"s4projectcreate!t23.RiskApprove",
"uaa.user"
],
"client_id": "sb-s4projectcreate!t23",
"cid": "sb-s4projectcreate!t23",
"azp": "sb-s4projectcreate!t23",
"grant_type": "urn:ietf:params:oauth:grant-type:saml2-bearer",
"user_id": "1235**eb-fda8-49cf-a507-506b8d28efba",
"origin": "httpsap1.hana.ondemand.comc3d8**a55",
"user_name": "p0000**",
"email": "P0000**@unknown.org",
"rev_sig": "8f**7376",
"iat": 1552347533,
"exp": 1552390733,
"iss": "http://test**n.localhost:8080/uaa/oauth/token",
"zid": "382217ca-6332-4b03-85ee-8f**85fd903a",
"aud": []
}
1条答案
按热度按时间q3aa05251#
去sap云平台,在你的子帐户u将得到信任管理只需启用它。你将在那里看到你的角色引用,通过这样做,你将被授权访问该服务。