ドラフト第13版が先日公開された OAuth 2.0 Security Best Current Practice について、チェックリストとして使えるように推奨事項を整理した。
3.1 Protecting Redirect-Based Flows
- 認可サーバーはリダイレクトURIを完全一致で検証しなければならない(MUST)
- クライアントはリダイレクト時のパラメータを使ったURIへのリダイレクトをすべきでない(SHOULD)
- クライアントはstateもしくはPKCEを使ってCSRFを防止しなければならない(MUST)
- クライアントは認可要求を送信したサーバーからのリダイレクトのみしか処理してはいけない(MUST)
- Authorization Code Grantでは、クライアントはPKCE(OpenID Connectではnouceでも可)を使わなければならない(MUST)
- クライアントはImplicit Grantなどのアクセストークンをリダイレクトで返却するフローを使うべきでない(SHOULD)
3.2 Token Replay Prevention
- 認可サーバーはTLSベースの送信者を制限できるアクセストークンを使うべきである(SHOULD)
- リフレッシュトークンは送信者を制限できるトークンとするか、トークンローテーションを使わなければならない(MUST)
3.3 Access Token Privilege Restriction
- アクセストークンに関連付けられる権限は必要最小限とするべきである(SHOULD)
- アクセストークンを特定のリソースサーバー(理想は1つのリソースサーバー)のみで使えるように制限すべきである(SHOULD)
- アクセストークンを特定のリソースとアクションに対してのみ使えるように制限すべきである(SHOULD)
3.4 Resource Owner Password Credentials Grant
- Resource Owner Password Credentials Grantは使用してはならない(MUST)
3.5 Client Authentication
- 認可サーバーは可能であればクライアント認証を実施すべき(SHOULD)
- クライアント認証には公開鍵ベースの非対称な方式を使うことが推奨される(RECOMMENDED)
3.6 Other Recommendations
- サーバーはclient_idもしくはsubの値をクライアントが指定できるようにすべきでない(SHOULD)