以 google 為例
他會回傳一個簽名過的 id token
然後你再用 public key 去驗證
這個理論上是無法偽造的
所以用 public key 驗證完後
你可以 100% 信任他是 google 送過來的
基本上大多數的 api 應該都有類似的東西
你可以往 各個 api 的 security 去找相關的功能
補充一下
後端該如何驗這個query是有經過前端驗證過的?
理論上你要把它當成完全沒驗證過的
因為你不應該相信任何前端來的資料
送過來的資料也不一定有經過你的前端
所以任何需要驗證的機敏資料都應該在後端再次驗證
恩恩所以我的問題是怎麼去驗證後端收到的query,不單指前端送來的。
google為例,是有給token,但她的public key是?要怎麼拿到相應的?要如何去驗證?
內文有說怎麼驗證唷
他的 SDK 有提供
const {OAuth2Client} = require('google-auth-library');
const client = new OAuth2Client(CLIENT_ID);
async function verify() {
const ticket = await client.verifyIdToken({
idToken: token,
audience: CLIENT_ID, // Specify the CLIENT_ID of the app that accesses the backend
// Or, if multiple clients access the backend:
//[CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3]
});
const payload = ticket.getPayload();
const userid = payload['sub'];
// If request specified a G Suite domain:
//const domain = payload['hd'];
}
verify().catch(console.error);
大大看的是哪一份文件,用的是:https://github.com/googleapis/google-auth-library-nodejs 這個吧,其他平台像fb等等也提供類似的方式?
他會回傳資料給你,
就知道是驗證過的,
剩下的部分就是自己處理了.
P.S. 題外話, 千端是什麼, 請問有萬端嗎? XD
正常來說,不太可能有辦法偽造id token
因為認真來說,token是由google生成的一種身份証明的編碼。
任何人都不太可能可以取到其它人。如果真的害怕前端容易被人看到的話。
我記得google也有提供php或是java的sdk處理方式。
經過後端來處理也會比較安全。
正常來說,經由前端登入驗証過後token。你後端只需要比對是否有其token再做登入的動作就好。
如果怕危險的話。你可以將其認証的程式碼多一個本機運行確定的動作就好了。
這樣就不用擔心別人用外連的方式來強暴式登入。
目前不知道怎麼驗證這個token,無從比對起。像可能有重複登入,第一次登入等等。
我覺得你沒搞懂第三方登入的原理。我大約說一下流程
1.先跟google請求登入情況,這個登入情況指的是會員是否有登入了google。這時候其實你的站還不算登入。token值是有登入了才會回傳。
2.依照上一步取到的token來處理。先檢查你自已的站,有無符合該token的user。沒有符合就依照google的其它額外資料生成一個user。
有符合就依其user資料來做登入。
所以,你說的什麼第一次登入,重覆登入。完全沒這回事。你的站要處理的只是與google連動的特性而已。
但主體還是你自已的站。google只是多了一層驗証。