2016-09-10 13 views
0

Erstens, ich behinderte Grund Auth:Spring Security OAuth2: InsufficientAuthenticationException

security.basic.enabled=false 

Dann greife ich auf die Autorisierungsseite:

http://localhost:8080/oauth/authorize?client_id=client&response_type=code&redirect_uri=http://www.baidu.com 

ich folgende Ausnahme wurde:

org.springframework.security.authentication.InsufficientAuthenticationException: User must be authenticated with Spring Security before authorization can be completed. 
    at org.springframework.security.oauth2.provider.endpoint.AuthorizationEndpoint.authorize(AuthorizationEndpoint.java:138) ~[spring-security-oauth2-2.0.10.RELEASE.jar:na] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_45] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_45] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_45] 
    at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_45] 
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) ~[spring-web-4.2.7.RELEASE.jar:4.2.7.RELEASE] 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) ~[spring-web-4.2.7.RELEASE.jar:4.2.7.RELEASE] 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) ~[spring-webmvc-4.2.7.RELEASE.jar:4.2.7.RELEASE] 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:832) ~[spring-webmvc-4.2.7.RELEASE.jar:4.2.7.RELEASE] 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:743) ~[spring-webmvc-4.2.7.RELEASE.jar:4.2.7.RELEASE] 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.2.7.RELEASE.jar:4.2.7.RELEASE] 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961) ~[spring-webmvc-4.2.7.RELEASE.jar:4.2.7.RELEASE] 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895) ~[spring-webmvc-4.2.7.RELEASE.jar:4.2.7.RELEASE] 
    at ... 

Ich verstehe nicht, warum ich zuerst Authentifizierung vor OAuth machen muss?

Antwort

3

Der Fluss für die Gewährung Autorisierungscode lautet:

  1. Client den Benutzer umleitet Servers Autorisierungsseite Auth. Somit wäre der Benutzer
  2. bereits eingeloggt, würde dem Benutzer sofort eine Autorisierungsseite angezeigt, auf der er die Autorisierungsanfrage genehmigen kann. Wenn der Benutzer noch nicht angemeldet ist, sollte er zuerst auf eine Anmeldeseite umgeleitet werden, um sich selbst zu authentifizieren, damit Spring Security weiß, wer die Berechtigung erteilt.

Was Sie wahrscheinlich tun müssen, ist die Berechtigung Endpunkt sichern, indem sie eine Rolle wie diese in XML gewährt erfordern:

<security:http disable-url-rewriting="true" 
       use-expressions="true" 
       entry-point-ref="loginEntryPoint"> 
    ... 

    <security:intercept-url pattern="/oauth/authorize" access="hasRole('ROLE_USER')"/> 
    ... 
</security:http> 

Wenn der Benutzer noch nicht angemeldet ist, wird dies auslösen Spring Security umleiten Der Benutzer muss sich wie in Ihrer loginEntryPoint konfiguriert anmelden. Normalerweise würden Sie den Benutzer auf eine Anmeldeseite umleiten. Nach der erfolgreichen Authentifizierung kehrt der Benutzer zum Autorisierungsendpunkt zurück.

Verwandte Themen