ไลบรารี Kerberos ที่สมบูรณ์ที่สร้างขึ้นด้วยโค้ดที่ได้รับการจัดการทั้งหมดโดยไม่ต้องพึ่งพาระบบปฏิบัติการ (จำนวนมาก)
โครงการนี้ได้รับการสนับสนุนโดย .NET Foundation
Microsoft ไม่รองรับไลบรารีนี้อย่างเป็นทางการ หากคุณใช้งานผ่าน ODP.NET ของ Oracle Kerberos.NET จะได้รับการสนับสนุนผ่าน Oracle Support เท่านั้น คุณต้องติดต่อ Oracle Support แม้ว่าคุณจะทราบว่าปัญหาอยู่ใน Kerberos.NET ก็ตาม Oracle Support จะทำงานร่วมกับ Microsoft โดยตรงหากเกิดปัญหาใน Kerberos.NET Microsoft จะปิดกรณีการสนับสนุนที่สร้างขึ้นโดยตรงกับ Microsoft สำหรับ Kerberos.NET
โดยสรุป: Microsoft ไม่ได้รับการสนับสนุน repo นี้อย่างเป็นทางการ แม้ว่าพนักงาน Microsoft บางคนอาจจัดการและมีส่วนร่วมก็ตาม พวกเขากำลังดำเนินการในเวลาว่างหรือบางส่วนเป็นเวลาทำงานสำหรับการใช้งานภายใน โดยไม่มี SLA ใดๆ จาก Microsoft (หรือจากพนักงานของ Microsoft) การใช้งาน ODP.NET ของ Kerberos.NET ได้รับการสนับสนุนผ่าน Oracle Support เท่านั้น
ไลบรารี่ที่สร้างใน .NET ที่ให้คุณทำงานกับข้อความ Kerberos คุณสามารถเรียกใช้ไคลเอนต์ โฮสต์ KDC ของคุณเอง หรือเพียงแค่ตรวจสอบตั๋วที่เข้ามา โดยตั้งใจให้มีน้ำหนักเบาที่สุดเท่าที่จะเป็นไปได้
มีข้อมูลเจาะลึกเกี่ยวกับการออกแบบ Kerberos.NET และคุ้มค่าแก่การอ่าน
โปรเจ็กต์นี้ส่วนใหญ่เป็นไลบรารี แต่ยังรวมไปถึงเครื่องมือที่มีประโยชน์มากมายที่รวมไลบรารีไว้เพื่อช่วยสร้างแอปพลิเคชันและแก้ไขปัญหา Kerberos
คุณจะพบตัวติดตั้งส่วนขยาย Fiddler ใต้รุ่นต่างๆ ที่ด้านขวามือของหน้านี้ สำหรับข้อมูลเพิ่มเติม โปรดอ่านบทความเกี่ยวกับวิธีการติดตั้งและใช้งาน
เครื่องมือบรรทัดคำสั่ง Bruce คือชุดของยูทิลิตี้ที่ให้คุณโต้ตอบกับส่วนประกอบไลบรารี Kerberos.NET และพร้อมใช้งานผ่าน dotnet tool install bruce -g
มันมีเครื่องมือที่มีประโยชน์สำหรับสิ่งต่าง ๆ เช่น แคชตั๋วและการจัดการแท็บแป้นพิมพ์ นอกจากนี้ยังมียูทิลิตี้ Ticket Decoder ตามที่ระบุด้านล่าง เครื่องมือนี้เป็นไปตามมาตรฐานบรรทัดคำสั่งของ MIT และ Heimdal ไม่มากก็น้อย แต่สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเครื่องมือทั้งหมดในประเภทชุด help
จากบรรทัดคำสั่ง Bruce
ดูโพสต์บล็อกนี้เกี่ยวกับวิธีการใช้เครื่องมือ
ดูและแก้ไขไฟล์กำหนดค่า krb5
ถอดรหัส Kerberos/เจรจาตั๋ว และเลือกถอดรหัสได้หากคุณรู้ความลับ
ลบไฟล์แคชตั๋วใด ๆ
ตรวจสอบสิทธิ์ผู้ใช้และขอ TGT พร้อมตัวเลือกมากมายสำหรับคำขอ
ดูตั๋วทั้งหมดในแคชและเลือกขอตั๋วเพิ่มได้
ส่ง "ping" AS-REQ ไปยัง KDC สำหรับผู้ใช้ปัจจุบันหรือผู้ใช้ที่ให้มาเพื่อรับข้อมูลเมตาสำหรับผู้ใช้
ดูและจัดการไฟล์แท็บคีย์พร้อมรองรับการแก้ไขปัญหา
ขอตั๋วสำหรับผู้ใช้ปัจจุบันและจัดรูปแบบรายละเอียดในลักษณะที่เป็นประโยชน์
เครื่องมือจะแสดงข้อความบันทึกที่เป็นประโยชน์หากคุณส่งผ่านพารามิเตอร์บรรทัดคำสั่ง /verbose
ไลบรารีจะทำงานบนแพลตฟอร์ม .NET Standard 2.0 ที่รองรับทั้งหมด โดยมีข้อจำกัดบางประการ
มีสองวิธีที่คุณสามารถใช้ห้องสมุดนี้ได้ สิ่งแรกคือการดาวน์โหลดโค้ดและสร้างมันในเครื่อง ตัวเลือกที่สองที่ดีกว่าคือใช้ nuget
PM> ติดตั้งแพ็คเกจ Kerberos.NET
คุณสามารถใช้ไลบรารีนี้ได้สามวิธี
ลูกค้ามีความเรียบง่ายโดยเจตนาเมื่อเปรียบเทียบกับลูกค้าที่พบในแพลตฟอร์มอื่น มีคุณลักษณะครบถ้วนและรองรับการสร้างข้อความ SPNego
var client = new KerberosClient();var kerbCred = new KerberosPasswordCredential("[email protected]", "userP@ssw0rd!");รอ client.Authenticate(kerbCred);var ticket = รอ client.GetServiceTicket("host/appservice .corp.identityintervention.com");var header = "เจรจาต่อรอง " + Convert.ToBase64String(ticket.EncodeGssApi().ToArray());
การโฮสต์ KDC นั้นซับซ้อนกว่าเล็กน้อยเนื่องจากต้องฟังจากพอร์ตใดพอร์ตหนึ่ง โดยปกติคุณจะฟังบนพอร์ต 88
var port = 88;var options = ใหม่ ListenerOptions{ListeningOn = new IPEndPoint(IPAddress.Loopback, port),DefaultRealm = "corp.identityintervention.com".ToUpper(),RealmLocator = realmName => new MyRealmService(realmName)};var Listener = KdcServiceListener ใหม่ (ตัวเลือก); รอ Listener.Start ();
ผู้ฟังจะรอจนกว่า listener.Stop()
จะถูกเรียก (หรือกำจัด)
การรับรองความถูกต้องของตั๋วเกิดขึ้นในสองขั้นตอน ขั้นตอนแรกจะตรวจสอบความถูกต้องของตั๋วผ่าน IKerberosValidator
โดยมีการใช้งาน KerberosValidator
เป็นค่าเริ่มต้น ขั้นตอนที่สองเกี่ยวข้องกับการแปลงตั๋วเป็น ClaimsIdentity
ที่ใช้งานได้ ( KerberosIdentity : ClaimsIdentity
โดยเฉพาะ) ซึ่งเกิดขึ้นใน KerberosAuthenticator
วิธีที่ง่ายที่สุดในการเริ่มต้นคือการสร้าง KerberosAuthenticator
ใหม่และเรียก Authenticate
หากคุณต้องการปรับแต่งพฤติกรรมของ Conversion คุณสามารถทำได้โดยการแทนที่เมธอด ConvertTicket(DecryptedData data)
var Authenticator = KerberosAuthenticator ใหม่ (KeyTable ใหม่ (File.ReadAllBytes ("sample.keytab"))); var Identity = Authenticator.Authenticate ("YIIHCAYGKwYBBQUCoIIG..."); Assert.IsNotNull (identity); ชื่อ var = Identity.Name ;Assert.IsFalse(string.IsNullOrWhitespace(ชื่อ));
โปรดทราบว่าพารามิเตอร์ Constructor สำหรับ Authenticator คือ KeyTable
KeyTable
เป็นรูปแบบทั่วไปที่ใช้จัดเก็บคีย์บนแพลตฟอร์มอื่น คุณสามารถใช้ไฟล์ที่สร้างโดยเครื่องมือเช่น ktpass
หรือคุณสามารถส่ง KerberosKey
ในระหว่างการสร้างอินสแตนซ์และมันจะมีผลเช่นเดียวกัน
โดยทั่วไปแพ็คเกจ nuget จะได้รับการอัปเดตอยู่เสมอหากมีการเปลี่ยนแปลงใด ๆ ในไลบรารีหลัก
เฮ้ มันได้ผล! เพียงเพิ่มแพ็คเกจ nuget เป็นข้อมูลอ้างอิงแล้วไปได้เลย
ข้อมูลเพิ่มเติม
Active Directory จำเป็นต้องมีข้อมูลประจำตัวที่ตรงกับโดเมนที่โทเค็นถูกส่ง ข้อมูลประจำตัวนี้สามารถเป็นผู้ใช้หรือวัตถุคอมพิวเตอร์ใน Active Directory ได้ แต่จำเป็นต้องกำหนดค่าอย่างถูกต้อง ซึ่งหมายความว่าจำเป็นต้องมี Service Principal Name (SPN) คุณสามารถดูคำแนะนำในการตั้งค่าผู้ใช้ทดสอบได้ที่นี่
Active Directory รองรับการอ้างสิทธิ์ตั้งแต่เซิร์ฟเวอร์ 2012 ในขณะนั้นคุณสามารถเข้าถึงการอ้างสิทธิ์ผ่านหลักการของ Windows หรือเวทย์มนตร์ ADFS เท่านั้น ขณะนี้ Kerberos.NET รองรับการแยกวิเคราะห์การอ้างสิทธิ์ในตั๋ว Kerberos แล้ว ดูคู่มือการเรียกร้องค่าสินไหมทดแทนสำหรับข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่านี้
Kerberos.NET รองรับรูปแบบไฟล์ KeyTable (keytab) สำหรับการส่งผ่านคีย์ที่ใช้ในการถอดรหัสและตรวจสอบความถูกต้องของตั๋ว Kerberos รูปแบบไฟล์ keytab เป็นรูปแบบทั่วไปที่หลายแพลตฟอร์มใช้สำหรับจัดเก็บคีย์ คุณสามารถสร้างไฟล์เหล่านี้บน Windows ได้โดยใช้ยูทิลิตีบรรทัดคำสั่ง ktpass
ซึ่งเป็นส่วนหนึ่งของชุด Remote Server Administration Tools (RSAT) คุณสามารถติดตั้งบน เซิร์ฟเวอร์ ผ่าน PowerShell (หรือผ่านกล่องโต้ตอบเพิ่มส่วนประกอบของ Windows):
เพิ่ม WindowsFeature RSAT
จากนั้นคุณสามารถสร้างไฟล์ keytab ได้โดยการรันคำสั่งต่อไปนี้:
ktpass /princ HTTP/[email protected] /mapuser IDENTITYINTERserver01$ /ผ่าน P@ssw0rd! /out example.keytab /crypto ทั้งหมด /PTYPE KRB5_NT_SRV_INST /ชุด mapop
พารามิเตอร์ princ
ใช้เพื่อระบุ PrincipalName ที่สร้างขึ้น และ mapuser
ซึ่งใช้ในการแมปกับผู้ใช้ใน Active Directory พารามิเตอร์ crypto
ระบุว่าอัลกอริทึมใดควรสร้างรายการ
ตั๋ว AES ได้รับการสนับสนุนโดยกำเนิด ไม่จำเป็นต้องทำอะไรเพิ่มเติม!
ขณะนี้ยังรองรับ SHA256 และ SHA384 ผ่าน RFC8009 อีกด้วย
สำหรับข้อมูลเพิ่มเติม โปรดดูที่ FAST Armoring
ขณะนี้ยังไม่รองรับ แต่อยู่ในแผนงาน
คุณสามารถเพิ่มการสนับสนุนของคุณเองสำหรับอัลกอริธึมอื่น ๆ เช่น DES (ไม่รู้ว่าทำไมคุณถึงทำ แต่...) โดยที่คุณเชื่อมโยงประเภทการเข้ารหัสกับ Func<> ที่สร้างอินสแตนซ์ของตัวถอดรหัสใหม่ ไม่มีอะไรที่จะหยุดคุณไม่ให้ทำกระบวนการนี้ถ้าคุณต้องการ
KerberosRequest.RegisterDecryptor ( ประเภทการเข้ารหัสDES_CBC_MD5, (โทเค็น) => DESMD5DecryptedData ใหม่ (โทเค็น));
การตรวจจับการเล่นซ้ำในตัวใช้ MemoryCache
เพื่อจัดเก็บการอ้างอิงถึงแฮชของตั๋วชั่วคราว ข้อมูลอ้างอิงเหล่านี้จะถูกลบออกเมื่อตั๋วหมดอายุ กระบวนการตรวจจับจะเกิดขึ้นทันทีหลังจากการถอดรหัสทันทีที่มีหมายเลขลำดับตัวตรวจสอบความถูกต้อง
โปรดทราบว่าตรรกะการตรวจจับในตัวไม่ทำงานอย่างมีประสิทธิภาพเมื่อแอปพลิเคชันถูกคลัสเตอร์เนื่องจากแคชไม่ได้แชร์ข้ามเครื่อง การใช้งานในตัวใช้บริการในหน่วยความจำและจะไม่แชร์กับใครเลย
คุณจะต้องสร้างแคชที่ใช้ร่วมกันระหว่างเครื่องเพื่อให้ทำงานได้อย่างถูกต้องในสภาพแวดล้อมแบบคลัสเตอร์ สิ่งนี้ได้รับการปรับปรุงให้ง่ายขึ้นอย่างมากผ่านบริการฉีดการพึ่งพา .NET Core ใหม่ สิ่งที่คุณต้องทำคือลงทะเบียนการใช้งาน IDistributedCache
คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับสิ่งนั้นได้ใน Microsoft Docs
หากคุณต้องการใช้การตรวจจับการเล่นซ้ำของคุณเอง เพียงใช้อินเทอร์เฟซ ITicketReplayValidator
และส่งผ่านในตัวสร้าง KerberosValidator
มีตัวอย่าง!
KerbCrypto ทำงานผ่านรูปแบบโทเค็นที่รองรับ 6 รูปแบบ
rc4-kerberos-ข้อมูล
rc4-spnego-ข้อมูล
aes128-kerberos-data
aes128-spnego-data
aes256-kerberos-ข้อมูล
aes256-spnego-ข้อมูล
KerbTester เครื่องมือบรรทัดคำสั่งที่ใช้ทดสอบตั๋วจริงและดัมพ์ผลลัพธ์ที่แยกวิเคราะห์
KerberosMiddlewareEndToEndSample ตัวอย่างจากต้นทางถึงปลายทางที่แสดงวิธีที่เซิร์ฟเวอร์พร้อมท์สำหรับการเจรจาต่อรองและการตอบสนองของเบราว์เซอร์ที่จำลอง
KerberosMiddlewareSample ตัวอย่างมิดเดิลแวร์ผ่าน/ไม่ผ่านแบบธรรมดาที่ถอดรหัสตั๋วหากมีอยู่ แต่ไม่เช่นนั้นจะไม่แจ้งให้เจรจา
KerberosWebSample โครงการเว็บตัวอย่างที่ตั้งใจจะโฮสต์ใน IIS ที่พร้อมท์ให้เจรจาและตรวจสอบตั๋วที่เข้ามาจากเบราว์เซอร์
โครงการนี้มีใบอนุญาต MIT ดูไฟล์ใบอนุญาตสำหรับรายละเอียดเพิ่มเติม โปรดดูไฟล์ประกาศสำหรับข้อมูลเพิ่มเติมเกี่ยวกับใบอนุญาตของโครงการที่ขึ้นอยู่กับ
ห้องสมุดนี้มาพร้อมกับยูทิลิตี้เสริมในการถอดรหัสตั๋วบริการ มันใช้งานง่าย เพียงคัดลอกสำเนาตั๋วที่เข้ารหัส Base64 ลงในกล่องข้อความด้านซ้าย มันจะถอดรหัสข้อความที่ไม่ได้เข้ารหัสหากคุณไม่ได้ระบุรหัส มันจะพยายามถอดรหัสข้อความหากคุณระบุรหัส คุณไม่จำเป็นต้องระบุค่าโฮสต์หากตั๋วถูกเข้ารหัสโดยใช้ RC4 แต่จะต้องใช้ค่าโฮสต์หากเข้ารหัสด้วย AES (เพื่อรับเกลือ) หรือคุณสามารถรวมไฟล์ keytab ได้หากคุณมีไฟล์นั้นด้วย
คุณสามารถเปิดใช้งานโดยใช้เครื่องมือ Bruce พร้อมด้วย bruce kdecode
ตัวถอดรหัสจะแปลงตั๋ว Kerberos เป็นมุมมองต้นไม้ที่มีโครงสร้าง กระบวนการนี้คือ Kerberos ASN.1 => JSON () => การเรนเดอร์ Tree View นี่คือ JSON ระดับกลางที่แสดงข้อมูลทั้งหมดที่มีอยู่ในตั๋ว
- "คำขอ": {"KrbApReq": { "ProtocolVersionNumber": 5, "MessageType": "KRB_AP_REQ", "ApOptions": "สงวนไว้", "Ticket": {"TicketNumber": 5,"Realm": "CORP. IDENTITYINTERVENTION.COM", "SName": { "ชื่อที่ผ่านการรับรองครบถ้วน": "desktop-h71o9uu", "IsServiceName": false, "Type": "NT_PRINCIPAL", "Name": ["desktop-h71o9uu" ]},"EncryptedPart": { "EType": "AES256_CTS_HMAC_SHA1_96", "KeyVersionNumber": 3 "รหัส": "Vo4uodU2...snip...XBwjmsshgyjs+Vr+A=="} }, "ตัวรับรองความถูกต้อง": {"EType": "AES256_CTS_HMAC_SHA1_96", "KeyVersionNumber": null, "Cipher": "NnLmEFkmO3HXCS...snip. ..up0YmNW5AicQVvvk" }},"KrbApRep": null - "ถอดรหัสแล้ว": {"ตัวเลือก": "สงวน", "EType": "AES256_CTS_HMAC_SHA1_96", "SName": { "FullyQualifiedName": "desktop-h71o9uu", "IsServiceName": false, "ประเภท": "NT_PRINCIPAL", "ชื่อ": ["desktop-h71o9uu" ]},"Authenticator": { "AuthenticatorVersionNumber": 5, "Realm": "CORP.IDENTITYINTERVENTION.COM", "CName": {"FullyQualifiedName": "jack", "IsServiceName": false, "Type": " NT_PRINCIPAL","ชื่อ": [ "แจ็ค"] }, "เช็คซัม": {"ประเภท": "32771", "Checksum": "EAAAAAAAAAAAAAAAAAAAAA8QAAA" }, "CuSec": 305, "CTime": "2021-04-21T17:38:11+00:00", "คีย์ย่อย": {"การใช้งาน": "ไม่ทราบ ","ประเภทอี": "AES256_CTS_HMAC_SHA1_96", "KeyValue": "nPIQrMQu/tpUV3dmeIJYjdUCnpg0sVDjFGHt8EK94EM=" }, "SequenceNumber": 404160760, "ข้อมูลการอนุญาต": [{ "ประเภท": "AdIfRelevant", "ข้อมูล": "MIHTMD+gBAICAI2hNwQ1M...snip...BJAE8ATgAuAEMATwBNAA=="} ]},"Ticket": { "Flags": ["EncryptedPreAuthentication", "PreAuthenticated", "ต่ออายุได้", "ส่งต่อได้" ], "คีย์": {"การใช้งาน": "ไม่ทราบ", "EType": "AES256_CTS_HMAC_SHA1_96", "KeyValue": "gXZ5AIsNAdQSo/qdEzkfw3RrLhhypyuG+YcZwqdX9mk=" }, "CRealm": "CORP.IDENTITYINTERVENTION.COM", "CName": {"FullyQualifiedName": "jack", "IsServiceName": false,"ประเภท": "NT_PRINCIPAL", "ชื่อ": [ "แจ็ค"] }, "เปลี่ยนผ่าน": {"ประเภท": "DomainX500Compress", "เนื้อหา": "" }, "AuthTime": "2021-04 -21T17:24:53+00:00", "เวลาเริ่มต้น": "2021-04-21T17:38:11+00:00", "เวลาสิ้นสุด": "2021-04-22T03:24:53+00:00", "ต่ออายุจนถึง": "2021-04-28T17:24:53 +00:00", "CAddr": null, "ข้อมูลการอนุญาต": [{ "ประเภท": "AdIfRelevant", "ข้อมูล": "MIIDIjCCAx6gBAICAIChg...snip...muoGI9Mcg0="},{ "ประเภท": "AdIfRelevant", "ข้อมูล": "MF0wP6AEAgIAj...snip...AXg9hCAgAACTDBBAAAAA= "} ]},"DelegationTicket": null,"SessionKey": { "การใช้งาน": null, "EncryptionType": "AES256_CTS_HMAC_SHA1_96", "โฮสต์": null, "PrincipalName": null, "เวอร์ชัน": null, "Salt": "", "รหัสผ่าน": null, "IterationParameter": "", "PasswordBytes": "", "SaltFormat": "ActiveDirectoryService", "RequiresDerivation": false}, "เอียง": "00:05:00" - "คำนวณ": {"ชื่อ": "[email protected]", "ข้อจำกัด": { "KerbAuthDataTokenRestrictions": [{ "RestrictionType": 0, "ข้อจำกัด": {"ธง": "เต็ม" TokenIntegrityLevel": "สูง", "MachineId": "Txr82+sI2kbFmPnkrjldLUfESt/oJzLaWWNqCkOgC7I=" }, "ประเภท": "KerbAuthDataTokenRestrictions"},{ "RestrictionType": 0, "ข้อจำกัด": {"แฟล็ก": "เต็ม", "TokenIntegrityLevel": "สูง", "MachineId" : : "Txr82+sI2kbFmPnkrjldLUfESt/oJzLaWWNqCkOgC7I=" }, "ประเภท": "KerbAuthDataTokenRestrictions"} ], "KerbLocal": [{ "มูลค่า": "EBeD2EICAAAJMMEEAAAAAA==", "ประเภท": "KerbLocal"},{ "มูลค่า": "EBeD2EICAAAJMMEEAAAAAA==", "Type": "KerbLocal"} ], "KerbApOptions": [{ "Options": "ChannelBindingSupported", "Type": "KerbApOptions"} ], "KerbServiceTarget": [{ "ServiceName": "[email protected]", "Type": "KerbServiceTarget"} ], "AdWin2kPac": [{ "Mode": "Server", "DecodingErrors": [], "เวอร์ชัน": 0, "LogonInfo": {"PacType": "LOGON_INFO", "เวลาเข้าสู่ระบบ": "2021-04-21T17:24:53.4021307+00:00"เวลาออกจากระบบ": "0001-01-01T00:00:00+00:00"เวลาเตะ": "0001-01-01T00:00:00 +00:00"PwdLastChangeTime": "2021-01-14T23:55:39.0024458+00:00", "PwdCanChangeTime": "2021-01-15T23:55:39.0024458+00:00", "PwdMustChangeTime": "0001-01-01T00:00:00 +00:00"ชื่อผู้ใช้": "jack", "UserDisplayName": "Jack Handey", "LogonScript": "", "ProfilePath": "", "HomeDirectory": "", "HomeDrive": "", "LogonCount": 99, "BadPasswordCount" : 0,"UserId": 1126,"GroupId": 513,"GroupCount": 6,"GroupIds": [ {"RelativeId": 1132,"แอตทริบิวต์": [ "SE_GROUP_MANDTORY", "SE_GROUP_ENABLED_BY_DEFAULT", "SE_GROUP_ENABLED"] }, {"RelativeId": 1131,"แอตทริบิวต์": [ "SE_GROUP_MANDATORY", "SE_GROUP_ENABLED_BY_DEFAULT", "SE_GROUP_ENABLED"] }, {"RelativeId": 1128,"แอตทริบิวต์": [ "SE_GROUP_MANDATORY", "SE_GROUP_ENABLED_BY_DEFAULT", "SE_GROUP_ENABLED"] }, {"RelativeId": 1130,"แอตทริบิวต์": [ "SE_GROUP_MANDTORY", "SE_GROUP_ENABLED_BY_DEFAULT", "SE_GROUP_ENABLED"] }, {"RelativeId": 513,"แอตทริบิวต์": [ "SE_GROUP_MANDORY", "SE_GROUP_ENABLED_BY_DEFAULT", "SE_GROUP_ENABLED"] }, {"RelativeId": 1129,"แอตทริบิวต์": [ "SE_GROUP_MANDTORY", "SE_GROUP_ENABLED_BY_DEFAULT", "SE_GROUP_ENABLED"] }],"UserFlags": "LOGON_EXTRA_SIDS", "UserSessionKey": "AAAAAAAAAAAAAAAAA==","ServerName": "DC01u0000", "DomainName": "CORPu0000", "DomainId": "S-1-5-21-311626132-1109945507-1757856464", "Reserved1": "AAAAAAAAA=" ,"UserAccountControl": [ "ADS_UF_LOCKOUT", "ADS_UF_NORMAL_ACCOUNT"], "SubAuthStatus": 0, "LastSuccessfulILogon": "1601-01-01T00:00:00+00:00", "LastFailedILogon": "1601-01-01T00:00:00+00:00", "FailedILogonCount": 0, "สงวนไว้ 3": 0, "ExtraSidCount": 1, "ExtraIds": [ {"Sid": "S-1-18 -1"แอตทริบิวต์": [ "SE_GROUP_MANDTORY", "SE_GROUP_ENABLED_BY_DEFAULT", "SE_GROUP_ENABLED"] }], "ResourceDomainId": null, "ResourceGroupCount": 0, "ResourceGroupIds": null, "UserSid": { "Id": 1126, "แอตทริบิวต์": "0", "ค่า ": "S-1-5-21-311626132-1109945507-1757856464-1126"},"GroupSid": { "Id": 513, "แอตทริบิวต์": "0", "ค่า": "S-1-5-21-311626132-1109945507-1757856464-513"},"GroupSids": [ {"Id": 1132,"แอตทริบิวต์": [ "SE_GROUP_MANDATORY", "SE_GROUP_ENABLED_BY_DEFAULT", "SE_GROUP_ENABLED"],"ค่า": "S-1-5-21-311626132-1109945507-1757856464-1132" }, {"รหัส": 1131,"คุณลักษณะ": [ "SE_GROUP_MANDATORY", "SE_GROUP_ENABLED_BY_DEFAULT", "SE_GROUP_ENABLED"], "ค่า": "S-1-5-21-311626132-1109945507-1757856464-1131" }, {"รหัส": 1128,"แอตทริบิวต์": [ "SE_GROUP_MANDATORY", "SE_GROUP_ENABLED_BY_DEFAULT", "SE_GROUP_ENABLED"],"ค่า": "S-1-5-21-311626132-1109945507-1757856464-1128" }, {"Id": 1130,"แอตทริบิวต์": [ "SE_GROUP_MANDORY", "SE_GROUP_ENABLED_BY_DEFAULT", "SE_GROUP_ENABLED"],"ค่า": "S-1-5-21-311626132-1109945507-1757856464-1130" }, {"Id": 513,"แอตทริบิวต์": [ "SE_GROUP_MANDORY", "SE_GROUP_ENABLED_BY_DEFAULT", "SE_GROUP_ENABLED"],"ค่า": "S-1-5-21-311626132-1109945507-1757856464-513" }, {"Id": 1129,"แอตทริบิวต์": [ "SE_GROUP_MANDATORY", "SE_GROUP_ENABLED_BY_DEFAULT", "SE_GROUP_ENABLED"],"ค่า": "S-1-5-21-311626132-1109945507-1757856464-1129" }],"ExtraSids": [ {"Id": 1, "แอตทริบิวต์": "0", "ค่า": "S-1-18-1" }],"ResourceDomainSid": null,"ResourceGroups": [],"DomainSid": { "Id": 1757856464, "คุณสมบัติ": "0", "ค่า": "S-1-5-21-311626132-1109945507-1757856464"} }, "ServerSignature": {"ประเภท": "HMAC_SHA1_96_AES256", "ลายเซ็น": "Q0gnRmxBoh5w0DzS", "RODCIdentifier": 0, "PacType": " 0" }, "CredentialType": null, "KdcSignature": {"ประเภท": "HMAC_SHA1_96_AES256", "ลายเซ็น": "HVsreq5rqBiPTHIN", "RODCIdentifier": 0, "PacType": "0" }, "ClientClaims": null, "DeviceClaims": null, "ข้อมูลลูกค้า": {"ClientId": "2021-04-21T17:24:53+00:00","Name": "jack","PacType": "CLIENT_NAME_TICKET_INFO" }, "UpnDomainInformation": {"Upn": "jack@ corp.identityintervention.com", "โดเมน": "CORP.IDENTITYINTERVENTION.COM", "ธง": "0", "PacType": "UPN_DOMAIN_INFO" }, "DelegationInformation": null, "HasRequiredFields": true, "Type": "AdWin2kPac"} ]},"ValidationMode": "Pac", "การอ้างสิทธิ์": [ { "พิมพ์": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/sid","Value": "S-1-5-21-311626132-1109945507-1757856464-1126" }, {"ประเภท ": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname","Value": "Jack Handey" }, {"ประเภท": "http://schemas.xmlsoap.org/ ws/2005/05/identity/claims/nameidentifier","ค่า": "[email protected]" }, {"ประเภท": "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid","Value": "S-1-5-21-311626132-1109945507-1757856464-1132" }, {"ประเภท ": "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid","Value": "S-1-5-21-311626132-1109945507-1757856464-1131" }, {"ประเภท ": "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid","Value": "S-1-5-21-311626132-1109945507-1757856464-1128" }, {"ประเภท ": "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid","Value": "S-1-5-21-311626132-1109945507-1757856464-1130" }, {"ประเภท ": "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid","Value": "S-1-5-21-311626132-1109945507-1757856464-513" }, {"ประเภท ": "http://schemas.microsoft.com/ws/2008/06/identity/claims/role","Value": "ผู้ใช้โดเมน" }, {"ประเภท": "http://schemas.microsoft.com/ ws/2008/06/identity/claims/groupsid", "มูลค่า": "S-1-5-21-311626132-1109945507-1757856464-1129" }, {"ประเภท": "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid","ค่า ": "S-1-18-1" }] - "KeyTable": {"FileVersion": 2,"KerberosVersion": 5,"รายการ": [ {"EncryptionType": "NULL", "ความยาว": 0, "การประทับเวลา": "2021-04-21T23:52: 22.5460123+00:00","เวอร์ชัน": 5,"โฮสต์": null,"PasswordBytes": "jBBI1KL19X3olbCK/f9p/+cxZi3RnqqQRH4WawB4EzY =","KeyPrincipalName": { "อาณาจักร": "CORP.IDENTITYINTERVENTION.COM", "ชื่อ": ["STEVE-HOME" ], "NameType": " NT_SRV_HST", "FullyQualifiedName": "STEVE-HOME"}, "Salt": null }] -