JavaRush /Kurslar /All lectures for UZ purposes /Java Awtentifikatsiya va Avtorizatsiya Xizmati (JAAS) yet...

Java Awtentifikatsiya va Avtorizatsiya Xizmati (JAAS) yetkazib beruvchisi

All lectures for UZ purposes
Daraja, Dars
Mavjud

Spring Security autifikatsiya so'rovlarini Java Awtentifikatsiya va Avtorizatsiya Xizmatiga (JAAS) topshiruvchi paketni taqdim etadi. Ushbu paket quyida batafsil tavsiflangan.

AbstractJaasAuthenticationProvider

AbstractJaasAuthenticationProvider JAAS'dagi AuthenticationProviderning taqdim etilgan implementatsiyalari uchun asos hisoblanadi. Subklasslar LoginContext yaratadigan metodni amalga oshirishlari kerak. AbstractJaasAuthenticationProvider ga inject qilish mumkin bo'lgan va quyida tavsiflangan bir qator bog'liqliklar mavjud.

JAAS CallbackHandler

JAAS'dagi ko'plab LoginModulelar turli xil feedback chaqirilishiga muhtoj. Ushbu feedbacklar odatda foydalanuvchi nomi va parolini olish uchun ishlatiladi.

Spring Security yordamida ishga tushirilganda, Spring Security foydalanuvchi bilan o'zaro aloqani ta'minlaydi (autifikatsiya mexanizmi orqali). Shu bois, JAAS'ga autifikatsiya so'rovi berilganda, Spring Security autifikatsiya mexanizmi Authentication obyektini, JAAS'dagi LoginModulega kerak bo'lgan barcha ma'lumotlar bilan to'liq to'ldiradi.

Shuning uchun Spring Security uchun JAAS paketi, ikki standart feedback handlerlarini o'z ichiga oladi, JaasNameCallbackHandler va JaasPasswordCallbackHandler. Ushbu feedback handlerlarining har biri JaasAuthenticationCallbackHandlerni amalga oshiradi. Aksariyat hollarda, ushbu feedback handlerlarni shunchaki ishlatishingiz mumkin va ularning ichki mexanikasini tushunishga hojat yo'q.

Feedback ishlash logikasini to'liq nazorat qilishni xohlaydiganlar uchun, AbstractJaasAuthenticationProvider ushbu JaasAuthenticationCallbackHandlerlarni InternalCallbackHandler yordamida o'rab oladi. InternalCallbackHandler - bu JAAS'dagi oddiy CallbackHandler interfeysini amalga oshiradigan klass. Har safar JAAS'dagi LoginModule ishlatilganida, u InternalCallbackHandlerlar ro'yxatini oladi. LoginModule ushbu InternalCallbackHandlersni chaqirganda, feedback o'rashgan JaasAuthenticationCallbackHandlerlarga uzatiladi.

JAAS AuthorityGranter

JAAS prinsipl bilan ishlaydi. JAAS'da hattoki "rol"lar prinsipl sifatida ifodalanadi. Spring Security, boshqa tomondan, Authentication obyektlari bilan ishlaydi. Har bir Authentication obyekti bitta prinsip va bir nechta GrantedAuthorityni o'z ichiga oladi. Ushbu turli tushunchalar o'rtasidagi moslikni osonlashtirish uchun, Spring Security'dagi JAAS paketi AuthorityGranter interfeysini o'z ichiga oladi.

AuthorityGranter JAAS prinsipini tekshirib, prinsipga berilgan vakolatlarni ifodalovchi String to'plamini qaytaradi. Har bir qaytarilgan vakolat stringi uchun, AbstractJaasAuthenticationProvider JaasGrantedAuthorityni yaratadi (bu Spring Security'dagi GrantedAuthority interfeysini amalga oshiradi), vakolat stringi va AuthorityGranterga uzatilgan JAAS prinsipini o'z ichiga olgan holda. AbstractJaasAuthenticationProvider dastlab foydalanuvchi ma'lumotlarini JAAS'dagi LoginModule yordamida muvaffaqiyatli autentifikatsiya qilib, so'ngra qaytarilgan LoginContextga murojaat qilib, JAAS prinsiplini oladi. LoginContext.getSubject().getPrincipals() chaqiriladi va har bir olingan prinsip AbstractJaasAuthenticationProvider.setAuthorityGranters(List)da belgilangan har bir AuthorityGranterga uzatiladi.

Spring Security hech qanday ishlab chiqarish AuthorityGranters o'z ichiga olmaydi, chunki har bir JAAS prinsipi o'ziga xos amalga oshirish qiymatiga ega. Biroq, modulli testlarda TestAuthorityGranter bor, u sodda AuthorityGranter amaliyotini namoyish etadi.

DefaultJaasAuthenticationProvider

DefaultJaasAuthenticationProvider JAAS Configuration obyektini bog'liq sifatida kiritishga imkon beradi. So'ngra, kiritilgan JAAS Configurationdan foydalanib, LoginContextni yaratadi. Bu DefaultJaasAuthenticationProviderni JaasAuthenticationProvider kabi ma'lum bir Configuration amalga oshirishi bilan bog'liq emasligini anglatadi.

