শিরো বনাম স্প্রিংসিকিউরিটি [বন্ধ]


132

আমি বর্তমানে জাভা ভিত্তিক সুরক্ষা ফ্রেমওয়ার্কগুলি মূল্যায়ন করেছি, আমি একটি স্প্রিং 3.0.০ ব্যবহারকারী তাই মনে হয়েছিল যে স্প্রিংসিকিউরিটি সঠিক পছন্দ হবে তবে স্প্রিং সিকিউরিটি অতিরিক্ত জটিলতায় ভুগছে বলে মনে হচ্ছে, এটি অবশ্যই মনে হয় না যে এটি সুরক্ষা কার্যকর করা সহজতর করেছে, শিরো আরও বেশি সুসংহত এবং বুঝতে সহজ বলে মনে হচ্ছে। আমি এই দুটি ফ্রেমওয়ার্কের মধ্যে পেশাদার এবং কনসের তালিকা খুঁজছি।

উত্তর:


118

আমিও একমত যে স্প্রিং সিকিউরিটি খুব জটিল (আমার কাছে) বোধ করে। অবশ্যই, তারা জটিলতা হ্রাস করার জন্য জিনিসগুলি করেছে, যেমন এক্সএমএল কনফিগারেশনের পরিমাণ হ্রাস করার জন্য কাস্টম এক্সএমএল নেমস্পেস তৈরি করা, তবে আমার কাছে, এগুলি স্প্রিং সিকিউরিটির সাথে আমার ব্যক্তিগত মৌলিক সমস্যাটিকে সম্বোধন করে না: এর নাম এবং ধারণাগুলি প্রায়শই সাধারণভাবে বিভ্রান্ত হয় আমাকে. কেবল 'এটি পেতে "এটি কঠিন।

দ্বিতীয়টি আপনি শিরো ব্যবহার করা শুরু করলেও, আপনি কেবল এটি পাবেন '। সুরক্ষার জগতে যা বোঝা মুশকিল তা বোঝা এত সহজ। জেডিকে (যেমন সিফারস) ব্যবহার করা অসহনীয়ভাবে কঠিন সেগুলি এমন স্তরে সরলীকৃত যা কেবল বহনযোগ্য নয়, তবে ব্যবহার করার জন্য প্রায়শই আনন্দ।

উদাহরণস্বরূপ, আপনি কীভাবে হ্যাশ + নুন একটি পাসওয়ার্ড এবং বেস 64 এটিকে জাভা বা স্প্রিং সিকিউরিটিতে এনকোড করে থাকেন? দুটিই শিরোর সমাধান হিসাবে সহজ এবং স্বজ্ঞাত নয়:

ByteSource salt = new SecureRandomNumberGenerator().nextBytes();
new Sha512Hash(password, salt).toBase64();

কমন্স-কোডেক বা অন্য কোনও কিছুর প্রয়োজন নেই। শুধু শিরো বয়াম।

এখন স্প্রিং পরিবেশের সাথে সম্পর্কিত, বেশিরভাগ শিরো ডেভেলপাররা বসন্তকে তাদের প্রাথমিক অ্যাপ্লিকেশন পরিবেশ হিসাবে ব্যবহার করেন। তার মানে শিরোর স্প্রিং ইন্টিগ্রেশন চমত্কার এবং এটি সমস্ত ব্যতিক্রমীভাবে ভালভাবে কাজ করে। আপনি আশ্বাস দিতে পারেন যে আপনি যদি একটি স্প্রিং অ্যাপ লিখছেন তবে আপনার কাছে সুরক্ষিত সুরক্ষা অভিজ্ঞতা থাকবে।

