SAP Python安全库
sap-xssec的Python项目详细描述
说明
此项目是一个名为sap xssec的python客户端库,用于验证xsuaa发出的oauth访问令牌。
OAuth授权代码流
典型的web应用程序使用oauth授权代码流进行身份验证,如下所述:
- 用户使用浏览器访问Web应用程序。
- web应用程序(在典型的sap云平台应用程序中,这是一个应用程序路由器)充当oauth客户端并重定向 到OAuth服务器进行授权。
- 身份验证后,Web应用程序使用授权服务器发出的代码请求访问令牌。
- web应用程序使用访问令牌从oauth资源服务器请求数据。 OAuth资源服务器使用联机或脱机验证来验证令牌。 对于此验证库,如SAP XSSEC将被使用。 < > >
用法
要使用此库,必须向库传递应验证的jwt访问令牌。 下面的示例依赖于用户和凭据,您应该用上下文中的用户和凭据替换它们。
当接收到http请求时,从容器中调用此api的典型用例必须
检查请求者是否有权执行此方法。
在这种情况下,访问令牌包含在授权头中(使用关键字承载者
)。
您可以移除前缀
承载符
并将剩余的字符串(就像下面的示例中的访问令牌
)传递给api。
fromsapimportxssecfromcfenvimportAppEnvenv=AppEnv()uaa_service=env.get_service(name='<uaa_service_name>').credentialssecurity_context=xssec.create_security_context(access_token,uaa_service)
注意:上面的示例使用模块cfenv
检索uaa的配置
服务实例。
uaa_service
是一个dict,它包含必要的客户端信息,看起来像:
{
'clientid' : 'example_clientid' // the id of the client
'clientsecret': 'example_clientsecret' // the secret of the client
'url': 'example_url' // the url of the uaa
'verificationkey': 'example_verification key' // (optional) the key used for the verfication of the token
}
如果令牌中设置了jku
和kid
,则从uaa请求密钥。作为回退,在
使用uaa_服务
。请求的密钥被缓存15分钟,以避免在UAA上大量加载。
创建功能xssec.create_security_context
将用于最终用户令牌(例如,对于grant_typepassword
或者授权类型授权代码
),其中用户信息预期在令牌中可用,因此在安全上下文中可用。
创建安全上下文
还接受授予类型的令牌客户端凭据
。
这将导致创建一个有限的securitycontext,其中某些函数不可用。
有关详细信息,请参阅wiki中的api描述。
例如,可以使用security\u上下文对象来检查用户是否具有所需的作用域:
security_context.check_scope('uaa.user')
或接收用户的客户端ID:
security_context.get_clientid()
有关api的更多详细信息,请参见wiki
离线验证
sap_xssec提供了访问令牌的离线验证,无需对uaa进行额外的调用。
此脱机验证的信任是通过将xs uaa服务实例绑定到应用程序来创建的。
在环境变量vcap_services的credentials部分中,包含用于验证令牌的密钥。
默认情况下,脱机验证检查将只接受用于同一uaa标识区域中的同一oauth2客户端的令牌。
这是有意义的,并将涵盖绝大多数使用caSES。
但是,如果应用程序绝对希望使用为不同OAuth2客户端或不同标识区域颁发的令牌,
可以在名为sap jwt_trust_acl
的环境变量中指定此项的访问控制列表(acl)项。
OAuth客户机的名称具有前缀sb-
,内容是一个JSON字符串,包含一个标识区域数组和OAuth2客户机。
要信任任何OAuth2客户端和/或标识区域,可以使用*号。
如果要启用另一个(外部)应用程序来使用应用程序的某些作用域,可以在xs security.json
文件(如下例所示)的作用域中添加一个授权的应用程序
标记。标记的值是允许请求具有所示作用域的标记的应用程序列表。
{"xsappname":"sample-leave-request-app","description":"This sample application demos leave requests","scopes":[{"name":"$XSAPPNAME.createLR","description":"create leave requests"},{"name":"$XSAPPNAME.approveLR","description":"approve leave requests","granted-apps":["MobileApprovals"]}],"attributes":[{"name":"costcenter","description":"costcenter","valueType":"string"}],"role-templates":[{"name":"employee","description":"Role for creating leave requests","scope-references":["$XSAPPNAME.createLR","JobScheduler.scheduleJobs"],"attribute-references":["costcenter"]},{"name":"manager","description":"Role for creating and approving leave requests","scope-references":["$XSAPPNAME.createLR","$XSAPPNAME.approveLR","JobScheduler.scheduleJobs"],"attribute-references":["costcenter"]}]}
配置
要配置是否应使用sap jwt或py jwt库验证jwt令牌,
将use_sap_py_jwt
环境变量更改为true
要求
SAP XSSEC需要Python2.7或Python3.7
下载并安装
当这个包部署到pypi时,您可以简单地添加sapuxssec
作为对python项目的依赖项,或者
通过运行pip install sap xssec来安装这个包
已知问题
如何获得支持
在github中打开一个问题。
许可证
以下文本应出现在"许可证"部分。
版权所有(c)2019 SAP SE或SAP关联公司。保留所有权利。 这个文件是根据apache软件许可证v.2授权的 除非在许可文件中另有说明。