kannna5296 / myblog-backend

0 stars 0 forks source link

myblog-backend

MEMO

    public boolean matches(CharSequence rawPassword, String encodedPassword) {
        if (rawPassword == null) {
            throw new IllegalArgumentException("rawPassword cannot be null");
        } else if (encodedPassword != null && encodedPassword.length() != 0) {
            if (!this.BCRYPT_PATTERN.matcher(encodedPassword).matches()) {
                this.logger.warn("Encoded password does not look like BCrypt");
                return false;
            } else {
                return BCrypt.checkpw(rawPassword.toString(), encodedPassword);
            }
        } else {
            this.logger.warn("Empty encoded password");
            return false;
        }
    }
CSRFトークンが含まれるHTTPレスポンスとは、初回のページ読み込みや認証後のレスポンスを指します。このレスポンスで、Spring BootはCSRFトークンをCookieにセットして、フロントエンド側に渡します。

具体的には、ユーザーが初めてアプリにアクセスする際や、ログイン後などにSpring BootがCSRFトークンを生成して、Set-Cookieヘッダーを使ってブラウザに送り、そのトークンをクライアント側で利用できるようにします。

流れの詳細
ユーザーが最初にアプリにアクセス

例えば、ユーザーがフロントエンドのVue.jsアプリケーションを最初に開くと、ブラウザがバックエンドのSpring Bootサーバーに対して初回リクエストを送信します。
Spring BootがCSRFトークンを生成してレスポンス

Spring Securityは、この初回リクエストのレスポンスでCSRFトークンを生成し、レスポンスヘッダーの Set-Cookie を使ってCSRFトークンをブラウザに送ります。このとき、トークンが XSRF-TOKEN という名前でクッキーに保存されます。
http
コードをコピーする
HTTP/1.1 200 OK
Set-Cookie: XSRF-TOKEN=abcdef123456789; Path=/; HttpOnly
Content-Type: application/json
ブラウザがCSRFトークンをクッキーに保存

このXSRF-TOKENというクッキーはブラウザに保存され、Vue.js側ではこのクッキーからCSRFトークンを読み取ることができます。
Vue.jsからの後続リクエスト

次に、ユーザーがフォーム送信やAPIリクエストを行うと、Vue.js側でこのクッキーからCSRFトークンを取得し、リクエストヘッダーに含めてサーバーに送信します。
javascript
コードをコピーする
axios.post('/api/some-endpoint', {
  data: 'someData'
}, {
  headers: {
    'X-XSRF-TOKEN': getCsrfToken()  // ここでクッキーから取得したCSRFトークンをセット
  }
});
どのタイミングでレスポンスが送られるか
最初のページロード:アプリを初めて開いたとき
ログイン成功時:ユーザーがログインして、サーバーが認証情報を返すとき
その他認証が必要なリクエストのレスポンス:例えば、特定の保護されたAPIエンドポイントにアクセスし、サーバーがCSRF保護を有効にしている場合
CSRFトークンは、これらのタイミングでセットされるHTTPレスポンスの一部としてブラウザに送信されます。そのため、Vue.jsアプリケーションはこのクッキーを利用してリクエストにCSRFトークンを含めることが可能になります。

これなんで??

chatGPTに聞いてみた

特徴 Cookie方式 ヘッダ方式 トークンの送信方法 CSRFトークンがCookieに保存され、リクエスト時に含める カスタムヘッダにCSRFトークンを含める クライアントの管理 ブラウザが自動的にCookieを管理 クライアント側でトークンを明示的に管理する必要がある 利用ケース HTMLフォームを使う従来型のWebアプリ JavaScriptフレームワークによるSPAなど、カスタムヘッダを使いやすい