説明
OpenAPI 3.0のOAuth2のflows.passwordは、クライアントがユーザーのパスワードを受け取ってトークンを要求するフローを定義します。ユーザーの認証情報がクライアントに渡るため、RFC 9700はこのフローの使用を禁止しています。
想定される影響
クライアントが侵害されると、アクセストークンだけでなく元のパスワードも漏えいするおそれがあります。複数段階の確認やフィッシングに強い認証にも適していません。
対処方法
ユーザーが操作する認可には、PKCEを適用したauthorizationCodeを使用してください。HTTPSの認可・トークンURLを指定し、実際のクライアントと認可サーバーを変更してから、パスワードフローを無効にしてください。
例
次の抜粋ではpetstore_authのフロー定義を変更します。URLは実際のプロバイダーのものに置き換えてください。PKCEの適用と、この方式を要求するsecurityの設定も実際の構成で確認してください。
変更前
json
{
"openapi": "3.0.0",
"components": {
"securitySchemes": {
"petstore_auth": {
"type": "oauth2",
"flows": {
"password": {
"tokenUrl": "https://example.com/api/oauth/token",
"scopes": {
"write:pets": "modify pets in your account",
"read:pets": "read your pets"
}
}
}
}
}
}
}
変更後
json
{
"openapi": "3.0.0",
"components": {
"securitySchemes": {
"petstore_auth": {
"type": "oauth2",
"flows": {
"authorizationCode": {
"authorizationUrl": "https://example.org/api/oauth/dialog",
"tokenUrl": "https://example.com/api/oauth/token",
"scopes": {
"write:pets": "modify pets in your account",
"read:pets": "read your pets"
}
}
}
}
}
}
}