উদাহরণস্বরূপ, এই থ্রেডের অন্য পোস্টে স্প্রিং এক্সএমএল কনফিগারেশন উদাহরণটি বিবেচনা করুন। শিরোতে আপনি একই জিনিসটি (মূলত) কীভাবে করবেন তা এখানে রয়েছে:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd>

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
    <property name="securityManager" ref="securityManager"/>
    <property name="loginUrl" value="/login.jsp"/>
    <property name="successUrl" value="/home.jsp"/>
    <property name="unauthorizedUrl" value="/unauthorized.jsp"/>
    <property name="filterChainDefinitions">
        <value>
        /secure/** = authc
        /** = anon
        </value>
    </property>
</bean>

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
    <property name="realm" ref="myRealm"/>
</bean>

<bean id="myRealm" class="...">
    ...
</bean>

যদিও অন্যান্য বসন্তের উদাহরণের তুলনায় কিছুটা ভার্বোজ, আইএমও পড়া সহজ to

আপনি শিরো ফিল্টার চেইন সংজ্ঞা ব্যবহার করে দেখতে পাবেন সম্ভবত সাধারণ ফিল্টার চেইন এবং ওয়েব-ভিত্তিক সুরক্ষা বিধিগুলির সংজ্ঞা দেওয়ার সবচেয়ে সহজ উপায়! ওয়েব.এক্সএমএলে এগুলি সংজ্ঞায়িত করার চেয়ে আরও সুন্দর।

অবশেষে শিরো পাশাপাশি চরম 'প্লাগব্যাবিলিটি' সরবরাহ করে। আপনি দেখতে পাবেন যে শিরোর পোজো / ইনজেকশন-বান্ধব আর্কিটেকচারের কারণে আপনি প্রায় কোনও কিছু কনফিগার এবং / বা প্রতিস্থাপন করতে পারেন। শেরো প্রায়শই ডিফল্টকে ডিফল্ট করে দেয় এবং আপনার যা প্রয়োজন তা আপনি ওভাররাইড বা কনফিগার করতে পারেন।

দিনের শেষে, আমি মনে করি যে এই দুজনের কোনওটিই বেছে নেওয়া আপনার মানসিক মডেল সম্পর্কে আরও বেশি - দু'জনের মধ্যে কোনটি আরও বেশি বোঝায় এবং আপনার পক্ষে আরও স্বজ্ঞাত? কারওর জন্য এটি শিরো হবে, অন্যদের জন্য এটি স্প্রিং সিকিউরিটি হবে। শিরো বসন্তের পরিবেশে দুর্দান্ত কাজ করে, তাই আমি বলতে চাই যে আপনি দুজনের মধ্যে কোনটি বেশি উপভোগ করেন এবং আপনার পক্ষে সবচেয়ে বেশি অর্থবোধ করেন তার উপর ভিত্তি করে চয়ন করুন।

শিরোর স্প্রিং ইন্টিগ্রেশন সম্পর্কে আরও তথ্যের জন্য: http://shiro.apache.org/spring.html


শিরো ব্যবহার শুরু করার আগে আমি এই সব পড়েছি। শিরো টীকাগুলি বসন্তে কিছু সমস্যা ভুগছে বলে মনে হচ্ছে it এটি কীভাবে সমাধান করা যায় সে সম্পর্কে তথ্য খুব হার এবং স্ট্যাকওভারফ্লোতে বিভিন্ন পোস্ট রয়েছে (1 বা 2 আমার দ্বারা পোস্ট করা হয়েছে) যার বেশিরভাগ সময় কোনও উত্তর পাওয়া যায় নি। আমি জটিলতার সাথে কথা বলার পরেও বসন্তের সুরক্ষার দিকে যাওয়া উচিত বলে আমি গুরুত্ব সহকারে ভাবছিলাম, এর সাথে আমি নিশ্চিত যে আমার লোকেরা আমাকে সঠিক দিক নির্দেশ করতে পারে i
কালো ইন্দ্রিয়ের

@ ব্ল্যাকসেনী আপনি উল্লিখিত সমস্যাগুলি সমাধান করেছেন? শিরোর সাথে লেগে থাকা বা স্প্রিং সিকিউরিটিতে স্যুইচ করা?
আলেকজান্ডার সুর্যাপেল

হাই @ আলেকজান্ডারসুরফেল আমি সেই প্রকল্পের জন্য বসন্তে যাইনি। সহকর্মী এটি সক্রিয়ভাবে ব্যবহার করছে। এবং আমি এটি একটি বসন্ত-বুট প্রকল্পে পরীক্ষা করার পরিকল্পনা করছি। এটি আমার পক্ষে সুন্দরভাবে কাজ করে। আমি অন্যান্য সমস্ত প্রকল্প সরিয়ে নেব। এটি হিসাবে সহজ
কালো ইন্দ্রিয়

ঠিক আছে, আমি পরের প্রকল্পের জন্য শিরো চেষ্টা করার সিদ্ধান্ত নিয়েছি !!
এরিক ওয়াং

32

শিরো ব্যবহারের অভিজ্ঞতা আমার নেই এবং আপনি বসন্ত সুরক্ষা সম্পর্কে যা বলেছিলেন তার সাথে "আংশিকভাবে" আমি একমত। স্প্রিং সিকিউরিটি ৩.x এর আগে, বসন্ত সুরক্ষা (বা এসিগি) সেট আপ করতে খুব বেদনাদায়ক ছিল। একটি সাধারণ ভূমিকা-ভিত্তিক কনফিগারেশনটিতে কমপক্ষে 140 টি ক্রিপ্টিক এক্সএমএল কনফিগারেশন লাগবে ... আমি এটি জানি কারণ আমি লাইনগুলি নিজেই গণনা করেছি। এটি এমন এক জায়গা যা আপনি একবারে সেট আপ করেছিলেন এবং আপনি প্রার্থনা করেন যে আপনি আবার কনফিগারেশনটি স্পর্শ না করে এটি চিরকাল কাজ করবে, কারণ আপনি নিশ্চিত করতে পারেন যে সমস্ত কনফিগারেশন মানে কী আপনি ভুলে গেছেন have :)

স্প্রিং সিকিউরিটি ৩.x এর সাথে এটির ব্যাপক উন্নতি হয়েছে। এটি securityনেমস্পেসটি প্রবর্তন করে যা 140 লাইন থেকে ~ 30 লাইনে কনফিগারেশনটি অত্যন্ত সংক্ষেপে সংক্ষিপ্ত করে তোলে। আমার এক প্রকল্পের স্প্রিং সিকিউরিটি 3.x এর উদাহরণ এখানে:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:security="http://www.springframework.org/schema/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd">

    <security:http auto-config="true">
        <security:form-login login-page="/index.do" authentication-failure-url="/index.do?login_error=1" default-target-url="/index.do"
            always-use-default-target="true" />
        <security:logout logout-success-url="/index.do" />
        <security:intercept-url pattern="/secure/**" access="ROLE_ADMIN,ROLE_USER" />
        <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    </security:http>

    <bean id="customAuthenticationProvider" class="my.project.CustomAuthenticationProviderImpl">
        ...
    </bean>

    <security:authentication-manager>
        <security:authentication-provider ref="customAuthenticationProvider" />
    </security:authentication-manager>

</beans>

স্প্রিং সিকিউরিটি 3.x এর সৌন্দর্য এটি অত্যন্ত কনফিগারযোগ্য যা মূল কনসগুলির মধ্যে একটিতে অবদান রাখে: বুঝতে খুব জটিল। ডকুমেন্টেশনগুলি পড়া সহজ নয় কারণ আমি স্প্রিং সিকিউরিটি ব্যবহৃত কয়েকটি শর্তের সাথে আংশিকভাবে পরিচিত। তবে, আপনার কাস্টম কনফিগারেশন তৈরি করতে বা আপনার সুরক্ষাটি কতটা দানাদার হতে চান তা নিয়ন্ত্রণ করতে হলে বিকল্পগুলি সেখানে রয়েছে। অন্যথায়, কোনও ভূমিকা-ভিত্তিক সুরক্ষা চেক সম্পাদন করতে আপনি উপরের <30 টি লাইনের সাথে আটকে থাকতে পারেন।

আমি স্প্রিং সিকিউরিটির সম্পর্কে যা পছন্দ করি তা হ'ল সুরক্ষাটি সেট আপ হয়ে গেলে প্রকল্পটি বিনা মূল্যে সংহত করা হয়। এটি প্রকৃত প্রকল্প কোডটি সুরক্ষাটির অস্তিত্ব জানে না ... এবং এটি ভাল, কারণ এটি আমাকে ভবিষ্যতে সহজেই সুরক্ষা উপাদানটিকে বিচ্ছিন্ন করতে বা আপগ্রেড করতে দেয় (প্রাক্তন: এলডিএপি / সিএএসে ডাটাবেস প্রমাণকে পরিবর্তন করুন) প্রমাণীকরণ)।


আপনি যখন ধারক ভিত্তিক সুরক্ষা থেকে শিরো বা অন্যদের মতো বিকল্পগুলিতে সরিয়ে নেওয়া ভাল তখন সম্পর্কে কিছু বলতে চান? এখানে আরও কেন্দ্রীভূত প্রশ্নটি দেখুন: স্ট্যাকওভারফ্লো.com
রজত গুপ্ত

10
আমি শিরো এবং বসন্ত সুরক্ষা উভয়ই চেষ্টা করেছি এবং আমি ব্যক্তিগতভাবে অনুভব করি যে শিরোটি বুঝতে খুব সহজ যেখানে বসন্তের সুরক্ষা জটিল বলে মনে হয়। আমার কীভাবে বসতি সিকিউরিটিতে ভূমিকা / গোষ্ঠী / ব্যবহারকারীদের জন্য নির্ধারিত অনুমতিগুলি সেটআপ করতে হবে তা এখনও নির্ধারণ করতে পারেনি- (আমার মনে হয় এসিএল এর সমাধান হতে পারে)। শিরো দিয়ে এটি বেশ সহজ ছিল। আমি বসন্ত সুরক্ষা বা শিরো সম্পর্কে বিশেষজ্ঞ নই, উভয়ের ব্যবহারকারীর হিসাবে এটি কেবল আমার ব্যক্তিগত অভিজ্ঞতা।
সুধির এন

@ সুধির আপনি শিরো এর কনফিগারবিলিটিতে কোন বাধা পেয়েছেন?
আলেকজান্ডার সুর্যাপেল

এটি আমাদের সমস্ত ব্যবহারকারীর ক্ষেত্রে কাজ করেছে, আমি মনে করি এটি বেশিরভাগ পরিস্থিতিতেই এটি উপযুক্ত করা সম্ভব। আপনার ইউসকেস কি?
সুধীর এন

21

আমি কয়েক মাস ধরে স্প্রিং সিকিউরিটি (সংস্করণ 3.1) ব্যবহার করে আসছিলাম এবং এতে খুশি হয়েছিলাম। এটি সত্যিই শক্তিশালী এবং এর খুব সুন্দর বৈশিষ্ট্য রয়েছে, বিশেষত আমি আগে যেমনটি হাতে হাতে সমস্ত কিছু প্রয়োগ করার পরে! যদিও এটি আমি কোথাও পড়েছি, অ্যাপটির ডিভেলোপমেন্টের শুরুতে আপনি এমন কিছু সাজান যা একবার আপনি সেট করেছিলেন এবং তারপরে এটি শেষ অবধি কাজ করার জন্য প্রার্থনা করুন, কারণ যদি আপনাকে এটি ঠিক করতে হয় তবে আপনি আপনার প্যারামিটার করার জিনিসগুলি সম্ভবত ভুলে গেছে।

তবে তারপরে আরও একটি জটিল সুরক্ষা প্রয়োজনীয়তার সাথে একটি নতুন প্রকল্প আসে। সংক্ষেপে, আমাদের কয়েকটি সম্পর্কিত ওয়েব অ্যাপসের মধ্যে কিছু প্রকারের কাস্টম এসএসও বাস্তবায়ন করতে হয়েছিল।

আমি এইচটিটিপি যুক্তি, কুকিজ, সেশন আইডি এবং স্টাফগুলির ক্ষেত্রে এবং কী ক্রমে কী হওয়া উচিত তা আমি ঠিক কীভাবে জানতে পেরেছিলাম তবে আমি স্প্রিং সিকিউরিটি এপিআইগুলির সাথে লড়াইয়ের একটি দিনের আরও ভাল অংশ ব্যয় করেছি এবং এখনও বুঝতে পারি নি ঠিক কোন শ্রেণি বা ইন্টারফেসটি আমি জোড় করে প্রয়োগ করব বা ওভাররাইড করব এবং কীভাবে প্রসঙ্গে তাদের প্লাগ করব। পুরো API টি অনেক সময় জটিল এবং কিছুটা রহস্যজনক মনে হয়েছিল। এবং ডক সাধারণ ব্যবহারের ক্ষেত্রে এবং এমনকি কিছু কাস্টমাইজেশনের জন্য বেশ ভাল, যদিও এটি আমার প্রয়োজনীয়তাগুলি কভার করতে পারে না।

উত্তরগুলি এখানে এবং ওয়েবে অন্য কয়েকটি জায়গায় পড়ার পরে, আমি এই ধারণাটি পেয়েছিলাম যে শিরো আমার প্রয়োজনীয়তাগুলি বুঝতে এবং কাস্টমাইজ করা সহজ হবে। তাই আমি চেষ্টা করেছিলাম।

এবং আমি আনন্দিত যে আমি এটি করেছি কারণ একদিন কাজ করার পরে আমি আমার স্প্রিং ওয়েবআপে কোনও ঝামেলা ছাড়াই কেবলমাত্র একটি বেসিক অথেনটিকেশন এবং অনুমোদনের ব্যবস্থা স্থাপন করতে নয়, বরং কাস্টম এসএসও আচরণটি বাস্তবায়নের জন্যও এপিআই সম্পর্কে যথেষ্ট পরিমাণে জানতে পেরেছিলাম managed খুঁজছি. আমাকে কেবল 2 বা 3 ক্লাস প্রসারিত করতে হয়েছিল এবং পুরো জিনিসটি আমার বসন্ত প্রসঙ্গে XML কনফিগারেশনের প্রায় 25 টি লাইন নিয়েছিল।

সুতরাং উপসংহার হিসাবে, ব্যবহারের সহজতর দক্ষতা এবং বক্ররেখার দিকগুলি সম্পর্কে শেরো সত্যিই বেশ পছন্দনীয় এবং আমি মনে করি ভবিষ্যতে আমি সম্ভবত এটির সাথে চলে যাব, যদি না আমার কিছু বৈশিষ্ট্যের অভাব বা অন্য কোনও সমস্যার মুখোমুখি হয় (যা আমি না করি) যতদূর).

টিএল; ডিআর: দু'জনই শক্তিশালী, তবে শিরো শিখতে অনেক সহজ।


পিয়ার, ইনপুট জন্য ধন্যবাদ। আমারও এসএসও দরকার আমি মনে করি না আপনি কি ক্লাস প্রকাশ করতে হয়েছিল তার কয়েকটি উদাহরণ আপনি প্রদর্শন করতে পারেন।
কিংঅ্যান্ড্রু

@ কিংআন্ড্রু: কয়েকটি কথায়, আমি যা করেছি তা হ'ল আমার নিজস্ব রাইজেলিং, প্রমাণীকরণ টোকেন এবং প্রমাণীকরণ ফিল্টার implement এবং সমস্ত প্রয়োজনীয় ফিল্টার এবং নদীর গভীরতানির্ণয়। তবে আমি যা করি তা "সাধারণ" তাই নয়, এটি একটি টোকেনের উপর ভিত্তি করে যা ডিবিতে সঞ্চিত রয়েছে যা 2 টি অ্যাপের মধ্যে সাধারণ। তাই আমি আলাদা এসএসও সার্ভার ব্যবহার করছি না।
পিয়েরে হেনরি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.