我有一個帶有 Express API 服務器的 React 前端,我正在嘗試將 JWT 存盤在安全的 httpOnly cookie 中以進行授權。下面是我的代碼的相關部分,其中包括我從無數的 Google/StackOverflow 搜索中嘗試過的所有內容。
我錯過了一些簡單的東西嗎?我試圖避免將 JWT 存盤在 中localStorage,但我現在不知所措。似乎沒有任何效果。
API ( https://api.mydomain.com ):
app.use(cors({
credentials: true,
exposedHeaders: ['SET-COOKIE'],
origin: 'https://staging.mydomain.com',
}));
app.post('/auth/login', (request, response) => {
...
response.cookie('jwt', JWT.sign({ id: user.id }, ...), {
domain: 'mydomain.com',
httpOnly: true,
sameSite: 'none',
secure: true,
});
response.json(user);
});
網站(https://staging.mydomain.com):
await fetch('https://api.mydomain.com/auth/login', {
body: JSON.stringify({ ... }),
credentials: 'include',
headers: {
'Content-Type': 'application/json',
},
method: 'POST',
});
我set-cookie在回應中看到了標頭,但我沒有看到開發者工具中設定的 cookie,它也沒有在后續 API 請求中傳遞。
Response Headers:
access-control-allow-credentials: true
access-control-allow-origin: https://staging.mydomain.com
access-control-expose-headers: SET-COOKIE
set-cookie: jwt=abcde*********.abcde*********.abcde*********; Domain=mydomain.com; Path=/; HttpOnly; Secure; SameSite=None
uj5u.com熱心網友回復:
在您的服務器上,當您設定 cookie 時,您可以嘗試在域前添加一個點。前導點表示 cookie 也對子域有效。
response.cookie('jwt', JWT.sign({ id: user.id }, ...), {
domain: '.mydomain.com',
httpOnly: true,
sameSite: 'none',
secure: true,
});
當客戶端(此處為https://staging.mydomain.com)收到Set-Cookie帶有尾隨點域的回應標頭時,它將接受 cookie,因為現在 cookie 對子域也有效。
順便說一句,我發現Cookie 編輯器對于除錯 cookie 真的很有幫助。
希望這個回答對你有幫助!:)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/391396.html
