SAP Python安全库

sap-xssec的Python项目详细描述


说明

此项目是一个名为sap xssec的python客户端库,用于验证xsuaa发出的oauth访问令牌

OAuth授权代码流

典型的web应用程序使用oauth授权代码流进行身份验证,如下所述:

  1. 用户使用浏览器访问Web应用程序。
  2. web应用程序(在典型的sap云平台应用程序中,这是一个应用程序路由器)充当oauth客户端并重定向 到OAuth服务器进行授权。
  3. 身份验证后,Web应用程序使用授权服务器发出的代码请求访问令牌。
  4. web应用程序使用访问令牌从oauth资源服务器请求数据。 OAuth资源服务器使用联机或脱机验证来验证令牌。 对于此验证库,如SAP XSSEC将被使用。
  5. < > >

    alt text

    用法

    要使用此库,必须向库传递应验证的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
    }
    
    

    如果令牌中设置了jkukid,则从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 jwtpy jwt库验证jwt令牌, 将use_sap_py_jwt环境变量更改为true

    要求

    SAP XSSEC需要Python2.7Python3.7

    下载并安装

    当这个包部署到pypi时,您可以简单地添加sapuxssec作为对python项目的依赖项,或者 通过运行pip install sap xssec来安装这个包

    已知问题

    如何获得支持

    在github中打开一个问题。

    许可证

    以下文本应出现在"许可证"部分。

    版权所有(c)2019 SAP SE或SAP关联公司。保留所有权利。 这个文件是根据apache软件许可证v.2授权的 除非在许可文件中另有说明。

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
java JTable无法向新创建的列添加值   java如何调整JEditorPane中编辑区域的大小?   Java通过反射确定未知数组中的数组大小   java Intellij Idea有时无法按其预期的方式构建应用程序   java Swing GUI带有IntelliJ错误“contentPane不能设置为null”从终端编译时   如何将这些通用方法调用从C#转换为Java   在null上找不到java属性或字段“index”   从Java HashMap获取整数值时是否需要调用intValue()方法?   java Android谷歌地图获取相机中的图像块   unix无法捕获JAVA中“who m”命令的输出   java,同时将邮件发送到“收件人”标题“我”中的多个收件人   在java中向链表添加未知数量的节点   无法为Heroku上的discord bot设置java端口   java使用Apache HttpClient进行选项请求   与元素类型“ApplicationName”关联的属性“Application Version”需要java Open quote   Android Studio Java中的两个变量求和