説明
OpenAPI 2.0の操作のsecurityがimplicitフローを参照すると、クライアントは認可応答でアクセストークンを直接受け取ります。トークンの漏えいや注入の危険があるため、このフローは推奨されません。
想定される影響
リダイレクト中にトークンが漏えいすると、その権限が悪用されるおそれがあります。攻撃者が渡したトークンを受け入れるクライアントでは、意図しないアカウントで操作する危険もあります。
対処方法
PKCEを使う認可コードフローに移行し、securityDefinitionsのフローをaccessCodeに変更してください。操作に必要なスコープと定義を一致させてください。移行を完了するには、実際のクライアントと認可サーバーの変更も必要です。
例
次の例ではpetstore_authの参照を維持し、認可コードフローに変更します。GET操作には定義済みのread:apiスコープだけを要求します。URLは実際のプロバイダーのものに置き換え、PKCEは実際のクライアントとサーバーに実装してください。
変更前
json
{
"swagger": "2.0",
"paths": {
"/": {
"get": {
"security": [
{
"petstore_auth": []
}
]
}
}
},
"securityDefinitions": {
"petstore_auth": {
"type": "oauth2",
"flow": "implicit",
"authorizationUrl": "https://api.my.company.com/oauth/authorize",
"scopes": {
"read:api": "read your apis"
}
}
}
}
変更後
json
{
"swagger": "2.0",
"paths": {
"/": {
"get": {
"security": [
{
"petstore_auth": [
"read:api"
]
}
]
}
}
},
"securityDefinitions": {
"petstore_auth": {
"type": "oauth2",
"flow": "accessCode",
"authorizationUrl": "https://api.my.company.com/oauth/authorize",
"tokenUrl": "https://api.my.company.com/oauth/token",
"scopes": {
"write:api": "modify apis in your account",
"read:api": "read your apis"
}
}
}
}