当前位置: 首页 > 知识库问答 >
问题:

Swagger-向同一架构定义添加多个安全参数

南宫浩皛
2023-03-14

目标

为API中发出的每个请求包含多个安全标头

问题

我正在尝试将多个标头添加到我的Swagger YAML安全定义中。我已经搜索了API,但运气不佳,但我发现在进行“尝试此操作”时,我需要选择一个。而不是两者都能使用。这是正确的还是我做了什么不正确的事情?

片段

securityDefinitions:
  userEmail:
    type: apiKey
    name: User Email
    in: header
  clientId:
    type: apiKey
    name: Client Id
    in: header

security: [ { userEmail: [], clientId: []  } ]

另类?

如果我试图做到这一点,这是不可能的……是否可以将这些参数指定为swagger文档中所有rest路径的默认值?

我是本周Swagger的新手,任何发现其他一切都没有问题...但我找不到任何好的例子。

如果能提供任何指导,那将是非常有帮助的,非常感谢

共有2个答案

宰宣
2023-03-14

美洲组织3:https://swagger.io/docs/specification/authentication/

某些 REST API 支持多种身份验证类型。安全性部分允许您使用逻辑 OR 和 AND 组合安全要求,以实现所需的结果。安全性使用以下逻辑:

security:    # A OR B
  - A
  - B

security:    # A AND B
  - A
    B

security:    # (A AND B) OR (C AND D)
  - A
    B
  - C
    D
晋鹤轩
2023-03-14

您的 SecurityDefintions 对象看起来没问题。当心

security: [ { userEmail: [], clientId: []  } ]

这意味着API客户端必须同时使用用户电子邮件身份验证和客户端ID身份验证!你的意思可能是:

security: [ { userEmail: [] }, { clientId: []  } ]

这意味着API客户端必须使用用户电子邮件身份验证或客户端ID身份验证。

为了避免反复重复此定义,您可以使用全局安全性属性,该属性适用于所有没有自己的安保对象的路径:

security: [ { userEmail: [] }, { clientId: []  } ]
paths:
  "/foo":
    get:
    post:

或者利用明确性或多个共同价值的参考:

paths:
  "/foo":
    get:
      security:
        "$ref": "#/definitions/lowSecurity"
    post:
      security:
        "$ref": "#/definitions/highSecurity"
definitions:
  lowSecurity:  [ { foo: [] }, { bar: []  } ]
  highSecurity: [ { foo: [] } ]

Swagger2规范在操作对象下声明:

安全:[安全需求对象]

用于此操作的安全方案的声明。值列表描述了可使用的替代安全方案(即,安全需求之间存在逻辑OR)。此定义覆盖任何声明的顶级安全性。要删除顶级安全声明,可以使用空数组

安全需求对象的描述如下:

列出执行此操作所需的安全方案。对象可以在其中声明多个安全方案,这些方案都是必需的(即方案之间有一个逻辑与)。

每个属性使用的名称必须对应于安全定义中声明的安全方案。

 类似资料:
  • 我有一个自定义验证属性 假设我有一个实现ValidationAttory的HelloWorld类。然后我将此属性应用于我的API中的一个字段。 当我生成Swagger UI时,我得到一个JSON OpenAPI规范,模型显示每个字段的属性,如下所示: 如果我添加了一个必需的标记,如果我使用诸如RegularExpression/Range/StringLength之类的属性,则会显示一个星号,文本

  • 大部分当前web浏览器使用一种将用户和网络结合成一个单一保护域的单片结构。在这样的浏览器中,攻击者可以利用任意代码执行漏洞,盗取敏感信息或者安装恶意软件。在这篇文章里,我们展示了Chromium的安全架构。Chromium有着两个处于独立保护域 的模块:一个是浏览器内核,与操作系统交互,一个是渲染引擎,运行在只有限制权限的沙箱中。这种架构有助于减少高危攻击,而不牺牲与现有网站的兼容性。我们为浏览器

  • 我在swagger 2.0文件中定义了两个可重用参数: 然后在我的路由定义中(在本例中为GET),我尝试这样引用这两个: 如果我使用一个$ref,它似乎工作正常(没有编译错误),但是如果我尝试两个都使用,它会看着我: 此外,如果我在查询字符串中传递这些参数并输出<code>req.swagger。params</code>,我得到一个空对象。我做错了什么? 这是规范的完整SSCCE,生成相同的错误

  • 问题内容: 我正在运行一个基于Java Spring MVC的Web应用程序。它还基于Hybris平台。 现在,已经实现了有关身份验证和授权的基本功能。意味着我们确实有用于会话,有效的用户系统等的过滤器。 但是,我们目前还没有针对诸如XSS和其他可能的攻击之类的安全措施。XSS可能是最大的问题,因为它是最常见的攻击方式。 现在,我不知道……明智地采取什么步骤?我环顾四周,我发现存在像XSS-Fil

  • 问题内容: 我的脚本定义了一个主解析器和多个子解析器。我想将论点应用于一些子解析器。到目前为止,代码如下所示: 如您所见,重复了两次。实际上,我还有更多的次级解析器。有没有一种方法可以遍历现有的子解析器以避免重复? 作为记录,我正在使用Python 2.7 问题答案: 这可以通过定义一个包含公共选项的父解析器来实现: 这将生成以下格式的帮助消息: 输出: 输出: 但是,如果您运行程序,则如果未指定

  • 我试图将一个名为sAMAccountName的新属性添加到一个已经存在的LDAP模式定义中,该定义由IM-LDAP使用UnboundID LDAP SDK读取。 我已经在MatchingGruleUse中添加了attributeTypes条目和sAMAccountName。 对于每个以前存在的属性,调用将返回属性类型。但不是因为我的新属性。 我错过了什么? 10/11/18在@jwilleke评论