2014-11-12 5 views
19

Java 기반 구성에서 spring-security-oauth2.0을 사용하려고합니다. 내 구성을 완료,하지만 난 바람둥이에 응용 프로그램을 배포 및 액세스 토큰에 대한 /oauth/token URL을 쳤을 때, Oauth은 때라도 오류가 발생합니다 :Spring-Security-Oauth2 :이 리소스에 액세스하려면 전체 인증이 필요합니다.

<oauth> 
<error_description>Full authentication is required to access this resource</error_description> 
<error>unauthorized</error> 
</oauth> 

내 구성은 Git hub, please click on link

코드는 큰, 그래서 참조에 자식에게. 나는 보내기 요청에 대한 크롬 우체부 클라이언트를 사용하고 있습니다. 다음은 나의 요청입니다.

POST /dummy-project-web/oauth/token HTTP/1.1 
Host: localhost:8081 
Cache-Control: no-cache 
Content-Type: application/x-www-form-urlencoded 

grant_type=client_credentials&client_id=abc%40gmail.com&client_secret=12345678 

오류

는 같은 URL이 Oauth으로 안전하지만 구성에서, 나는 액세스를 위해이 URL을 모든 권한을 제공합니다. 이 문제가 실제로 무엇입니까?

답변

14

기본적으로 client_idclient_secret은 form-urlencoded 본문이 아닌 Authorization 헤더에 있어야합니다.

  1. 는 연결할 당신의 client_idclient_secret, 그들 사이의 콜론 : [email protected]:12345678.
  2. 자료 64 인코딩 결과 : 인증 헤더를 설정 YWJjQGdtYWlsLmNvbToxMjM0NTY3OA==
  3. 는 : Authorization: Basic YWJjQGdtYWlsLmNvbToxMjM0NTY3OA==
+0

나는 이것을'grant_type = password'와'client_credentials'에 사용한다고 생각합니다. 내가 틀렸다면, 저를 시정하십시오. –

+1

내가 이것을 시도하면 예외는'error = "invalid_token", error_description = "잘못된 액세스 토큰 : [email protected]"'을 던집니다. 나는이 리소스에 액세스하기 위해 씬 인증을 요구했지만 이유는 무엇입니까? –

+0

아니요, grant_type = password는 리소스 소유자의 사용자/패스 (즉 최종 사용자)가 클라이언트에 직접 제공 될 것입니다. client_credentials는 자원 소유자를 전혀 인증하지 않을 때 사용됩니다. 그냥 클라이언트 자체.그것이 귀하의 질문이 나타내는 것입니다. 클라이언트가 아니라 클라이언트를 진정으로 인증하려면 내 대답에서 나타내는 구성표와 함께 client_credentials를 사용하십시오. – GaryF

6

이유는 기본적으로 /oauth/token 엔드 포인트가 Basic Access Authentication을 통해 보호되고 있다는 점이다.

귀하의 요청에 Authorization 헤더를 추가하기 만하면됩니다. 나에게 봄의 OAuth 2.0.7-RELEASE 다음 명령 작품

curl.exe --user [email protected]:12345678 http://localhost:8081/dummy-project-web/oauth/token?grant_type=client_credentials

+0

나는 당신의 대답을 시도했다. 그러나 나는 사용자 이름과 패스워드를 넣기위한 팝업을 얻는다. 로그인을 시도하면 도움이되지 않습니다 – Dejell

1

curl -v -u [email protected]:12345678 -d "grant_type=client_credentials" http://localhost:9999/uaa/oauth/token 

: 당신은 쉽게 다음 명령을 실행하여 curl 같은 도구를 테스트 할 수 있습니다

Chrome POSTMAN에서도 작동합니다. '기본 인증'탭에서 클라이언트와 비밀번호를 확인하고 메소드를 'POST'로 설정하고 '양식 데이터'탭에서 승인 유형을 추가하십시오.

12

기본적으로 Spring OAuth에는 기본 HTTP 인증이 필요합니다. 당신은 자바 기반의 구성 스위치를 끄고 싶은 경우에, 당신은이 같은 고객을위한 양식 인증을 허용해야한다 :

@Configuration 
@EnableAuthorizationServer 
protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter { 
    @Override 
    public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception { 
    oauthServer.allowFormAuthenticationForClients(); 
    } 
} 
+0

이 질문에 도움주세요 제발 https://stackoverflow.com/questions/48806722/can-i-append-some-information-in-oauth-check-token- endpoint-and-a-a-a- –

-2

나를 위해 문제를 해결 application.propertiesmanagement.security.enabled=false 설정.

+0

액추에이터 - 엔드 포인트에 대한 보안이 완전히 비활성화되어 엔드 포인트가 더 이상 민감하지 않다고 판단됩니다. – Igor