में फेसबुक लॉगिन स्वीकार करें मेरे पास बैकएंड सर्वर (जावा/स्प्रिंग/स्प्रिंग सिक्योरिटी) है। वर्तमान में जब मोबाइल ऐप लॉगिन के उपयोगकर्ता, वे बस अपना उपयोगकर्ता नाम/पासवर्ड जमा करते हैं और स्प्रिंग सिक्योरिटी सत्र बनाता है और इसे JSESSIONID के साथ अनुरोध पर असाइन करता है।मेरे आरईएसटी एपीआई
अब हमारे पास मोबाइल ऐप "फेसबुक के साथ लॉगिन" पर एक बटन भी होगा। यहां मेरी समझ है कि यह कैसे काम करेगा।
- मोबाइल एप्लिकेशन प्राप्त करने के लिए फेसबुक एसडीके का उपयोग करता है एक "ACCESS_TOKEN"
- मोबाइल एप्लिकेशन है, तो उपयोगकर्ता नाम फेसबुक से उपयोगकर्ता प्रोफ़ाइल (नाम, उपनाम, ईमेल आदि ..)
- मोबाइल चेक (अपने सर्वर के खिलाफ) पुनर्प्राप्त अद्वितीय है
- उपयोगकर्ता नाम अद्वितीय, कुछ इस तरह से मेरे बाकी एपीआई, फोन/लॉगिन/फेसबुक पोस्ट एसएसएल और ACCESS_TOKEN, ईमेल, उपयोगकर्ता नाम आदि गुजर ...) से अधिक
अपने सर्वर तो जांच करता है कि ACCESS_TOKEN है वैध
GET graph.facebook.com/debug_token? input_token={token-to-inspect} &access_token={app-token-or-admin-token}
- यदि हाँ, अगर यूआईडी फेसबुक द्वारा वापस अपने स्थानीय डेटाबेस में पहले से मौजूद है, मैं इस प्रकार उपयोगकर्ता प्रवेश द्वारा:
SecurityContextHolder.getContext().setAuthentication(
new UsernamePasswordAuthenticationToken(username, null, ROLE_USER));
अगर मुझे यूआईडी नहीं मिलती है, तो मैं सिर्फ एक नया उपयोगकर्ता बनाता हूं और उपयोगकर्ता को लॉगिन करता हूं।
और अब से मोबाइल द्वारा सर्वर के लिए किए गए सत्र (बनाया है और वसंत सुरक्षा से जुड़ी) और मोबाइल एप्लिकेशन होगा हर अनुरोध पर
प्रमाणित है
कोई मुझे बता सकते हैं अगर यह है चीजों को करने का एक अच्छा तरीका है? क्या मुझे सत्रों का उपयोग करना बंद कर देना चाहिए और स्प्रिंग-सिक्योरिटी-ओएयूटीएच 2 पर स्विच करना चाहिए?
संपादित करें 1
डेव सलाह यहाँ के आधार पर अद्यतन वसंत-सुरक्षा config है:
<!- handle login by providing a token-->
<security:http pattern="/login/facebook" auto-config="false" use-expressions="true" entry-point-ref="loginUrlAuthenticationEntryPoint">
<security:custom-filter ref="facebookLoginFilter" position="FORM_LOGIN_FILTER"/>
<security:intercept-url pattern="/**" access="isAuthenticated()" />
</security:http>
<bean id="loginUrlAuthenticationEntryPoint" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
<constructor-arg value="/login/facebook"></constructor-arg>
</bean>
<!-- handle basic username + password logins-->
<security:http auto-config="true" use-expressions="true" entry-point-ref="forbiddenEntryPoint">
<security:form-login login-processing-url="/security_check" authentication-failure-handler-ref="authFailureHandler"
default-target-url="/" always-use-default-target="true" authentication-success-handler-ref="authSuccessHandler" />
...
my others patterns..
...
</security:http>
<bean id="forbiddenEntryPoint"
class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint" />
<bean id="authSuccessHandler" class="my.package.AuthenticationSuccessHandlerImpl"/>
<bean id="authFailureHandler" class="my.package.AuthenticationFailureHandlerImpl"/>
<bean id="facebookLoginFilter" class="pl.jcommerce.ocean.web.ws.controller.FacebookLoginFilter">
<property name="requiresAuthenticationRequestMatcher" ref="loginRequestUrlHandler"></property>
<property name="authenticationManager" ref="authManager"></property>
</bean>
<security:authentication-manager id="authManager">
<security:authentication-provider ref="facebookAuthenticationProvider" />
</security:authentication-manager>
<security:authentication-manager>
<security:authentication-provider ref="webServiceUserAuthenticationProvider" />
</security:authentication-manager>
<bean id="loginRequestUrlHandler" class="org.springframework.security.web.util.matcher.RegexRequestMatcher">
<constructor-arg index="0" value="/login/facebook" />
<constructor-arg index="1" value="POST" />
<constructor-arg index="2" value="false" />
</bean>
इस उद्देश्य के लिए एक वसंत फ़िल्टर लागू किया गया है।कृपया नीचे दिए लिंक देखें: "स्टेटलेस बाकी Endpoints के लिए स्प्रिंग प्रमाणीकरण फ़िल्टर जो प्रमाणीकरण के लिए फेसबुक टोकन का उपयोग" https://github.com/ozgengunay/FBSpringSocialRESTAuth – Ozgen