Java TM Authentication

พูดคุย, แนะนำเกร็ดความรู้สาระทั่วไป

Moderator: nat3

Java TM Authentication

Postby Kwan(--) » Fri Apr 29, 2005 2:41 pm

JavaTM Authentication และ Authorization บริการ (JAAS) สำหรับthe JavaTM 2 SDK, ฉบับมาตรฐาน, v 1.4
การแนะนำคร่าวๆ
The JavaTM Authentication และ Authorization บริการ (JAAS) คือชุดของชุดซึ่งช่วยให้บริการ authenticate และทำให้ปฏิบัติตามเข้าถึงหน่วยควบคุมบนผู้ใช้. มันเพิ่มเวอร์ชันJavaของมาตรฐาน Pluggable Authentication ชิ้นส่วน (PAM) framework, และผู้ใช้สนับสนุน-ที่พื้นฐาน authorization.
JAAS ถูกแนะนำเหมือนชุดข้อกำหนดเพิ่มเติมเพื่อthe JavaTM 2 SDK, ฉบับมาตรฐาน, v 1.3. JAAS ได้ตอนนี้ถูกรวมเข้าไปในJava 2 SDK, v 1.4.
ทำไมใช้ JAAS?
JAAS สามารถถูกใช้สำหรับ 2 จุดประสงค์:
สำหรับ authentication ของผู้ใช้, เพื่อ reliably และอย่างปลอดภัย determine ซึ่งกำลังทำให้สำเร็จอย่างถูกต้องรหัสJava, regardless ของไม่ว่ารหัสกำลังวิ่งเหมือนแอปปลิเคชั่น, หนึ่ง applet, a bean, หรือa servlet; และ
สำหรับ authorization ของผู้ใช้เพื่อทำให้แน่ใจพวกเขามีลิขสิทธิ์ควบคุมเข้าถึง (การอนุญาติ) ต้องการเพื่อทำการกระทำกระทำ.
JAAS authentication ถูกกระทำในa pluggable แฟชั่น. สิ่งนี้อนุญาติแอปปลิเคชั่นJavaเพื่อที่เหลืออยู่อิสระจาก underlying authentication เทคโนโลยี. ใหม่หรือเทคโนโลยีที่ปรับปรุงสามารถคือ plugged ในโดยปราศจากการต้องการการแก้ไขเพื่อตัวเองแอปปลิเคชั่น.
JAAS authorization ขยายสถาปัตยกรรมความปลอดภัยJavaที่มีอยู่ซึ่งใช้นโยบายความปลอดภัยเพื่อเจาะจงอะไรเข้าถึงลิขสิทธิ์ถูกอนุญาตเพื่อการทำให้สำเร็จรหัส. ซึ่งสถาปัตยกรรม, เป็นที่แนะนำในJava 2 ระบบ, คือรหัส-centric. สิ่งนั้นคือ, การอนุญาติถูกอนุญาตถูกพื้นฐานบนรหัสลักษณะ: ที่ไหนรหัสกำลังมาจากและไม่ว่ามันถูกลงชื่ออย่างดิจิตอลและถ้าดังนั้นโดยผู้ซึ่ง.
กับthe integration ของ JAAS เข้าไปในJava 2 SDK, java.security.Policy API แฮนดึล Principal-ที่พื้นฐาน queries, และการสนับสนุนเครื่องมือนโยบายพื้นฐาน Principal-รายการที่จดไว้การอนุญาตที่พื้นฐาน. วันพฤหัสบดี, เข้าถึงหน่วยควบคุมสามารถตอนนี้ถูกพื้นฐานไม่ถูกต้องบนอะไรรหัสกำลังวิ่ง, แต่ยังบนซึ่งกำลังวิ่งมัน.
ความสามารถสำคัญ
Pure เครื่องมือJava.
Pluggable Authentication ชิ้นส่วน (PAM) framework เครื่องมือสำหรับ authenticating ผู้ใช้.
เดี่ยวลงชื่อการใช้สนับสนุน Kerberos.
Flexible เข้าถึงนโยบายควบคุมสำหรับผู้ใช้-ที่พื้นฐาน, กลุ่ม-ที่พื้นฐาน, และ role-ที่พื้นฐาน authorization.
ตัวอย่าง authentication การใช้ชิ้นส่วน:
JavaTM การตั้งชื่อและส่วนติดต่อช่องเอกสาร (JNDI)
Unix การกระทำสิ่งแวดล้อม
หน้าต่าง NT
Kerberos
Keystore
คำถาม, การสนับสนุน, การรายงานแมลงและการตอบกลับ
คำถาม
สำหรับ miscellaneous คำถามเกี่ยวกับ JAAS การใช้และ deployment, เรากระตุ้นคุณเพื่ออ่านความปลอดภัยJava Q&เอกสารสำคัญและการออกความเห็นการเชื่อมต่อผู้พัฒนาJava. สิ่งเหล่านี้ discussion การออกความเห็นยอมคุณเพื่อ tap เข้าไปในประสบการณ์ของผู้ใช้อื่นๆ, ถามคำถาม, หรือให้เคล็ดลับเพื่ออื่นๆบนหลากหลายของหัวข้อเกี่ยวกับJavaรวมถึง JAAS. ไม่มีค่าธรรมเนียมเพื่อมีส่วนอยู่ด้วย.
ถึงแม้ว่าไม่สนับสนุนโดย Sun, หัวข้อสำหรับทางเทคนิค expertise อาจจะค้นพบที่:
http://www.hotdispatch.com/sun
การสนับสนุน
สำหรับมากกว่ากว้างใหญ่ JAAS คำถามหรือ deployment ความรู้, Sun ให้หลายระดับของการสนับสนุนผู้พัฒนาสำหรับJavaอย่างถูกต้อง 2 ระบบ (รวมถึง JAAS):
ต่อ-Incident
ผู้พัฒนาเข้าถึง DirectSM
ผู้พัฒนาเข้าถึง PlusSM
สำหรับคำแนะนำมากกว่า, โปรดดูที่:
http://www.sun.com/developer/support/
การรายงานแมลง
เพื่อแมลงรายงานหรือความต้องการความสามารถ, โปรดดูที่:
http://java.sun.com/cgi-bin/bugreport.cgi
การตอบกลับ
โปรดส่งข้อความทั่วไปเกี่ยวกับ JAAS เพื่อ:
java-security@sun.com.

