Ich habe einen Backend-Server (Java/Spring/Spring Security). Wenn Benutzer sich gerade von einer mobilen App anmelden, senden sie einfach ihren Benutzernamen/ihr Passwort und Spring Security erstellt eine Sitzung und weist sie der Anfrage mit einer JSESSIONID zu.Akzeptiere Facebook Login in meine REST API
Wir hätten jetzt auch einen Button auf der mobilen App "Login with Facebook". Hier ist mein Verständnis davon, wie es funktionieren wird.
- mobile app nutzt Facebook SDK ein "access_token"
- mobile app retrive Benutzerprofil von Facebook (Name, Vorname, E-Mail etc ..)
- mobilen Kontrollen (gegen MY-Server) zu erhalten, wenn der Benutzername einzigartig ist
- wenn Benutzername einzigartig, mY REST-aPI-Aufruf, mit so etwas wie dieses/login/facebook POST über SSL und das Bestehen der access_token, E-Mail, Benutzername etc ...)
meinem Server prüft dann, ob die access_token ist gültig
GET graph.facebook.com/debug_token? input_token={token-to-inspect} &access_token={app-token-or-admin-token}
- Wenn ja, wenn die UID von Facebook zurück in meiner lokalen Datenbank bereits vorhanden ist, ich den Benutzer wie folgt signin:
SecurityContextHolder.getContext().setAuthentication(
new UsernamePasswordAuthenticationToken(username, null, ROLE_USER));
Wenn ich die UID nicht finde, erstelle ich einfach einen neuen Benutzer und melde mich beim Benutzer an.
und von jetzt an jedem auf den Server von den mobilen gestellten Antrag wird die Sitzung (erstellt und angebracht durch Feder Sicherheit) und die mobile App ist
mir jemand authentifiziert haben könnte sagen, ob dies ein guter Weg, Dinge zu tun? Sollte ich aufhören, Sitzungen zu verwenden und zu Spring-Security-OAUTH2 wechseln?
EDIT 1
Basierend auf Dave Ratschläge hier ist die aktualisierte feder Sicherheit 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>
Ein Federfilter ist für diesen Zweck implementiert.Bitte beachten Sie unter folgendem Link: „Spring Authentifizierungsfilter für Stateless REST-Endpunkte, die Facebook nutzen Token zur Authentifizierung“ https://github.com/ozgengunay/FBSpringSocialRESTAuth – Ozgen