แพ็กเกจความปลอดภัย

คู่มือนี้อธิบายชุดฟีเจอร์ที่ส่งสัญญาณความน่าเชื่อถือเพิ่มเติมเกี่ยวกับบัญชี Google สัญญาณความน่าเชื่อถือเหล่านี้ช่วยให้ระบบจัดการบัญชี ตัดสินใจตามความเสี่ยงได้ในระหว่างการลงชื่อสมัครใช้ การสร้างบัญชี และในภายหลังสำหรับผู้ใช้ที่กลับมา

ตั้งค่า

หากต้องการรับการอ้างสิทธิ์เพิ่มเติม คุณต้องเผยแพร่ ยืนยัน และเปิดใช้ฟีเจอร์ชุดความปลอดภัยของแอป

วิธียืนยันว่าแอปได้รับการเผยแพร่และยืนยันแล้ว

  1. เปิด Google Auth Platform
  2. เลือกหรือสร้างโปรเจ็กต์สำหรับแอป
  3. คลิกกลุ่มเป้าหมายในเมนู
  4. ตรวจสอบว่าสถานะการเผยแพร่เป็นในเวอร์ชันที่ใช้งานจริง
  5. คลิกศูนย์การยืนยันในเมนู
  6. ตรวจสอบว่าสถานะการยืนยันเป็นยืนยันแล้ว

    ดูข้อมูลเพิ่มเติมได้ที่ศูนย์ช่วยเหลือเกี่ยวกับการยืนยันแอป OAuth

วิธีเปิดใช้การอ้างสิทธิ์ auth_time

  1. เปิด Google Auth Platform
  2. เลือกหรือสร้างโปรเจ็กต์สำหรับแอป
  3. คลิกการตั้งค่าในเมนู
  4. ในส่วนการตั้งค่าขั้นสูง ให้เลือกการอ้างสิทธิ์อายุเซสชันเพื่อเปิดใช้ 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 วินาที