InMemoryConfiguration

DefaultJaasAuthenticationProviderga Configurationni kiritishni osonlashtirish uchun, InMemoryConfiguration deb nomlangan xotirada saqlanadigan amalga oshirish standarti mavjud. Amaldagi amalga oshirish konstruktoriga kiruvchi Mapni qabul qiladi, bunda har bir kalit tizimga kirish konfiguratsiyasi nomini ifodalaydi, va qiymati - AppConfigurationEntrylardan iborat Array. InMemoryConfiguration shuningdek, har qanday kiritilgan Mapda xaritasi topilmasa ishlatiladigan oddiy AppConfigurationEntrylardan iborat Arrayni qo'llab-quvvatlaydi. To'liq ma'lumot uchun InMemoryConfiguration klass darajasidagi javadoc'ga murojaat qiling.

DefaultJaasAuthenticationProvider konfiguratsiya misoli

Garchi InMemoryConfiguration uchun Spring konfiguratsiyasi odatdagi JAAS konfiguratsiya fayllaridan ko'ra ortiqcha bo'lishi mumkin bo'lsa-da, uni DefaultJaasAuthenticationProvider bilan birgalikda ishlatish odatdagi Configuration amalga oshirishga bog'liq bo'lgan JaasAuthenticationProviderdan ko'ra moslashuvchanroqdir.

Quyida InMemoryConfigurationdan foydalanib, DefaultJaasAuthenticationProvider konfiguratsiya misoli keltirilgan. Shuni unutmangki, maxsus Configuration amalga oshirishlarni DefaultJaasAuthenticationProviderga osonlik bilan kiritish mumkin.

<bean id="jaasAuthProvider"
class="org.springframework.security.authentication.jaas.DefaultJaasAuthenticationProvider">
<property name="configuration">
<bean class="org.springframework.security.authentication.jaas.memory.InMemoryConfiguration">
<constructor-arg>
	<map>
	<!--
	SPRINGSECURITY - bu AbstractJaasAuthenticationProvider uchun odatiy loginContextName
	-->
	<entry key="SPRINGSECURITY">
	<array>
	<bean class="javax.security.auth.login.AppConfigurationEntry">
		<constructor-arg value="sample.SampleLoginModule" />
		<constructor-arg>
		<util:constant static-field=
			"javax.security.auth.login.AppConfigurationEntry$LoginModuleControlFlag.REQUIRED"/>
		</constructor-arg>
		<constructor-arg>
		<map></map>
		</constructor-arg>
		</bean>
	</array>
	</entry>
	</map>
	</constructor-arg>
</bean>
</property>
<property name="authorityGranters">
<list>
	<!-- AuthorityGranter'ning o'z amalga oshirishini yozishingiz kerak bo'ladi -->
	<bean class="org.springframework.security.authentication.jaas.TestAuthorityGranter"/>
</list>
</property>
</bean>

JaasAuthenticationProvider

JaasAuthenticationProvider odatiy Configuration ni ConfigFile nusxasi bo'lishini taxmin qiladi. Ushbu taxmin Configurationni yangilashga urinish uchun qabul qilinadi. Keyin JaasAuthenticationProvider odatiy Configuration dan foydalanib, LoginContext ni yaratadi.

Keling, JAAS tizimga kirish konfiguratsiya faylimiz bor deb faraz qilaylik, /WEB-INF/login.conf, u quyidagicha ko'rinadi:

JAASTest {
	sample.SampleLoginModule required;
};

Barcha Spring Security bean'lari kabi, JaasAuthenticationProvider ilova konteksti orqali sozlanadi. Quyidagi ta'riflar yuqoridagi JAAS tizimga kirish konfiguratsiya fayliga mos keladi:

<bean id="jaasAuthenticationProvider"
class="org.springframework.security.authentication.jaas.JaasAuthenticationProvider">
<property name="loginConfig" value="/WEB-INF/login.conf"/>
<property name="loginContextName" value="JAASTest"/>
<property name="callbackHandlers">
<list>
<bean
	class="org.springframework.security.authentication.jaas.JaasNameCallbackHandler"/>
<bean
	class="org.springframework.security.authentication.jaas.JaasPasswordCallbackHandler"/>
</list>
</property>
<property name="authorityGranters">
	<list>
	<bean class="org.springframework.security.authentication.jaas.TestAuthorityGranter"/>
	</list>
</property>
</bean>

Subject sifatida ijro etish

Agar JaasApiIntegrationFilter konfiguratsiyaga qo'shilgan bo'lsa, u JaasAuthenticationToken uchun Subject sifatida bajarishga harakat qiladi. Bu shuni anglatadiki, Subjectga murojaat qilish mumkin:

Subject subject = Subject.getSubject(AccessController.getContext());

Ushbu integratsiyani jaas-api-provision atributi yordamida osonlik bilan sozlash mumkin. Ushbu funksiya JAAS subyektini to'ldirishga asoslangan eski yoki tashqi API'lar bilan integratsiya qilishda foydalidir.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION