访问控制(JWT)

事件订阅服务(ESS) API使用标准SAP Concur OAuth2框架通过JSON Web令牌(JWT)进行身份验证和授权。

身份验证是通过使用表示事件订阅者的JWT完成的。可以通过调用客户端凭证使用OAuth2凭据授予类型。由该授权产生的JWT将具有JWT类型应用程序你的应用程序ID主题的令牌。

对于授权,应用程序需要包含范围events.topic.read以便访问ESS API。这个范围将在客户机凭证授予期间由JWT继承,然后由ESS API检查。

当调用ESS API时,在Post Header中传递JWT:

授权:无记名< JWT >

JWT的客户凭证有效期为60分钟,只能通过客户凭证授予再次获得。

浏览可用的主题

在创建任何订阅之前,需要验证对主题有足够的访问权限。如果该请求返回空响应,则需要与SAP Concur联系人联系,为OAuth2应用程序设置适当的范围。

请求

获得/事件/ v4 /主题

响应

“public.test”

创建一个订阅

要创建订阅,您需要:

  • 通过正确的范围了解并充分访问主题。
  • 使接收端点运行,请参阅终端需求
  • 想出你订阅的唯一名称(id)。订阅名称是全局唯一的,如果该名称已经在使用中,您将得到一个错误。
  • 设置过滤器.*(regexp语法),您可以稍后使用它来过滤不需要的事件类型。

请求

把/事件/ v4 /订阅/ webhook
“id”“my-unique-subscription-id”“过滤”“。*”“主题”“public.test”“webHookConfig”“端点”“https://www.concuress.com/sub/my-valid-endpoint”

请求参数

的名字 类型 格式 描述
Id 字符串 小写字母,数字,”。”和“-” 您唯一的订阅名称。建议你使用一些不言自明的东西。例如:my-company.my-scenario.env.version
过滤器 字符串 正则表达式 允许您减少交付事件到某一类型的数量。示例中,设置eventCreated将只交付此事件类型,其他事件类型将被跳过。设置为”。* "接收主题中的所有事件。
主题 字符串 - 主题,您订阅的事件流。
端点 字符串 URL 事件将被交付的端点。

响应

“消息”"成功保存订阅'my-unique-subscription-id' "

验证您的订阅

您总是可以请求订阅的配置。您可能会注意到,订阅包含一些由于安全性原因不能修改的参数,但可以将它们用于故障排除。

  • applicationId-确定您的应用程序是该订阅的所有者。
  • companyIds-允许您的应用程序访问其数据的公司的uuid列表,并描述了连接公司到您的应用程序的过程在这里
  • 组和范围—用于复杂的访问控制场景。

请求

得到/事件/ v4 /订阅/ my-unique-subscription-id

响应

“id”“my-unique-subscription-id”“主题”“public.test”“过滤”“。*”“webHookConfig”“端点”“https://www.concuress.com/sub/my-valid-endpoint”},“applicationId”“dabd27f0 - 23 - e7 - 415 d - b5e5 - 19 - a7dbe4fb4d”“范围”""“组织”[],“companyIds”[]

响应参数

的名字 类型 格式 描述
Id 字符串 小写和。- \ d 你唯一的订阅名。建议你使用一些不言自明的东西。例如:my-company.my-scenario.env.version
过滤器 字符串 正则表达式 允许您减少交付事件到某一类型的数量。示例中,设置eventCreated将只交付此事件类型,其他事件类型将被跳过。设置为”。* "接收主题中的所有事件。
主题 字符串 - 主题,您订阅的事件流。
端点 字符串 URL 事件将被交付的端点。
applicationId 字符串 UUID 用于生成JWT的伙伴应用程序。应用程序用于建立订阅所有者。
companyIds 列表 uuid的列表 已连接到允许交付事件的合作伙伴应用程序的公司uuid列表。
列表 - 为将来的支持场景保留。
范围 字符串 - 为将来的支持场景保留。

浏览现有的订阅

如果您碰巧忘记了您的订阅名称/id,您总是可以通过调用以下端点检索所有订阅:

请求

/事件/ v4 /订阅

响应

“id”“my-second-unique-subscription-id”“主题”“public.test”“过滤”“。*”“webHookConfig”“端点”“https://www.concuress.com/sub/my-second-valid-endpoint”},“applicationId”“dabd27f0 - 23 - e7 - 415 d - b5e5 - 19 - a7dbe4fb4d”“范围”""“组织”[],“companyIds”[]},“id”“my-unique-subscription-id”“主题”“public.test”“过滤”“。*”“webHookConfig”“端点”“https://www.concuress.com/sub/my-valid-endpoint”},“applicationId”“dabd27f0 - 23 - e7 - 415 d - b5e5 - 19 - a7dbe4fb4d”“范围”""“组织”[],“companyIds”[]

删除你的订阅

请求

删除/事件/ v4 /订阅/ my-unique-subscription-id

响应

“消息”"订阅'my-unique- subscribe -id'标记为删除"

请求示例

PUT /events/v4/subscriptions/webhook HTTP/1.1 Content-Type: application/json

身体

{"id": "my-unique- subscribe -example", "filter": "。*”、“主题”:“公众。"webHookConfig": {"endpoint": "https://www.concuress.com/sub/my-unique-endpoint"}}

旋度

curl - x将https://www-us.api.concursolutions.com/events/v4/subscriptions/webhook \ \ - h的接受 : */*' \ - H接受编码:gzip压缩\ - H的授权:无记名eyJ0e * * * * * MY-SECRET-JWT-HERE ********' \ - H的cache - control: no - cache \ - H的Concur-Correlationid: something-unique-and-trackable \ - H的连接:维生\ - H - type:application/json' \ -H 'Host: www-us.api.concursolutions.com' \ -H 'cache-control: no-cache' \ -d '{"id": "my-unique- subscribe -example-2", "filter": "。*”、“主题”:“公众。"webHookConfig": {"endpoint": "https://www.concuress.com/sub/my-unique-endpoint"}}'