説明
個別の操作のsecurity配列に空の要件オブジェクト{}があると、認証なしのアクセスも許可されます。一方、security: {}のように項目自体をオブジェクトにすると、配列を要求するOpenAPIの形式に適合しません。操作ごとの設定は全体の認証要件を上書きします。
想定される影響
空の要件を誤って指定すると、保護すべき操作が匿名アクセスを許可するものとして記載されます。配列の代わりにオブジェクトを指定すると、仕様の検証や関連ツールの処理に失敗するおそれがあります。
対処方法
securityは配列で記述し、認証が必須の操作では空の要件オブジェクトを削除してください。定義済みの方式と必要なスコープを指定するか、操作のsecurityを省略して全体のポリシーを継承してください。
例
変更前のsecurity: {}は無効な形式です。変更後はOAuth2のreadスコープを要求する正しい配列を使用します。例のOAuth2 URLは、実際のプロバイダーのURLに置き換えてください。
変更前
json
{
"openapi": "3.0.0",
"paths": {
"/": {
"get": {
"security": {},
"responses": {
"200": {
"description": "ok"
}
}
}
}
},
"security": [
{
"OAuth2": [
"read"
]
}
],
"info": {
"title": "Simple API overview",
"version": "1.0.0"
},
"components": {
"securitySchemes": {
"OAuth2": {
"type": "oauth2",
"flows": {
"authorizationCode": {
"authorizationUrl": "https://example.com/oauth/authorize",
"tokenUrl": "https://example.com/oauth/token",
"scopes": {
"read": "Read API versions"
}
}
}
}
}
}
}
変更後
json
{
"openapi": "3.0.0",
"paths": {
"/": {
"get": {
"security": [
{
"OAuth2": [
"read"
]
}
],
"responses": {
"200": {
"description": "ok"
}
}
}
}
},
"security": [
{
"OAuth2": [
"read"
]
}
],
"info": {
"title": "Simple API overview",
"version": "1.0.0"
},
"components": {
"securitySchemes": {
"OAuth2": {
"type": "oauth2",
"flows": {
"authorizationCode": {
"authorizationUrl": "https://example.com/oauth/authorize",
"tokenUrl": "https://example.com/oauth/token",
"scopes": {
"read": "Read API versions"
}
}
}
}
}
}
}