แม้เราค่าสิ่งที่นำเข้าของคุณ, ก่อนการส่งการตอบกลับของคุณโปรดค้นหาความปลอดภัยJava Q&เอกสารสำคัญ.
โปรดบันทึกซึ่งเนื่องจากระดับของใจความที่เรารับ, เราอาจจะไม่สามารถโต้ตอบเพื่อทุกใจความบุคคล.
สำหรับข้อความอื่นๆ/คำแนะนำเกี่ยวกับที่ตั้งเว็บโปรดใช้แบบฟอร์มการตอบกลับ.
คำแนะนำมากกว่า
JAAS ไกด์เอกสารอ้างอิง
LoginModule ไกด์ของผู้พัฒนา
JAAS กระดาษขาว ( html | ps )
JAAS แผ่นสไลด์ ( JavaOne 1999 | ( ACSAC 1999)
เดี่ยวลงชื่อการใช้ Kerberos ในJava
PAM เอกสารอ้างอิง
Java 2 SDK, v เอกสารอ้างอิงความปลอดภัย1.4
The JavaTM 2 ความปลอดภัยระบบ trail ของการสอนJava
Java GSS-API และ JAAS การสอนสำหรับใช้กับ Kerberos.
JNDI เอกสารอ้างอิง
รุ่นที่ผ่านมา
เห็น JAAS 1.0สำหรับคำแนะนำ เกี่ยวกับรุ่นก่อนกว่า.




บทนำ
The JavaTM Authentication และ Authorization บริการ (JAAS) ถูกแนะนำเหมือนชุดข้อกำหนดเพิ่มเติม (ชนิด) เพื่อthe JavaTM 2 SDK, ฉบับมาตรฐาน (J2SDK), v 1.3. JAAS ได้ตอนนี้ถูกรวมเข้าไปในthe J2SDK, v 1.4.
JAAS สามารถถูกใช้สำหรับ 2 จุดประสงค์:
สำหรับ authentication ของผู้ใช้, เพื่อ reliably และอย่างปลอดภัย determine ซึ่งกำลังทำให้สำเร็จอย่างถูกต้องรหัสJava, regardless ของไม่ว่ารหัสกำลังวิ่งเหมือนแอปปลิเคชั่น, หนึ่ง applet, a bean, หรือa servlet; และ
สำหรับ authorization ของผู้ใช้เพื่อทำให้แน่ใจพวกเขามีลิขสิทธิ์ควบคุมเข้าถึง (การอนุญาติ) ต้องการเพื่อทำการกระทำกระทำ.
JAAS เพิ่มเวอร์ชันJavaของมาตรฐาน Pluggable Authentication ชิ้นส่วน (PAM) framework. เห็นการทำบริการการเข้าใช้อิสระจาก Authentication เทคโนโลยีสำหรับคำแนะนำไกลกว่า.
อย่างดั้งเดิมJava 2 ที่ตระเตรียม codesource-ที่พื้นฐานเข้าถึงหน่วยควบคุม (เข้าถึงหน่วยควบคุมที่พื้นฐานบนที่ไหนรหัส originated จากและซึ่งที่ลงชื่อรหัส). มัน lacked, อย่างไรก็ตาม, ความสามารถเพื่ออย่างเพิ่มเติมทำให้ปฏิบัติตามเข้าถึงหน่วยควบคุมที่พื้นฐานบนซึ่งวิ่งรหัส. JAAS ตระเตรียมa framework สิ่งนั้น augments Java 2 สถาปัตยกรรมความปลอดภัยกับเช่นนั้นการสนับสนุน.
JAAS authentication ถูกกระทำในa pluggable แฟชั่น. สิ่งนี้อนุญาติแอปปลิเคชั่นเพื่อที่เหลืออยู่อิสระจาก underlying authentication เทคโนโลยี. ใหม่หรือที่ของใหม่ authentication เทคโนโลยีสามารถคือ plugged ใต้แอปปลิเคชั่นโดยปราศจากการต้องการการแก้ไขเพื่อตัวเองแอปปลิเคชั่น. แอปปลิเคชั่นช่วยให้ใช้ได้the authentication กระบวนการโดย instantiating a LoginContext วัตถุ, ซึ่งในเลี้ยวเอกสารอ้างอิงค่าที่ตั้งไว้เพื่อ determine the authentication เทคโนโลยี(ies), หรือ LoginModule(s), เพื่อถูกใช้ในการกระทำthe authentication. โดยชนิด LoginModules อาจจะทางเลือกสำหรับและพิสูจน์ชื่อผู้ใช้และรหัสผ่าน. อื่นๆอาจจะอ่านและพิสูจน์เสียงหรือ fingerprint ตัวอย่าง.
ครั้งหนึ่งผู้ใช้หรือการทำให้สำเร็จบริการรหัสได้คือ authenticated, the JAAS authorization งานส่วนประกอบจากส่วนประกอบของthe core Java 2 เข้าถึงหน่วยควบคุม model เพื่อปกป้องเข้าถึงสู่ทรัพยากรไวต่อความรู้สึก. ไม่เหมือนในthe J2SDK, v 1.3 และแต่เช้า, ที่ไหนเข้าถึงหน่วยควบคุม decisions ถูกพื้นฐานเพียงผู้เดียวบนที่ตั้งรหัสและเครื่องหมายรหัส (a CodeSource), ในthe J2SDK, v 1.4 เข้าถึงหน่วยควบคุม decisions ถูกพื้นฐานทั้งบนของรหัสที่ทำให้สำเร็จ CodeSource และบนผู้ใช้หรือการวิ่งบริการรหัส, ซึ่งถูกแสดงโดยวัตถุหัวข้อ. หัวข้อถูกปรับปรุงโดยa LoginModule กับ ตรงประเด็น Principals และ credentials ถ้า authentication ทำสำเร็จ.
ใครควรอ่านเอกสารนี้
เอกสารนี้ได้รับความตั้งใจสำหรับผู้พัฒนาที่ประสบซึ่งต้องการความสามารถเพื่อออกแบบแอปปลิเคชั่น constrained โดยa CodeSource-หัวข้อและที่พื้นฐาน-ความปลอดภัยที่พื้นฐาน model. มันยังเป็นตั้งใจที่จะอ่านโดย LoginModule ผู้พัฒนา (การเพิ่มผู้พัฒนาหนึ่ง authentication เทคโนโลยี) ก่อนเพื่อการอ่านthe JAAS LoginModule ไกด์ของผู้พัฒนา.
คุณอาจจะปราถนาเพื่อแรกอ่านthe JAAS Authentication และ JAAS Authorization การสอนเพื่อรับการแนะนำคร่าวๆของใช้ JAAS และเพื่อเห็นรหัสตัวอย่างในการกระทำอย่างไร, และแล้วคืนสู่เอกสารนี้สำหรับคำแนะนำไกลกว่า.
เอกสารอ้างอิงเกี่ยวกับ
เอกสารนี้ assumes คุณได้อ่านดังต่อไปนี้แล้ว:
Java 2 สถาปัตยกรรมความปลอดภัย
JAAS กระดาษขาว
Java 2 การสอนความปลอดภัย
บทแทรกเพื่อไกด์นี้คือthe JAAS LoginModule ไกด์ของผู้พัฒนาที่ตั้งใจสำหรับนักเขียนโปรแกรมที่ประสบซึ่งต้องการความสามารถเพื่อเขียนa LoginModule การเพิ่มหนึ่ง authentication เทคโนโลยี.
ถ้าคุณปราถนาเพื่อเรียนรู้มากกว่าเกี่ยวกับมาตรฐาน Pluggable Authentication ชิ้นส่วน (PAM) framework (JAAS เพิ่มเวอร์ชันJavaของ PAM), เห็นการทำบริการการเข้าใช้อิสระจาก Authentication เทคโนโลยี.
การสอนดังต่อไปนี้สำหรับ JAAS authentication และ authorization สามารถถูกวิ่งโดยทุกๆคน:
JAAS Authentication การสอน
JAAS Authorization การสอน
การสอนที่คล้ายสำหรับ JAAS authentication และ authorization, แต่ซึ่ง demonstrate การใช้ของ Kerberos LoginModule และวันพฤหัสบดีซึ่งต้องการa Kerberos การติดตั้ง, สามารถค้นพบที่
JAAS Authentication
JAAS Authorization
2 การสอนเหล่านี้คือส่วนของJava GSS-API และ JAAS ตามลำดับของการสอนซึ่ง utilize Kerberos เป็นthe underlying เทคโนโลยีสำหรับ authentication และการคมนาคมที่ปลอดภัย.
อะไรใหม่ใน JAAS ในthe J2SDK, v 1.4
ข้างล่างถูกแสดงรายการความแตกต่างระหว่างเวอร์ชันที่ผ่านมาของ JAAS (JAAS 1.0)และ JAAS ภายในthe J2SDK, v 1.4.
JAAS อยู่ใน J2SDKตอนนี้
ห้องเรียนใหม่/ส่วนติดต่อ
Deprecated วัตถุ
JAAS อยู่ใน J2SDKตอนนี้
JAAS คืออย่างผ่านมาชุดข้อกำหนดเพิ่มเติม (ชนิด) เพื่อthe JavaTM 2 SDK, ฉบับมาตรฐาน (J2SDK), เวอร์ชัน 1.3.x. JAAS ได้ตอนนี้ถูกรวมเข้าไปในthe J2SDK, v 1.4. JAAS augments the core Java 2 ระบบกับtheหมายถึงเพื่อ authenticate และทำให้ปฏิบัติตามเข้าถึงหน่วยควบคุมบนผู้ใช้.
Theหลัก ramification ของสิ่งนี้ integration stems รอบนโยบายความปลอดภัยระบบ. The J2SDK, เวอร์ชัน 1.3และแต่เช้า, ได้(java.security.Policyห้องเรียนนโยบายความปลอดภัยของตัวของมัน ). JAAS 1.0, เป็นชุดข้อกำหนดเพิ่มเติม, ตระเตรียมหนึ่งเพิ่มเติม Principal-(javax.security.auth.Policy)นโยบายความปลอดภัยพื้นฐาน. บน integration เข้าไปในthe core SDK, the JAAS นโยบายได้คือ deprecated ใน favor ของthe SDK นโยบาย.
The SDK นโยบาย API ถูกเปลี่ยนใหม่เพื่อสนับสนุน Principal-ที่พื้นฐาน queries, และเครื่องมือเอกสารอ้างอิงนโยบายถูกเปลี่ยนใหม่เพื่อสนับสนุน Principal-รายการที่จดไว้การอนุญาตที่พื้นฐานในแฟ้มนโยบาย, ที่ไหนเช่นนั้นรายการที่จดไว้อาจจะรวมถึงa Principal การแสดงพื้นที่ซึ่งผู้ใช้หรือสิ่งที่มีตัวตนอื่นๆที่แสดงโดยtheที่เจาะจง Principal, การทำให้สำเร็จรหัสที่เจาะจง, มีการอนุญาติมีเครื่องหมาย. นอกจากนี้, the graphical เครื่องมือเครื่องมือนโยบายใช้เพื่อสร้างแฟ้มนโยบายถูกเพิ่มเพื่อสนับสนุน inclusion ของ Principal พื้นที่. จัดสรร, the JAAS เครื่องมือเอกสารอ้างอิงนโยบาย1.0และห้องเรียนการสนับสนุนของมัน ในชุดcom.sun.security.authได้คือ deprecated.
โปรดเอกสารอ้างอิงเอกสารนโยบายสำหรับคำแนะนำมากกว่าบนเครื่องมือเอกสารอ้างอิงนโยบายและรายการของตรงประเด็น API เปลี่ยน.
ห้องเรียนใหม่/ส่วนติดต่อ
ส่วนที่เพิ่มเติมรวมถึง
2พื้นฐาน CallbackHandler เครื่องมือ:
com.sun.security.auth.callback.DialogCallbackHandler
com.sun.security.auth.callback.TextCallbackHandler
com.sun.security.auth.module.Krb5LoginModuleใหม่
com.sun.security.auth.module.KeyStoreLoginModuleใหม่
Deprecated วัตถุ
Deprecated วัตถุรวมถึง:
Deprecation ของ
com.sun.security.auth.module.SolarisLoginModule
ใน favor ของ
com.sun.security.auth.module.UnixLoginModule
Theใหม่ UnixLoginModule สามารถถูกใช้บนทั้ง Solaris และ Linux.
Deprecation ของ
com.sun.security.auth.SolarisPrincipal
ใน favor ของ
com.sun.security.auth.UnixPrincipal
Deprecation ของ
com.sun.security.auth.SolarisNumericUserPrincipal
ใน favor ของ
com.sun.security.auth.UnixNumericUserPrincipal
Deprecation ของ
com.sun.security.auth.SolarisNumericGroupPrincipal
ใน favor ของ
com.sun.security.auth.UnixNumericGroupPrincipal
Deprecation ของ
com.sun.security.auth.X500Principal
ใน favor ของ
javax.security.auth.x500.X500Principal
Deprecation ของชื่อเป้าหมายjavax.security.auth.AuthPermission
"createLoginContext"
ใน favor ของ
"createLoginContext.{ชื่อรายการที่จดไว้ค่าที่ตั้งไว้}"

Core ห้องเรียนและส่วนติดต่อ
The JAAS-เกี่ยวกับ core ห้องเรียนและส่วนติดต่อสามารถชำรุดเข้าไปใน 3 ประเภท: ทั่วไป, Authentication, และ Authorization.
ห้องเรียนทั่วไป
หัวข้อ, Principal, Credential (อย่างตามความเป็นจริง, วัตถุใดๆ)
Authentication ห้องเรียนและส่วนติดต่อ
LoginContext, LoginModule, CallbackHandler, Callback
Authorization ห้องเรียน
นโยบาย, AuthPermission, PrivateCredentialPermission
ห้องเรียนทั่วไป
ห้องเรียนทั่วไปคือสิ่งเหล่านั้นที่แชร์โดยทั้งthe JAAS authentication และ authorization ส่วนประกอบ.
กุญแจ JAAS ห้องเรียนคือ javax.security.auth.Subject, ซึ่งแสดงการกลุ่มเกี่ยวกับคำแนะนำสำหรับสิ่งที่มีตัวตนเดี่ยวเช่นบุคคล. มัน encompasses ของสิ่งที่มีตัวตน Principals, มหาชน credentials, และส่วนตัว credentials.
บันทึกซึ่งส่วนติดต่อjava.security.Principalถูกใช้เพื่อแสดงa Principal. ยังบันทึกซึ่งa credential, เป็นที่จำกัดความโดย JAAS, อาจจะคือวัตถุใดๆ.
หัวข้อ
เพื่อให้สิทธิเข้าถึงสู่ทรัพยากร, จำเป็นต้องแรกแอปปลิเคชั่น authenticate ข้อมูลของต้องการ. The JAAS framework จำกัดความหัวข้อข้อตกลงเพื่อแสดงข้อมูลของความต้องการ. หัวข้ออาจจะคือสิ่งที่มีตัวตนใดๆ, เช่นบุคคลหรือบริการ. ครั้งหนึ่งหัวข้อคือ authenticated, javax.security.auth.Subjectคือ populated กับที่มิตรสหาย identities, หรือ Principals. หัวข้ออาจจะมีจำนวนมาก Principals. สำหรับตัวอย่าง, บุคคลอาจจะมีชื่อ Principal ("จอห์น Doe") และa SSN Principal ("123-45-6789"), ซึ่ง distinguish มันจากหัวข้ออื่นๆ.
หัวข้ออาจจะยังเป็นเจ้าของความปลอดภัย-เกี่ยวกับ attributes, ซึ่งถูกอ้างอิงเพื่อเป็น credentials. ไวต่อความรู้สึก credentials สิ่งนั้นต้องการการป้องกันพิเศษ, เช่นส่วนตัว cryptographic กุญแจ, ถูกตั้งอยู่ภายในaส่วนตัว credential ชุด. Credentials ที่ตั้งใจที่จะถูกแชร์, เช่นประกาศนียบัตรกุญแจมหาชน, ถูกตั้งอยู่ภายในมหาชน credential ชุด. การอนุญาติที่แตกต่าง (ที่อ้างถึงข้างล่าง) ถูกต้องการเพื่อเข้าถึงและแก้ไขtheที่แตกต่าง credential ชุด.
หัวข้อถูกสร้างการใช้สิ่งเหล่านี้ constructors:
หัวข้อมหาชน();

หัวข้อมหาชน(บูลีน readOnly, ชุด principals,
ชุด pubCredentials, ชุด privCredentials);
Theแรก constructor สร้างหัวข้อกับกำจัด (ไม่มี-null) ชุดของ Principals และ credentials. 2 constructor สร้างหัวข้อกับชุดที่เจาะจงของ Principals และ credentials. มันยังมีบูลีน argument ซึ่งสามารถถูกใช้เพื่อทำหัวข้ออ่าน-เท่านั้น. ในaอ่าน-หัวข้อเท่านั้น, the Principal และ credential ชุดคือ immutable.
นักเขียนแอปปลิเคชั่นไม่ต้อง instantiate หัวข้อ. ถ้าแอปปลิเคชั่น instantiates a LoginContext และไม่ผ่านหัวข้อเพื่อthe LoginContext constructor, the LoginContext instantiates หัวข้อว่างเปล่าใหม่. เห็นthe LoginContext ส่วน.
ถ้าหัวข้อไม่ instantiated เพื่ออยู่ในaอ่าน-รัฐเท่านั้น, มันสามารถถูกตั้งอ่าน-โดยการเรียกวิธีดังต่อไปนี้เท่านั้น:
มหาชนโมฆะ setReadOnly();
javax.security.auth.AuthPermissionกับเป้าหมาย "setReadOnly" ถูกต้องการเพื่อ invoke วิธีนี้. ครั้งหนึ่งในaอ่าน-รัฐเท่านั้น, ความพยายามใดๆเพื่อเพิ่มหรือลบ Principals หรือ credentials จะส่งผลในหนึ่ง IllegalStateException การอยู่ thrown.
วิธีดังต่อไปนี้อาจจะถูกเรียกว่าเพื่อทดสอบของหัวข้ออ่าน-รัฐเท่านั้น:
บูลีนมหาชน isReadOnly();
เพื่อคืนthe Principals ที่มิตรสหายกับหัวข้อ, , 2 วิธีที่มีอยู่:
ชุดมหาชน getPrincipals();
ชุดมหาชน getPrincipals(ห้องเรียน c);
วิธีแรกคืนทั้งหมด Principals ที่บรรจุในหัวข้อ, ขณะที่ 2 วิธีคืนสิ่งเหล่านั้น Principals สิ่งนั้นคือตัวอย่างของห้องเรียนที่เจาะจง cเท่านั้น, หรือตัวอย่างของ subclass ของห้องเรียน c. ชุดว่างเปล่าจะถูกคืนถ้าหัวข้อไม่มีมิตรสหายใดๆ Principals.
เพื่อคืนมหาชน credentials ที่มิตรสหายกับหัวข้อ, วิธีเหล่านี้ที่มีอยู่:
ชุดมหาชน getPublicCredentials();
ชุดมหาชน getPublicCredentials(ห้องเรียน c);
พฤติกรรมของวิธีเหล่านี้ที่คล้ายเพื่อซึ่งสำหรับthe getPrincipals วิธี, ยกเว้นในทางเลือกนี้มหาชน credentials กำลังอยู่รับ.
เพื่อเข้าถึงส่วนตัว credentials ที่มิตรสหายกับหัวข้อ, วิธีดังต่อไปนี้ที่มีอยู่:
ชุดมหาชน getPrivateCredentials();
ชุดมหาชน getPrivateCredentials(ห้องเรียน c);
พฤติกรรมของวิธีเหล่านี้ที่คล้ายเพื่อซึ่งสำหรับthe getPrincipals และ getPublicCredentials วิธี.
เพื่อแก้ไขหรือกระทำบนของหัวข้อ Principal ชุด, มหาชน credential ชุด, หรือส่วนตัว credential ชุด, การเรียกใช้วิธีที่จำกัดความในห้องเรียนjava.util.Set. ตัวอย่างดังต่อไปนี้ demonstrates สิ่งนี้:
หัวข้อหัวข้อ;
Principal principal;
วัตถุ credential;

. . .

// เพิ่มa Principal และ credential เพื่อหัวข้อ
subject.getPrincipals().add(principal);
subject.getPublicCredentials().add(credential);
บันทึก: หนึ่ง AuthPermission กับเป้าหมาย "modifyPrincipals", "modifyPublicCredentials", หรือ "modifyPrivateCredentials" ถูกต้องการเพื่อแก้ไขชุดของแต่ละคน. ยังบันทึกซึ่งชุดที่คืนผ่านthe getPrincipalsเท่านั้น(), getPublicCredentials(), และ getPrivateCredentials() วิธีกับไม่มี arguments ถูกกลับโดยชุดภายในของแต่ละคนของหัวข้อ. เพราะฉะนั้นการแก้ไขใดๆเพื่อชุดที่ที่คืนมีผลต่อชุดภายในเป็นดี. ชุดที่คืนผ่านthe getPrincipals(ห้องเรียน c), getPublicCredentials(ห้องเรียน c), และ getPrivateCredentials(ห้องเรียน c) วิธีไม่ถูกกลับโดยชุดภายในของแต่ละคนของหัวข้อ. ชุดใหม่ถูกสร้างและถูกคืนสำหรับแต่ละวิธีเช่นนั้น invocation. การแก้ไขเพื่อชุดเหล่านี้จะไม่มีผลต่อ ชุดภายในของหัวข้อ.
เพื่อ iterate ผ่านชุดของส่วนตัว credentials, คุณต้องการjavax.security.auth.PrivateCredentialPermissionเพื่อเข้าถึงแต่ละ credential. เห็นthe PrivateCredentialPermission API เอกสารอ้างอิงสำหรับคำแนะนำไกลกว่า.
หัวข้ออาจจะถูกเกี่ยวข้องกับหนึ่ง AccessControlContext (เห็นthe doAs และ doAsPrivileged คำพรรณนาวิธีข้างล่าง). วิธีดังต่อไปนี้คืนหัวข้อที่เกี่ยวข้องกับtheที่เจาะจง AccessControlContext, หรือ null ถ้าไม่มีหัวข้อถูกเกี่ยวข้องกับtheที่เจาะจง AccessControlContext.
มหาชน static หัวข้อ getSubject(สุดท้าย AccessControlContext acc);
หนึ่ง AuthPermission กับเป้าหมาย "getSubject" ถูกต้องการเพื่อเรียก Subject.getSubject.
ห้องเรียนหัวข้อยังรวมถึงวิธีดังต่อไปนี้ inherited จาก java.lang.Object.
บูลีนมหาชนเท่ากับ(oวัตถุ);
ข้อความมหาชนtoString();
มหาชน int hashCode();
The doAs วิธีสำหรับการกระทำการกระทำเป็นหัวข้อที่เจาะจง
ดังต่อไปนี้ static วิธีอาจจะถูกเรียกว่าเพื่อกระทำการกระทำเป็นหัวข้อที่เจาะจง:
มหาชน static วัตถุ
doAs(หัวข้อหัวข้อสุดท้าย,
การกระทำjava.security.PrivilegedActionสุดท้าย);

มหาชน static วัตถุ
doAs(หัวข้อหัวข้อสุดท้าย,
การกระทำjava.security.PrivilegedExceptionActionสุดท้าย)
ขว้าง java.security.PrivilegedActionException;
ทั้งวิธีแรกเกี่ยวข้องหัวข้อที่เจาะจงกับtheปัจจุบัน Thread'คือ AccessControlContext, และแล้วทำให้สำเร็จการกระทำ. สิ่งนี้ achieves เอ็ฟเฟ็คของการมีการกระทำวิ่งเป็นหัวข้อ. วิธีแรกสามารถขว้าง runtime ข้อยกเว้นแต่ปรกติ execution มันได้การคืนวัตถุจากวิธีวิ่งของการกระทำของมัน argument. 2 วิธี behaves อย่างคล้ายยกเว้นซึ่งมันสามารถขว้างข้อยกเว้นตรวจจากของมัน PrivilegedExceptionAction วิ่งวิธี. หนึ่ง AuthPermission กับเป้าหมาย "doAs" ถูกต้องการเพื่อเรียกthe doAs วิธี.
ตัวอย่างSubject.doAs
ที่นี่คือตัวอย่าง utilizing theแรก doAs วิธี. Assume ใครบางคนนั้นที่ตั้งชื่อ "Bob" ได้คือ authenticated โดยa LoginContext (เห็นthe LoginContext ส่วน) และเป็นผลลัพธ์หัวข้อคือ populated กับa Principal ของcom.ibm.security.Principalห้องเรียน, และซึ่ง Principal มีชื่อ "BOB". ยัง assume สิ่งนั้นa SecurityManager ได้ถูกติดตั้ง, และซึ่งดังต่อไปนี้มีอยู่ในนโยบายควบคุมเข้าถึง (เห็นส่วนนโยบายสำหรับรายละเอียดมากกว่าบนแฟ้มนโยบาย).
// การอนุญาต "BOB" การอนุญาติเพื่ออ่าน"foo.txt"แฟ้ม
การอนุญาต Principal com.ibm.security.Principal "BOB" {
"foo.txt"java.io.FilePermissionการอนุญาติ, "อ่าน";
};
ที่นี่คือรหัสแอปปลิเคชั่นตัวอย่าง:
ห้องเรียน ExampleAction เพิ่ม java.security.PrivilegedAction {
วัตถุมหาชนวิ่ง() {
java.io.File f = java.io.File("foo.txt");ใหม่

// การเรียกดังต่อไปนี้ invokes เช็คความปลอดภัย
ถ้า (f.exists()) {
foo.txtSystem.out.println("File มีอยู่");
}
คืน null;
}
}

ตัวอย่างห้องเรียนมหาชน1 {
มหาชน static ศูนย์กลางโมฆะ(ข้อความ[] args) {

// Authenticate หัวข้อ, "BOB".
// กระบวนการนี้ถูกอ้างถึงในthe
// LoginContext ส่วน.

หัวข้อ bob;
// ชุด bob เพื่อหัวข้อที่สร้างระหว่างthe
// authentication กระบวนการ

// กระทำ "ExampleAction" เป็น "BOB"
Subject.doAs(bob, ใหม่ ExampleAction());
}
}
ระหว่าง execution, ExampleAction จะเจอะเช็คความปลอดภัยเมื่อมันทำการเรียกเพื่อ f.exists(). อย่างไรก็ตาม, ตั้งแต่ ExampleAction กำลังวิ่งเหมือน "BOB", และนโยบาย (ข้างบน) อนุญาตtheจำเป็น FilePermission เพื่อ "BOB", the ExampleAction จะผ่านเช็คความปลอดภัย. ถ้างบการอนุญาตในนโยบายถูกดัดแปลง (การเพิ่มหนึ่งไม่ถูกต้อง CodeBase หรือการเปลี่ยนthe Principal เพื่อ "MOE", สำหรับตัวอย่าง), แล้วa SecurityException จะคือ thrown.
The doAsPrivileged วิธี
วิธีดังต่อไปนี้ยังกระทำการกระทำเป็นหัวข้อที่เจาะจง.
มหาชน static วัตถุ doAsPrivileged(
หัวข้อหัวข้อสุดท้าย,
การกระทำjava.security.PrivilegedActionสุดท้าย,
java.security.AccessControlContextสุดท้าย acc);

มหาชน static วัตถุ doAsPrivileged(
หัวข้อหัวข้อสุดท้าย,
การกระทำjava.security.PrivilegedExceptionActionสุดท้าย,
java.security.AccessControlContextสุดท้าย acc)
ขว้าง java.security.PrivilegedActionException;
หนึ่ง AuthPermission กับเป้าหมาย "doAsPrivileged" ถูกต้องการเพื่อเรียกthe doAsPrivileged วิธี.

doAs vs. doAsPrivileged

The doAsPrivileged วิธี behave อย่างแน่นอนtheเดียวกันเป็นthe doAs วิธี, ยกเว้นซึ่งแทนการเกี่ยวข้องหัวข้อที่ตระเตรียมกับtheปัจจุบัน Thread'คือ AccessControlContext, พวกเขาใช้theที่ตระเตรียม AccessControlContext. ในวิธีนี้, การกระทำสามารถถูกจำกัดโดย AccessControlContexts ที่แตกต่างจากการกระทำปัจจุบัน.
หนึ่ง AccessControlContext บรรจุคำแนะนำเกี่ยวกับรหัสทั้งหมดที่ทำให้สำเร็จตั้งแต่the AccessControlContext คือ instantiated, รวมถึงที่ตั้งรหัสและการอนุญาติรหัสถูกอนุญาตโดยนโยบาย. ในคำสั่งสำหรับเช็คควบคุมเข้าถึงเพื่อทำสำเร็จ, นโยบายต้องอนุญาตแต่ละที่เอกสารอ้างอิงวัตถุรหัสโดยthe AccessControlContext การอนุญาติที่ต้องการ.
ถ้าthe AccessControlContext ที่ตระเตรียมเพื่อ doAsPrivileged คือ null, แล้วการกระทำไม่ถูกจำกัดโดยaแยก AccessControlContext. ตัวอย่างหนึ่งที่ไหนสิ่งนี้อาจจะเป็นประโยชน์อยู่ในสิ่งแวดล้อมเครื่องเซิฟเวอร์. เครื่องเซิฟเวอร์ขอ authenticate หลายที่เข้ามาความต้องการและกระทำaแยก doAs การคำนวณสำหรับแต่ละความต้องการ. เพื่อเริ่มต้นแต่ละ doAs การกระทำ "สด," และโดยปราศจากการจำกัดของเครื่องเซิฟเวอร์ปัจจุบัน AccessControlContext, เครื่องเซิฟเวอร์สามารถเรียก doAsPrivileged และผ่านในa null AccessControlContext.
Principals

เป็นที่พูดถึงอย่างผ่านมา, Principals อาจจะถูกเกี่ยวข้องกับหัวข้อถ้า authentication สมบูรณ์. Principals แสดงหัวข้อ identities, และต้องเพิ่มjava.security.Principalและส่วนติดต่อjava.io.Serializable. ส่วนหัวข้ออ้างถึงวิธีเพื่อปรับปรุงthe Principals ที่มิตรสหายกับหัวข้อ.
Credentials

มหาชนและส่วนตัว credential ห้องเรียนไม่ใช่ส่วนของ core JAAS ห้องสมุดห้องเรียน. ห้องเรียนใดๆสามารถแสดงa credential. ผู้พัฒนา, อย่างไรก็ตาม, ขอ elect เพื่อมีของเขาทั้งหลาย credential ห้องเรียนเพิ่ม 2 ส่วนติดต่อเกี่ยวกับเพื่อ credentials: Refreshable และ Destroyable.
Refreshable
ส่วนติดต่อjavax.security.auth.Refreshableตระเตรียมความสามารถสำหรับ credential เพื่อล้างเอง. สำหรับตัวอย่าง, a credential กับเวลาที่เจาะจง-ที่จำกัด lifespan อาจจะเพิ่มส่วนติดต่อนี้เพื่อยอมเรียกเพื่อล้างระยะเวลาเวลาสำหรับซึ่งมันสมบูรณ์. ส่วนติดต่อมี 2 abstract วิธี:
บูลีน isCurrent();
วิธีนี้ determines ไม่ว่าthe credential สมบูรณ์หรือปัจจุบัน.
โมฆะล้าง() ขว้าง RefreshFailedException;
วิธีนี้ปรับปรุงหรือขยายthe validity ของthe credential. เครื่องมือวิธีควรกระทำหนึ่ง AuthPermission("refreshCredential") เช็คความปลอดภัยเพื่อทำให้แน่ใจการเรียกมีการอนุญาติเพื่อล้างthe credential.
Destroyable
ส่วนติดต่อjavax.security.auth.Destroyableตระเตรียมความสามารถของการทำลายสิ่งที่บรรจุภายในa credential. ส่วนติดต่อมี 2 abstract วิธี:
บูลีน isDestroyed();
Determines ไม่ว่าthe credential ได้ถูกทำลาย.
โมฆะทำลาย() ขว้าง DestroyFailedException;
ทำลายและเคลียร์คำแนะนำที่เกี่ยวข้องกับสิ่งนี้ credential. Subsequent เรียกเพื่อวิธีแน่ใจบนสิ่งนี้ credential จะส่งผลในหนึ่ง IllegalStateException การอยู่ thrown. เครื่องมือวิธีควรกระทำหนึ่ง AuthPermission("destroyCredential") เช็คความปลอดภัยเพื่อทำให้แน่ใจการเรียกมีการอนุญาติเพื่อทำลายthe credential.
Authentication ห้องเรียนและส่วนติดต่อ

เพื่อ authenticate หัวข้อ (ผู้ใช้หรือบริการขั้นตอนดังต่อไปนี้ถูกกระทำ:
1. แอปปลิเคชั่น instantiates a LoginContext.
2. The LoginContext ปรึกษาค่าที่ตั้งไว้เพื่อโหลดทั้งหมด LoginModules ที่แก้ไขสำหรับแอปปลิเคชั่นนั้น.
3. แอปปลิเคชั่น invokes the LoginContext'วิธีการเข้าใช้.
4. วิธีการเข้าใช้ invokes ทั้งหมดที่โหลด LoginModules. แต่ละ LoginModule พยายามเพื่อ authenticate หัวข้อ. บนความสำเร็จ, LoginModules มิตรสหายตรงประเด็น Principals และ credentials กับวัตถุหัวข้อซึ่งแสดงหัวข้อที่กำลัง authenticated.
5. The LoginContext คืนthe authentication สถานะสู่แอปปลิเคชั่น.
6. ถ้า authentication ที่ทำสำเร็จ, แอปปลิเคชั่นคืนหัวข้อจากthe LoginContext.
The authentication ห้องเรียนถูกอ้างถึงข้างล่าง.
LoginContext

ห้องเรียนjavax.security.auth.login.LoginContextตระเตรียมวิธีพื้นฐานที่ใช้เพื่อ authenticate หัวข้อ, และตระเตรียมวิธีเพื่อพัฒนาอิสระแอปปลิเคชั่นของ underlying authentication เทคโนโลยี. The LoginContext ปรึกษาค่าที่ตั้งไว้เพื่อ determine the authentication บริการ, หรือ LoginModule(s), ที่แก้ไขสำหรับแอปปลิเคชั่นที่เจาะจง. เพราะฉะนั้น, ที่แตกต่าง LoginModules สามารถคือ plugged ในใต้แอปปลิเคชั่นโดยปราศจากการต้องการการแก้ไขใดๆเพื่อตัวเองแอปปลิเคชั่น.
LoginContext ให้ 4 constructors จากซึ่งสู่เลือก:
มหาชน LoginContext(ข้อความชื่อ) ขว้าง LoginException;

มหาชน LoginContext(ข้อความชื่อ, หัวข้อหัวข้อ) ขว้าง LoginException;

มหาชน LoginContext(ข้อความชื่อ, CallbackHandler callbackHandler)
ขว้าง LoginException

มหาชน LoginContext(ข้อความชื่อ, หัวข้อหัวข้อ,
CallbackHandler callbackHandler) ขว้าง LoginException
ทั้งหมด constructors แชร์ตัวแปรทั่วไป: ชื่อ. สิ่งนี้ argument ถูกใช้โดยthe LoginContext เป็นดัชนีเข้าไปในค่าที่ตั้งไว้การเข้าใช้เพื่อ determine ซึ่ง LoginModules ถูกแก้ไขสำหรับแอปปลิเคชั่น instantiating the LoginContext. Constructors สิ่งนั้นไม่ใช้หัวข้อเป็นตัวแปรสิ่งที่นำเข้า instantiate หัวข้อใหม่. Null สิ่งที่นำเข้าคือ disallowed สำหรับทั้งหมด constructors. การเรียกต้องการหนึ่ง AuthPermission กับเป้าหมาย "createLoginContext.<ตั้งชื่อ>" เพื่อ instantiate a LoginContext. ที่นี่, <ชื่อ> อ้างอิงถึงชื่อของรายการที่จดไว้ค่าที่ตั้งไว้การเข้าใช้ซึ่งเอกสารอ้างอิงแอปปลิเคชั่นในตัวแปรชื่อสำหรับ LoginContext instantiation.
เห็นthe CallbackHandler ส่วนสำหรับคำแนะนำบนอะไรa CallbackHandler เมื่อคุณอาจจะaต้องการ.
ตามความเป็นจริง authentication ปรากฏกับการเรียกเพื่อวิธีดังต่อไปนี้:
การเข้าใช้โมฆะมหาชน() ขว้าง LoginException;
เมื่อไรการเข้าใช้คือ invoked, ทั้งหมดที่แก้ไข LoginModules คือ invoked เพื่อกระทำthe authentication. ถ้าthe authentication ที่ทำสำเร็จ, หัวข้อ (ซึ่งอาจจะตอนนี้ถือ Principals, มหาชน credentials, และส่วนตัว credentials) สามารถถูกคืนโดยการใช้วิธีดังต่อไปนี้:
หัวข้อมหาชน getSubject();
เพื่อ logout หัวข้อและลบของมัน authenticated Principals และ credentials, วิธีดังต่อไปนี้ถูกตระเตรียม:
มหาชนโมฆะ logout() ขว้าง LoginException;
ตัวอย่างรหัสดังต่อไปนี้ demonstrates การเรียกจำเป็นเพื่อ authenticate และ logout หัวข้อ:
// ให้the LoginContext instantiate หัวข้อใหม่
LoginContext lc = ใหม่ LoginContext("entryFoo");
พยายาม {
// authenticate หัวข้อ
lc.login();
System.out.println("authentication สมบูรณ์");

// รับthe authenticated หัวข้อ
หัวข้อหัวข้อ = lc.getSubject();

...

// ทั้งหมดที่เสร็จสิ้น -- logout
lc.logout();
} การจับ (LoginException le) {
System.err.println("authentication ไม่สมบูรณ์: " +
le.getMessage());
}
LoginModule
The LoginModule ส่วนติดต่อให้ความสามารถกับผู้พัฒนาเพื่อเพิ่มชนิดที่แตกต่างของ authentication เทคโนโลยีซึ่งสามารถคือ plugged ในใต้แอปปลิเคชั่น. สำหรับตัวอย่าง, ตัวอย่างชนิดอาจจะกระทำชื่อผู้ใช้/รหัสผ่าน-แบบฟอร์มที่พื้นฐานของ authentication. อื่นๆ LoginModules อาจจะส่วนติดต่อเพื่ออุปกรณ์อุปกรณ์เช่น smart การ์ดหรือ biometric อุปกรณ์.
บันทึก: ถ้าคุณคือนักเขียนแอปปลิเคชั่น, คุณไม่ต้องการที่จะเข้าใจการทำงานของ LoginModules. ทั้งหมดคุณต้องรู้คือเขียนแอปปลิเคชั่นของคุณและคำแนะนำค่าที่ตั้งไว้เจาะจงอย่างไร (เช่นในแฟ้มค่าที่ตั้งไว้การเข้าใช้) เช่นนั้นซึ่งแอปปลิเคชั่นจะสามารถ utilize the LoginModule ที่เจาะจงโดยค่าที่ตั้งไว้เพื่อ authenticate ผู้ใช้.
ถ้า, บนมืออื่นๆ, คุณคือนักเขียนโปรแกรมซึ่งปราถนาเพื่อเขียนa LoginModule การเพิ่มหนึ่ง authentication เทคโนโลยี, เห็นthe JAAS LoginModule ไกด์ของผู้พัฒนาสำหรับขั้นตอนที่รายละเอียด-โดย-ขั้นตอนขั้นตอน.
CallbackHandler
ในบางทางเลือกa LoginModule ต้องติดต่อกับผู้ใช้เพื่อรับ authentication คำแนะนำ. LoginModules ใช้javax.security.auth.callback.CallbackHandlerสำหรับจุดประสงค์นี้. แอปปลิเคชั่นเพิ่มthe CallbackHandler ส่วนติดต่อและผ่านมันเพื่อthe LoginContext, ซึ่งเดินหน้ามันโดยตรงสู่the underlying LoginModules. A LoginModule ใช้the CallbackHandler ทั้งเพื่อ gather สิ่งที่นำเข้าจากผู้ใช้ (เช่นรหัสผ่านหรือ smart จำนวนรหัสส่วนตัวบัตร) หรือเพื่อจำหน่ายคำแนะนำเพื่อผู้ใช้ (เช่นคำแนะนำสถานะ). โดยการยอมแอปปลิเคชั่นเพื่อเจาะจงthe CallbackHandler, underlying LoginModules สามารถที่เหลืออยู่อิสระของแอปปลิเคชั่นวิธีที่แตกต่าง interact กับผู้ใช้. สำหรับตัวอย่าง, เครื่องมือของ CallbackHandler สำหรับa GUI แอปปลิเคชั่นจะจอหน้าต่างเพื่อ solicit สิ่งที่นำเข้าจากผู้ใช้. บนมืออื่นๆ, เครื่องมือของ CallbackHandler สำหรับaไม่มี-GUI เครื่องมือจะพร้อมผู้ใช้สำหรับสิ่งที่นำเข้าเท่านั้นเองโดยตรงจากเส้นคำสั่ง.
CallbackHandler คือส่วนติดต่อกับวิธีหนึ่งเพื่อเพิ่ม:
แฮนดึลโมฆะ(Callback[] callbacks)
ขว้าง java.io.IOException, UnsupportedCallbackException;
The LoginModule ผ่านthe CallbackHandler วิธีแฮนดึลarrayของจัดสรร Callbacks, สำหรับตัวอย่างa NameCallback สำหรับชื่อผู้ใช้และ PasswordCallback สำหรับรหัสผ่าน, และthe CallbackHandler กระทำผู้ใช้ที่ต้องการ interaction และชุดจัดสรรค่าในthe Callbacks. สำหรับตัวอย่าง, เพื่อประมวลผลa NameCallback, the CallbackHandler อาจจะทางเลือกสำหรับชื่อ, คืนค่าจากผู้ใช้, และเรียกthe NameCallback'คือ setName วิธีเพื่อตั้งอยู่ชื่อ.
The CallbackHandler เอกสารอ้างอิงมีa lengthy ตัวอย่างไม่รวมถึงในเอกสารนี้ซึ่งอ่านอีกครั้งอาจจะต้องการที่จะตรวจดู.
Callback
ชุดjavax.security.auth.callbackบรรจุthe Callback ส่วนติดต่อได้เหมือนกับหลายเครื่องมือ. LoginModules อาจจะผ่านarrayของ Callbacks โดยตรงเพื่อวิธีแฮนดึลของ CallbackHandler.
โปรดปรึกษาtheต่างๆ Callback APIs สำหรับคำแนะนำมากกว่าบนของเขาทั้งหลายใช้.
Authorization ห้องเรียน
เพื่อทำ JAAS authorization ใช้สถานที่, การอนุญาตเข้าถึงการอนุญาติควบคุมที่พื้นฐานไม่ต้องบนอะไรรหัสกำลังวิ่งแต่ยังบนซึ่งกำลังวิ่งมัน, ดังต่อไปนี้ถูกต้องการ:
ผู้ใช้ต้องคือ authenticated, เป็นที่อ้างถึงในthe LoginContext ส่วน.
หัวข้อซึ่งคือผลลัพธ์ของ authentication ต้องถูกเกี่ยวข้องกับเนื้อความควบคุมเข้าถึง, เป็นที่อ้างถึงในส่วนหัวข้อ.
Principal-รายการที่จดไว้ที่พื้นฐานต้องถูกแก้ไขในนโยบายความปลอดภัย, เป็นที่อ้างถึงข้างล่าง.
นโยบาย abstract ห้องเรียนและ authorization-ห้องเรียนเจาะจง AuthPermission และ PrivateCredentialPermission ถูกอ้างถึงข้างล่าง.
นโยบาย

ห้องเรียนjava.security.Policyคือหนึ่ง abstract ห้องเรียนสำหรับการแสดงความเคารพระบบ-กว้างเข้าถึงนโยบายควบคุม. นโยบาย API ถูกเปลี่ยนใหม่ในthe J2SDK, v 1.4 เพื่อสนับสนุน Principal-ที่พื้นฐาน queries.
เป็นaพื้นฐาน, the J2SDK ตระเตรียมที่พื้นฐานแฟ้ม subclass เครื่องมือ, ซึ่งถูกเปลี่ยนใหม่เพื่อสนับสนุน Principal-รายการที่จดไว้การอนุญาตที่พื้นฐานในแฟ้มนโยบาย.
แฟ้มนโยบายและโครงสร้างของรายการที่จดไว้ภายในพวกเขาถูกอ้างถึงในเครื่องมือนโยบายพื้นฐานและข้อความแฟ้มนโยบาย.
AuthPermission
ห้องเรียนjavax.security.auth.AuthPermission encapsulates ที่ต้องการการอนุญาติพื้นฐานสำหรับ JAAS. หนึ่ง AuthPermission บรรจุชื่อ (ยังอ้างอิงถึงเป็นa "ชื่อเป้าหมาย") แต่ไม่มีรายการการกระทำ; คุณทั้งมีการอนุญาติตั้งชื่อหรือคุณไม่.
นอกจากของมัน inherited วิธี (จากห้องเรียนjava.security.Permission), หนึ่ง AuthPermission มี 2 มหาชน constructors:
มหาชน AuthPermission(ข้อความชื่อ);
มหาชน AuthPermission(ข้อความชื่อ, ข้อความการกระทำ);
Theแรก constructor สร้างaใหม่ AuthPermission กับtheที่เจาะจงตั้งชื่อ. 2 constructor ยังสร้างaใหม่ AuthPermission วัตถุกับชื่อที่เจาะจง, แต่มีการกระทำเพิ่มเติม argument ซึ่งถูกใช้อย่างถูกต้องและควรคือ null. สิ่งนี้ constructor มีอยู่เพียงผู้เดียวสำหรับวัตถุนโยบายเพื่อ instantiate วัตถุการอนุญาติใหม่. สำหรับมากที่สุดรหัสอื่นๆ, theแรก constructor จัดสรร.
อย่างถูกต้อง AuthPermission วัตถุถูกใช้เพื่อ guard เข้าถึงสู่นโยบาย, หัวข้อ, LoginContext, และวัตถุค่าที่ตั้งไว้. โปรดอ้างอิงถึงthe AuthPermission javadocs สำหรับรายการของชื่อสมบูรณ์ซึ่งได้รับการสนับสนุน.
PrivateCredentialPermission
ห้องเรียนjavax.security.auth.PrivateCredentialPermissionปกป้องเข้าถึงสู่ของหัวข้อส่วนตัว credentials และตระเตรียมมหาชนหนึ่ง constructor:
มหาชน PrivateCredentialPermission(ข้อความชื่อ, ข้อความการกระทำ);
โปรดอ้างอิงถึงthe PrivateCredentialPermission javadocs สำหรับมากกว่าคำแนะนำที่รายละเอียดบนห้องเรียนนี้.

JAAS การสอนและโปรแกรมตัวอย่าง
The JAAS Authentication และ JAAS Authorization การสอนบรรจุตัวอย่างดังต่อไปนี้:
SampleAcn.java คือแอปปลิเคชั่นตัวอย่าง demonstrating JAAS authentication.
SampleAzn.java คือแอปปลิเคชั่นตัวอย่างที่ใช้โดยthe authorization การสอน. มัน demonstrates ทั้ง authentication และ authorization.
sample_jaas.config คือแฟ้มค่าที่ตั้งไว้การเข้าใช้ตัวอย่างที่ใช้โดยทั้งการสอน.
sampleacn.policy คือการอนุญาติที่อนุญาตแฟ้มนโยบายตัวอย่างที่ต้องการโดยรหัสสำหรับ authentication การสอน.
sampleazn.policy คือการอนุญาติที่อนุญาตแฟ้มนโยบายตัวอย่างที่ต้องการโดยรหัสสำหรับ authorization การสอน.
SampleLoginModule.java คือห้องเรียนที่เจาะจงโดย(sample_jaas.config)แฟ้มค่าที่ตั้งไว้การเข้าใช้ของการสอนเป็นการเพิ่มห้องเรียนtheที่ปราถนา underlying authentication. SampleLoginModule'คือผู้ใช้ authentication ประกอบด้วยพิสูจน์ซึ่งเท่านั้นเองชื่อและรหัสผ่านที่เจาะจงโดยผู้ใช้มีเจาะจงค่า.
SamplePrincipal.java คือการเพิ่มห้องเรียนตัวอย่างthe Principal ส่วนติดต่อ. มันถูกใช้โดย SampleLoginModule.
เห็นการสอนสำหรับคำแนะนำที่รายละเอียดเกี่ยวกับแอปปลิเคชั่น, แฟ้มนโยบาย, และแฟ้มค่าที่ตั้งไว้การเข้าใช้.
นักเขียนแอปปลิเคชั่นไม่ต้องการที่จะเข้าใจรหัสสำหรับSampleLoginModule.javaหรือSamplePrincipal.java, เป็นที่อธิบายในการสอน. นักเขียนโปรแกรมซึ่งปราถนาเพื่อเขียน LoginModules สามารถเรียนรู้ทำดังนั้นโดยการอ่านthe JAAS LoginModule ไกด์ของผู้พัฒนาอย่างไร.

ภาคผนวกA: JAAS การตั้งค่าในแฟ้มคุณสมบัติความปลอดภัยjava.security
จำนวนมากของ JAAS-การตั้งค่าเกี่ยวกับสามารถถูกแก้ไขในแฟ้มคุณสมบัติความปลอดภัยนายjava.security, ซึ่งถูกค้นหาที่ตั้งในthe lib/ช่องเอกสารความปลอดภัยของJava 2 runtime.
JAAS เพิ่ม 2 คุณสมบัติความปลอดภัยใหม่เพื่อ java.security:
login.configuration.provider
login.config.url.n
คุณสมบัติที่มีอยู่ก่อนดังต่อไปนี้ยังตรงประเด็นสำหรับ JAAS ผู้ใช้:
policy.provider
policy.url.n
ผู้ค่าที่ตั้งไว้การเข้าใช้
Theพื้นฐาน JAAS เครื่องมือค่าที่ตั้งไว้การเข้าใช้ที่ตระเตรียมโดย Sun Microsystems รับคำแนะนำค่าที่ตั้งไว้ของมันจากแฟ้มและหวังว่าคำแนะนำเพื่อถูกตระเตรียมในรูปแบบเจาะจงแสดงในการสอน.
Theพื้นฐาน JAAS เครื่องมือค่าที่ตั้งไว้การเข้าใช้สามารถถูกเคลื่อนย้ายโดยการเจาะจงเครื่องมือห้องเรียนผู้หัวข้อในคุณสมบัติlogin.configuration.provider.
สำหรับตัวอย่าง:
login.configuration.provider=com.foo.Config
ถ้าlogin.configuration.providerคุณสมบัติความปลอดภัยค้นพบ, หรือด้านซ้ายที่ไม่เจาะจง, แล้วมันถูกตั้งเพื่อค่าพื้นฐาน:
login.configuration.provider=com.sun.security.auth.login.ConfigFile
บันทึกซึ่งไม่มีหมายถึงเพื่อ dynamically ตั้งผู้ค่าที่ตั้งไว้การเข้าใช้จากเส้นคำสั่ง.
URLsค่าที่ตั้งไว้การเข้าใช้
ถ้าคุณกำลังใช้เครื่องมือค่าที่ตั้งไว้การเข้าใช้ซึ่งหวังว่าคำแนะนำค่าที่ตั้งไว้เพื่อถูกเจาะจงในแฟ้ม (เป็นทำเครื่องมือพื้นฐานจาก Sun Microsystems), ที่ตั้งของแฟ้มค่าที่ตั้งไว้การเข้าใช้(s) สามารถคือ statically ตั้งโดยการเจาะจงURLsของแต่ละคนของเขาทั้งหลายในคุณสมบัติlogin.config.url.n. 'n' คือa consecutively การเริ่มต้นจำนวนเต็มจำนวนกับ 1. ถ้าหลายแฟ้มค่าที่ตั้งไว้ถูกเจาะจง (ถ้า n >= 2), พวกเขาจะอ่านและ unioned เข้าไปในค่าที่ตั้งไว้เดี่ยวหนึ่ง.
สำหรับตัวอย่าง:
login.config.url.1=file:C:/config/.java.login.config
login.config.url.2=file:C:/users/foo/.foo.login.config
ถ้าที่ตั้งของแฟ้มค่าที่ตั้งไว้ไม่ถูกตั้งในแฟ้มคุณสมบัติjava.security, และยังไม่ถูกเจาะจง dynamically จากเส้นคำสั่ง (ผ่านข้อกำหนด-Djava.security.auth.login.config), JAAS พยายามเพื่อโหลดค่าที่ตั้งไว้พื้นฐานจาก
file:${user.home}/.java.login.config

ผู้นโยบาย
เครื่องมือนโยบายพื้นฐานสามารถถูกเคลื่อนย้ายโดยการเจาะจงเครื่องมือห้องเรียนผู้หัวข้อในคุณสมบัติpolicy.provider.
สำหรับตัวอย่าง:
policy.provider=com.foo.Policy
ถ้าpolicy.providerคุณสมบัติความปลอดภัยค้นพบ, หรือด้านซ้ายที่ไม่เจาะจง, แล้วนโยบายถูกตั้งเพื่อค่าพื้นฐาน:
policy.provider=sun.security.provider.PolicyFile
บันทึกซึ่งไม่มีหมายถึงเพื่อ dynamically ตั้งผู้นโยบายจากเส้นคำสั่ง.
URLsแฟ้มนโยบาย
ที่ตั้งของแฟ้มนโยบายควบคุมเข้าถึงสามารถคือ statically ตั้งโดยการเจาะจงURLsของแต่ละคนของเขาทั้งหลายในคุณสมบัติauth.policy.url.n. 'n' คือa consecutively การเริ่มต้นจำนวนเต็มจำนวนกับ 1. ถ้าหลายนโยบายถูกเจาะจง (ถ้า n >= 2), พวกเขาจะอ่านและ unioned เข้าไปในนโยบายเดี่ยวหนึ่ง.
สำหรับตัวอย่าง:
policy.url.1=file:C:/policy/.java.policy
policy.url.2=file:C:/users/foo/.foo.policy
ถ้าที่ตั้งของแฟ้มนโยบาย(s) ไม่ถูกตั้งในแฟ้มคุณสมบัติjava.security, และไม่ถูกเจาะจง dynamically จากเส้นคำสั่ง (ผ่านข้อกำหนด-Djava.security.policy), นโยบายควบคุมเข้าถึงพื้นฐานเพื่อนโยบายเดียวกับซึ่งของแฟ้มนโยบายระบบที่ติดตั้งกับ J2SDK. แฟ้มนโยบายนั้น
การอนุญาตการอนุญาติทั้งหมดเพื่อชนิดมาตรฐาน
ยอมทุกๆคนเพื่อฟังบน un-ที่สิทธิพิเศษ ports
ยอมรหัสใดๆเพื่ออ่านแน่ใจ "มาตรฐาน" คุณสมบัติซึ่งไม่ใช่ความปลอดภัย-ไวต่อความรู้สึก, เช่น"os.name"และคุณสมบัติ"file.separator".
แฟ้มคุณสมบัติความปลอดภัยนายตัวอย่าง
ข้างล่างคือก๊อปปี้ที่แก้ไขของแฟ้มjava.securityที่ตระเตรียมกับJava 2 runtime, v 1.4. การตั้งค่าตัวอย่างสำหรับ JAAS-คุณสมบัติเกี่ยวกับถูกแสดงในหนา. ในตัวอย่างนี้, เราออกไปค่าที่ตระเตรียมในแฟ้มjava.securityพื้นฐานสำหรับpolicy.provider, policy.url.n, และ คุณสมบัติlogin.configuration.provider. แฟ้มjava.securityพื้นฐานยังแสดงรายการค่าสำหรับคุณสมบัติlogin.config.url.n, แต่มันถูกข้อความออก. ในตัวอย่างข้างล่าง, มันไม่ถูกข้อความ.
#
# สิ่งนี้คือthe "แฟ้มคุณสมบัติความปลอดภัยนาย".
#
# ในแฟ้มนี้, คุณสมบัติความปลอดภัยต่างๆถูกตั้งสำหรับใช้โดย
# ห้องเรียนjava.security. สิ่งนี้อยู่ที่ซึ่งผู้ใช้สามารถ statically บัญชีชื่อ
# Cryptography ผู้ชุด ("ผู้" สำหรับสั้น). ข้อตกลง
# "ผู้" อ้างอิงถึงชุดหรือชุดของชุดซึ่งจำหน่ายa
# concrete เครื่องมือของส่วนย่อยของ cryptography aspects ของ
# ความปลอดภัยJava API. ผู้อาจจะ, สำหรับตัวอย่าง, เพิ่มตัวอย่างหรือ
# วิธีคิดลายเซ็นดิจิตอลมากกว่าหรือใจความ digest วิธีคิด.
#
# แต่ละผู้ต้องเพิ่มa subclass ของห้องเรียนผู้.
# เพื่อลงทะเบียนผู้ในแฟ้มคุณสมบัติความปลอดภัยนายนี้,
# เจาะจงผู้ subclass ชื่อและ priority ในรูปแบบ
#
# security.provider.<n>=<className>
#
# สิ่งนี้ประกาศผู้, และเจาะจงสิ่งที่ชอบของมัน
# คำสั่ง <n>. คำสั่งสิ่งที่ชอบคือคำสั่งในซึ่งผู้คือ
# ที่ค้นหาวิธีคิดที่ต้องการ (เมื่อไม่มีผู้เจาะจงคือ
# ที่ต้องการ). คำสั่งถูกพื้นฐาน; 1 คือมากที่สุดที่ชอบมากกว่า, ที่ปฏิบัติตาม
# โดย 2, และดังนั้นบน.
#
# <className> ต้องเจาะจงthe subclass ของห้องเรียนผู้ของใคร
# constructor ตั้งค่าของคุณสมบัติต่างๆซึ่งถูกต้องการ
# สำหรับความปลอดภัยJava API เพื่อดูขึ้นวิธีคิดหรืออื่นๆ
# ความสะดวกที่เพิ่มโดยผู้.
#
# ที่นั่นต้องอยู่ที่น้อยที่สุดผู้หนึ่ง specification ใน java.security.
# มีผู้พื้นฐานซึ่งมามาตรฐานกับthe JDK. มัน
# ถูกเรียกว่าthe "SUN" ผู้, และผู้ของมัน subclass
# ที่ชื่อ Sun ปรากฏในชุดsun.security.provider. วันพฤหัสบดี, the
# "SUN" ผู้ถูกลงทะเบียนผ่านดังต่อไปนี้:
#
# security.provider.1=sun.security.provider.Sun
#
# (จำนวน 1 ถูกใช้สำหรับผู้พื้นฐาน.)
#
# บันทึก: Statically ผู้ลงทะเบียน subclasses คือ instantiated
# เมื่อไรระบบถูกทำการประเดิม. ผู้สามารถคือ dynamically
# ที่บัญชีชื่อแทนโดยเรียกเพื่อทั้งthe addProvider หรือ
# insertProviderAt วิธีในห้องเรียนความปลอดภัย.

#
# รายการของผู้และคำสั่งสิ่งที่ชอบของเขาทั้งหลาย (เห็นข้างบน):
#
security.provider.1=sun.security.provider.Sun
security.provider.2=com.sun.net.ssl.internal.ssl.Provider
security.provider.3=com.sun.rsajca.Provider
security.provider.4=com.sun.crypto.provider.SunJCE
security.provider.5=sun.security.jgss.SunProvider

#
# เลือกข้อมูลของข้อมูลที่เห็นสำหรับ SecureRandom. โดยพื้นฐานมันใช้
# ระบบ/thread วิธีคิดกิจกรรม. ข้อกำหนดเพิ่มเติม, ถ้าการสนับสนุนระบบ
# มันหนึ่ง entropy gathering อุปกรณ์สามารถถูกเลือก.
#
#securerandom.source=file:/dev/random
#
# The entropy gathering อุปกรณ์ถูกอ้างถึงเหมือนURLและสามารถ
# และยังถูกเจาะจงกับ"java.security.egd"คุณสมบัติ. สำหรับตัวอย่าง,
# -Djava.security.egd=file:/dev/urandom
# การเจาะจงคุณสมบัตินี้จะ override การตั้งค่าsecurerandom.source.

#
# ห้องเรียนเพื่อ instantiate เป็นjavax.security.auth.login.Configuration
# ผู้.
#
login.configuration.provider=com.sun.security.auth.login.ConfigFile

#
# แฟ้มค่าที่ตั้งไว้การเข้าใช้พื้นฐาน
#
login.config.url.1=file:${user.home}/.java.login.config

#
# ห้องเรียนเพื่อ instantiate เป็นนโยบายระบบ. สิ่งนี้คือชื่อของห้องเรียน
# สิ่งนั้นจะถูกใช้เหมือนวัตถุนโยบาย.
#
policy.provider=sun.security.provider.PolicyFile

# Theพื้นฐานคือเพื่อมีแฟ้มนโยบายกว้างระบบเดี่ยว,
# และแฟ้มนโยบายในช่องเอกสารบ้านของผู้ใช้.
policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy

# ไม่ว่าหรือไม่เราขยายคุณสมบัติในแฟ้มนโยบาย
# ถ้าสิ่งนี้ถูกตั้งเพื่อผิด, คุณสมบัติ (${...}) จะไม่ถูกขยายในนโยบาย
# แฟ้ม.
policy.expandProperties=true

# ไม่ว่าหรือไม่เรายอมนโยบายพิเศษเพื่อถูกผ่านบนเส้นคำสั่ง
# กับ -Djava.security.policy=somefile. ข้อความออกเส้นนี้เพื่อระงับ
# ความสามารถนี้.
policy.allowSystemProperty=true

# ไม่ว่าหรือไม่เราดูเข้าไปในthe IdentityScope สำหรับที่ไว้ใจ Identities
# เมื่อไรการเจอะ1.1ที่ลงชื่อ JAR แฟ้ม. ถ้าthe identity ค้นพบ
# และถูกไว้ใจ, เราอนุญาตมัน AllPermission.
policy.ignoreIdentityScope=false

#
# พื้นฐาน keystore พิมพ์.
#
keystore.type=jks

#
# ห้องเรียนเพื่อ instantiate เป็นระบบ scope:
#
system.scope=sun.security.provider.IdentityDatabase

#
# รายการของจุดจุลภาค-ชุดที่ที่แยกออกมาซึ่งเริ่มต้นกับหรือเท่ากับข้อความนี้
# ทำให้จะความปลอดภัยข้อยกเว้นเพื่อคือ thrown ได้ไหม
# ที่ผ่านเพื่อ checkPackageAccess ถ้ามิใช่the
# การตรงกับ RuntimePermission ("accessClassInPackage."+ชุด) มี
# ถูกอนุญาต.
package.access=sun.

#
# รายการของจุดจุลภาค-ชุดที่ที่แยกออกมาซึ่งเริ่มต้นกับหรือเท่ากับข้อความนี้
# ทำให้จะความปลอดภัยข้อยกเว้นเพื่อคือ thrown ได้ไหม
# ที่ผ่านเพื่อ checkPackageDefinition ถ้ามิใช่the
# การตรงกับ RuntimePermission ("defineClassInPackage."+ชุด) มี
# ถูกอนุญาต.
#
# โดยพื้นฐาน, ไม่มีชุดถูกจำกัดสำหรับนิยาม, และไม่มีของ
# ห้องเรียนโหลดที่จำหน่ายกับthe JDK การเรียก checkPackageDefinition.
#
#package.definition=

#
# Determines ไม่ว่าแฟ้มคุณสมบัตินี้สามารถถูกเพิ่มเติมเพื่อ
# หรือ overridden บนเส้นคำสั่งผ่าน -Djava.security.properties
#
security.overridePropertiesFile=true

#
# Determines กุญแจพื้นฐานและไว้ใจวิธีคิดโรงงานผู้จัดการสำหรับ
# ชุดjavax.net.ssl.
#
ssl.KeyManagerFactory.algorithm=SunX509
ssl.TrustManagerFactory.algorithm=SunX509

#
# Determines theพื้นฐาน SSLSocketFactory และ SSLServerSocketFactory
# เครื่องมือผู้สำหรับชุดjavax.net.ssl. ถ้า, เนื่องจาก
# ส่งออกและ/หรือนำเข้า regulations, ผู้ไม่ถูกยอมเพื่อคือ
# ที่เคลื่อนย้าย, การเปลี่ยนค่าเหล่านี้จะผลิตไม่มี-functional
# SocketFactory หรือ ServerSocketFactory เครื่องมือ.
#
#ssl.SocketFactory.provider=
#ssl.ServerSocketFactory.provider=

Bภาคผนวก: ค่าที่ตั้งไว้การเข้าใช้ตัวอย่าง
ค่าที่ตั้งไว้การเข้าใช้ถูกค้นหาที่ตั้งการใช้คุณสมบัติความปลอดภัยlogin.config.url.nค้นพบในแฟ้มjava.security. สำหรับคำแนะนำมากกว่าเกี่ยวกับคุณสมบัตินี้และที่ตั้งของแฟ้มjava.security, เห็นภาคผนวกA.
เครื่องมือค่าที่ตั้งไว้พื้นฐาน, ConfigFile, รับคำแนะนำค่าที่ตั้งไว้ของมันจากแฟ้มค่าที่ตั้งไว้การเข้าใช้. สำหรับรายละเอียดเกี่ยวกับเครื่องมือค่าที่ตั้งไว้การเข้าใช้พื้นฐานที่ตระเตรียมกับ JAAS, โปรดปรึกษาthe javadocs สำหรับห้องเรียนcom.sun.security.auth.login.ConfigFile.
ดังต่อไปนี้คือแฟ้มค่าที่ตั้งไว้การเข้าใช้ตัวอย่าง.
การเข้าใช้1 {
sample.SampleLoginModule ที่ต้องการตรวจแก้=ถูก;
};

การเข้าใช้2 {
sample.SampleLoginModule ที่ต้องการ;
com.sun.security.auth.module.NTLoginModule sufficient;
com.foo.SmartCard ที่จำเป็นตรวจแก้=ถูก;
ข้อกำหนดเพิ่มเติมcom.foo.Kerberos ตรวจแก้=ถูก;
};
การเข้าใช้แอปปลิเคชั่น1 มีการเข้าใช้แก้ไข LoginModuleเท่านั้น, SampleLoginModule. เพราะฉะนั้น, ความพยายามโดยการเข้าใช้1 เพื่อ authenticate หัวข้อ (ผู้ใช้หรือบริการ) จะสมบูรณ์ถ้าและถ้าthe SampleLoginModule ทำสำเร็จเท่านั้น.
The authentication logic สำหรับการเข้าใช้แอปปลิเคชั่น2 ง่ายกว่าเพื่ออธิบายกับโต๊ะข้างล่าง. บันทึก: theที่ต้องการ, sufficient, ที่จำเป็น, และข้อกำหนดเพิ่มเติม flags ถูกอ้างถึงในค่าที่ตั้งไว้ javadocs.
Kwan(--)
 

Postby DeepMysterious » Thu May 19, 2005 12:19 pm

โห พิมเองเลยเหรอเนี่ย
เฮ้อ......อยากเป็นนักศึกษาต่อจัง
User avatar
DeepMysterious
Member
 
Posts: 162
Joined: Tue May 10, 2005 10:44 am
Location: อยู่กับความเงียบเวลาปวดอ่า

Postby Lastwin » Tue May 24, 2005 1:31 pm

โหขวัญสุดยอดๆ ขอคาระวะ 1 จอก
ใต้ฟ้า เหนือปฐพี ข้านี้ไร้เทียมทาน

Image
User avatar
Lastwin
Member
 
Posts: 20
Joined: Mon May 16, 2005 5:25 pm
Location: In Your Heart

Postby PePae » Mon Dec 17, 2007 9:27 am

DeepMysterious wrote:โห พิมเองเลยเหรอเนี่ย


กูว่ามาน copy มาจากเน็ต 555555
"ความรัก ไม่ใช่การประเคนของให้กัน
แต่ความรัก คือการมีส่วนร่วมซึ่งกันและกัน
และรักไม่ใช่การโอ้อวด
หากแต่รักคือการเอาใจใส่ซึ่งกันและกัน" (.")*(",)
User avatar
PePae
Member
 
Posts: 64
Joined: Tue May 03, 2005 4:28 pm
Location: (,")*(".)


Return to General Talk

Who is online

Users browsing this forum: No registered users and 1 guest

cron