คู่มือนี้อธิบายชุดฟีเจอร์ที่ส่งสัญญาณความน่าเชื่อถือเพิ่มเติมเกี่ยวกับบัญชี Google สัญญาณความน่าเชื่อถือเหล่านี้ช่วยให้ระบบจัดการบัญชี ตัดสินใจตามความเสี่ยงได้ในระหว่างการลงชื่อสมัครใช้ การสร้างบัญชี และในภายหลังสำหรับผู้ใช้ที่กลับมา
ตั้งค่า
หากต้องการรับการอ้างสิทธิ์เพิ่มเติม คุณต้องเผยแพร่ ยืนยัน และเปิดใช้ฟีเจอร์ชุดความปลอดภัยของแอป
วิธียืนยันว่าแอปได้รับการเผยแพร่และยืนยันแล้ว
- เปิด Google Auth Platform
- เลือกหรือสร้างโปรเจ็กต์สำหรับแอป
- คลิกกลุ่มเป้าหมายในเมนู
- ตรวจสอบว่าสถานะการเผยแพร่เป็นในเวอร์ชันที่ใช้งานจริง
- คลิกศูนย์การยืนยันในเมนู
ตรวจสอบว่าสถานะการยืนยันเป็นยืนยันแล้ว
ดูข้อมูลเพิ่มเติมได้ที่ศูนย์ช่วยเหลือเกี่ยวกับการยืนยันแอป OAuth
วิธีเปิดใช้การอ้างสิทธิ์ auth_time
- เปิด Google Auth Platform
- เลือกหรือสร้างโปรเจ็กต์สำหรับแอป
- คลิกการตั้งค่าในเมนู
- ในส่วนการตั้งค่าขั้นสูง ให้เลือกการอ้างสิทธิ์อายุเซสชันเพื่อเปิดใช้
auth_time
ฟีเจอร์ที่รองรับ
ส่วนนี้จะอธิบายฟีเจอร์แต่ละอย่างที่รวมกันเป็นแพ็กเกจความปลอดภัย
auth_time
auth_time การอ้างสิทธิ์เป็นส่วนมาตรฐานของโปรโตคอล OpenID Connect
ซึ่งให้ข้อมูลเกี่ยวกับเวลาที่ผู้ใช้ปลายทางตรวจสอบสิทธิ์กับ Google ล่าสุด
เป็นตัวเลข JSON ที่แสดงจำนวนวินาทีที่ผ่านไปนับตั้งแต่ Epoch ของ Unix (1 มกราคม 1970, 00:00:00 UTC) และเป็นเวลาที่ผู้ใช้ตรวจสอบสิทธิ์ครั้งล่าสุด
โดยถือเป็นไทม์แสตมป์ที่ระบุเหตุการณ์การเข้าสู่ระบบครั้งล่าสุดของผู้ใช้ในบัญชี Google จากอุปกรณ์หรือเบราว์เซอร์ปัจจุบัน
การอ้างสิทธิ์นี้จะรวมอยู่ในโทเค็นรหัส ซึ่งเป็นโทเค็นเว็บ JSON (JWT)
ที่มีข้อมูลที่ยืนยันแล้วเกี่ยวกับการตรวจสอบสิทธิ์และผู้ใช้
auth_time การอ้างสิทธิ์มีประโยชน์ต่อแอปพลิเคชันของคุณเนื่องจากช่วยให้คุณ
ระบุได้ว่าผู้ใช้เข้าสู่ระบบบัญชี Google ในอุปกรณ์หรือเบราว์เซอร์ที่ใช้
เมื่อใด ซึ่งอาจมีความสำคัญเป็นพิเศษสำหรับ
วัตถุประสงค์ด้านความปลอดภัย เช่น
การตัดสินใจอย่างรอบคอบว่าแอปของคุณควรแสดงคำถามในการตรวจสอบสิทธิ์แบบเพิ่มขั้นตอนก่อนที่จะดำเนินการของผู้ใช้ที่ละเอียดอ่อน เช่น การลบบัญชี การเปลี่ยนวิธีการติดต่อของบัญชี หรือการชำระเงิน หรือไม่ Google ไม่รองรับคำขอการตรวจสอบสิทธิ์บัญชี Google อีกครั้ง
ใช้ความใหม่และความเสถียรของเซสชันบัญชี Google ของผู้ใช้เป็น สัญญาณความน่าเชื่อถือ โดยทั่วไปแล้ว
auth_timeค่าล่าสุดเป็นตัวบ่งชี้ ความใหม่ ในขณะที่ค่าที่เก่ากว่าจะบ่งชี้ถึงความเสถียร
สำหรับเว็บแอป การทำงานร่วมกันของเบราว์เซอร์และระบบปฏิบัติการของผู้ใช้
จะถือเป็นเซสชันหลังจากที่ผู้ใช้ลงชื่อเข้าใช้บัญชี Google
นอกจากนี้ เว็บไซต์ยังคงรักษาเซสชันของผู้ใช้แยกต่างหากด้วย ค่าที่ใหม่กว่า
auth_time แสดงว่าผู้ใช้เพิ่งลงชื่อเข้าใช้บัญชี Google
โดยส่วนใหญ่มักเป็นสัญญาณบ่งบอกถึงผู้ใช้ที่ใช้งานอยู่และมีส่วนร่วม ซึ่งอาจตีความได้ว่าเป็น
สัญญาณของความเสี่ยงที่ต่ำกว่า
ในแพลตฟอร์มอุปกรณ์เคลื่อนที่ เช่น Android โดยปกติแล้วผู้ใช้จะลงชื่อเข้าใช้ในอุปกรณ์โดยตรง
โดยใช้วิธีการทางชีวมิติ เช่น การสแกนลายนิ้วมือหรือใบหน้า และการปลดล็อกด้วย PIN หรือรูปแบบเฉพาะของอุปกรณ์
แอปและแพลตฟอร์มบนอุปกรณ์เคลื่อนที่มักใช้วิธีการตรวจสอบสิทธิ์ตามแพลตฟอร์มเหล่านี้
แทนที่จะสร้างเซสชันใหม่กับ
Google ซึ่งส่งผลให้มีการลงชื่อเข้าใช้บัญชี Google ไม่บ่อยนักและมีการอัปเดตauth_timeที่เกี่ยวข้อง ดังนั้นค่า auth_time ล่าสุดอาจส่งสัญญาณถึงการเปลี่ยนแปลง
ในเซสชันบัญชี Google ที่ใช้งานมานาน ซึ่งจะทำให้ความเสี่ยงเพิ่มขึ้น
สัญญาณความน่าเชื่อถือเป็นเรื่องที่ซับซ้อน auth_time คาดว่าจะใช้ร่วมกับสัญญาณอื่นๆ เช่น มีการเปิดใช้การตรวจสอบสิทธิ์แบบหลายปัจจัย (MFA) หรือไม่
วิธีการตรวจสอบสิทธิ์ที่ใช้ และระยะเวลาของเซสชันผู้ใช้ระหว่างแอปพลิเคชันกับแพลตฟอร์มของคุณ
คำขอ auth_time
วิธีการเฉพาะที่ใช้ในการขอauth_timeจะแตกต่างกันไปตาม API
ที่ใช้ แต่ API ทุกรายการจะมีพารามิเตอร์ claims ที่ไม่บังคับเพื่อขอauth_time
โปรโตคอล OIDC
เมื่อใช้แพลตฟอร์ม OAuth โดยตรง ให้ขอ auth_time โดยเพิ่มลงในพารามิเตอร์คำขอการอ้างสิทธิ์ที่ไม่บังคับ ตั้งค่าของid_token
ฟิลด์ของออบเจ็กต์ JSON ของการอ้างสิทธิ์เป็น {"auth_time":{"essential":true}} เช่น
https://accounts.google.com/o/oauth2/v2/auth? response_type=id_token& client_id=YOUR_CLIENT_ID& scope=openid email profile& redirect_uri=https://example.com/user-login& nonce=123-456-7890& claims={"id_token":{"auth_time":{"essential":true}}}
ดูข้อมูลเพิ่มเติมได้ที่ OpenID Connect
GIS สำหรับเว็บ
ไลบรารีลงชื่อเข้าใช้ด้วย Google สำหรับเว็บมี API 2 รายการ ได้แก่ HTML และ JavaScript
เพื่อขอการอ้างสิทธิ์เพิ่มเติม เช่น ขอ auth_time โดยใช้
JavaScript API
<html>
<body>
<script src="https://accounts.google.com/gsi/client" async></script>
<script>
window.onload = function () {
google.accounts.id.initialize({
client_id: "YOUR_WEB_CLIENT_ID",
callback: function(rsp) { console.log(rsp.credential); },
essential_claims: "auth_time",
});
google.accounts.id.renderButton(
document.getElementById("buttonDiv"),
{ type: "standard", size: "large" }
);
}
</script>
<div id="buttonDiv"></div>
</body>
</html>ดูข้อมูลเพิ่มเติมได้ที่ลงชื่อเข้าใช้ด้วย Google สำหรับเว็บ
GIS สำหรับ Android
ใช้เมธอด setClaims และออบเจ็กต์ Claim เพื่อขอ auth_time
อัปเดตทรัพยากร Dependency ของบิลด์เพื่อใช้ไลบรารี androidx.credentials:credentials-play-services-auth และ com.google.android.libraries.identity.googleid:googleid เวอร์ชันล่าสุด
สร้างอินสแตนซ์ของClaimออบเจ็กต์ประเภท auth_time โดยใช้ setClaims เพื่อเพิ่ม
ตัวเลือกการลงชื่อเข้าใช้
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder() .setAutoSelectEnabled(true) .setFilterByAuthorizedAccounts(true) .setServerClientId(WEB_CLIENT_ID) .setNonce("NONCE") .setClaims(ImmutableList.of(new Claim("auth_time", true))) .build()
ดูข้อมูลเพิ่มเติมได้ที่หัวข้อตรวจสอบสิทธิ์ผู้ใช้ด้วยการลงชื่อเข้าใช้ด้วย Google
การตอบกลับ auth_time
เมื่อรวมการอ้างสิทธิ์ auth_time ไว้ในคำขอ การอ้างสิทธิ์ดังกล่าวจะปรากฏในการตอบกลับเพย์โหลดของโทเค็น
ID พร้อมกับการอ้างสิทธิ์มาตรฐานอื่นๆ เช่น iss (ผู้ออก)
sub (เรื่อง) aud (กลุ่มเป้าหมาย) และ exp (เวลาหมดอายุ) ค่าของข้ออ้างสิทธิ์ auth_time คือตัวเลข JSON ที่แสดงจำนวนวินาทีที่ผ่านไปตั้งแต่ Epoch ของ Unix (1 มกราคม 1970, 00:00:00 UTC) จนถึงเวลาที่การตรวจสอบสิทธิ์ผู้ใช้เกิดขึ้นครั้งล่าสุด
นี่คือตัวอย่างโทเค็นรหัสที่ถอดรหัสแล้ว
ซึ่งมีauth_timeการอ้างสิทธิ์
{ "iss": "https://accounts.google.com", "azp": "YOUR_CLIENT_ID", "aud": "YOUR_CLIENT_ID", "sub": "117726431651943698600", "email": "alice@example.com", "email_verified": true, "nonce": "123-456-7890", "auth_time": 1748875426, "nbf": 1748880889, "name": "Elisa Beckett", "picture": "https://lh3.googleusercontent.com/a/default-user=s96-c", "given_name": "Elisa", "family_name": "Beckett", "iat": 1748881189, "exp": 1748884789, "jti": "8b5d7ce345787d5dbf14ce6e08a8f88ee8c9b5b1" }
นอกจากนี้ โทเค็นรหัสยังมีคำกล่าวอ้าง iat (ออกที่) ซึ่งระบุเวลาที่ออก JWT การเปรียบเทียบการอ้างสิทธิ์ iat และ auth_time จะช่วยให้คุณ
ระบุเวลาที่ผ่านไปนับตั้งแต่การตรวจสอบสิทธิ์ครั้งล่าสุดของผู้ใช้เมื่อเทียบกับเวลาที่
สร้างโทเค็นรหัสที่เฉพาะเจาะจง เช่น หาก iat คือ 1748881189 และ auth_time คือ 1748875426 ความแตกต่างคือ 5763 วินาที ซึ่งแสดงถึงเวลาที่ผ่านไป 1 ชั่วโมง 36 นาที และ 3 วินาที