説明
全体の security にAPIキー認証を指定した場合、その認証を使うリクエストではHTTPSでキーを送信する必要があります。暗号化されないHTTPで送ると、通信中にキーが漏えいする可能性があります。
想定される影響
通信を盗み見た人がキーを入手し、そのキーに許可された権限でAPIを呼び出す可能性があります。
対処方法
APIサーバーとクライアントがHTTPSのみを使うように設定し、文書にも反映してください。OpenAPI 3.0では servers のURL、2.0では schemes を確認してください。キーはURLではなくヘッダーで送信し、ログに残さないでください。
例
次のOpenAPI 3.0の抜粋では、APIサーバーのURLをHTTPからHTTPSに変更し、OAuth2を使う選択肢を示しています。OAuth2でもAPI通信にHTTPSが必要です。APIキーを維持してHTTPSとヘッダーを使うこともできます。文書を実際のサーバーとクライアントの設定に合わせてください。
変更前
json
{
"openapi": "3.0.0",
"servers": [{"url": "http://api.example.com"}],
"security": [
{
"apiKeyAuth": []
}
],
"components": {
"securitySchemes": {
"apiKeyAuth": {
"type": "apiKey",
"name": "X-API-Key",
"in": "query"
}
}
}
}
変更後
json
{
"openapi": "3.0.0",
"servers": [{"url": "https://api.example.com"}],
"security": [
{
"OAuth2": [
"read"
]
}
],
"components": {
"securitySchemes": {
"OAuth2": {
"type": "oauth2",
"flows": {
"authorizationCode": {
"authorizationUrl": "https://example.com/oauth/authorize",
"tokenUrl": "https://example.com/oauth/token",
"scopes": {
"read": "read objects in your account"
}
}
}
}
}
}
}