0

보호 된 엔드 포인트에 액세스하려고 할 때 Oauth2 서버 (스프링)에 문제가 있습니다. 나는 (Zuul 게이트웨이를 통해) 토큰을 얻고 싶은 경우에url에서 param을 통해 client_id와 client_secret을 전송했습니다.

, 나는 이런 식으로 뭔가 할 거라고 : 인 클라이언트와 정확하게 사용자의 존재 및 내용 유형 위

http://localhost:4444/auth/oauth/token?client_id=gateway&client_secret=1234&grant_type=password&username=user&password=password 

(Asume를 응용 프로그램/x 축 www-form-urlencoded).

gateway:[email protected]:4444/auth/oauth/token?grant_type=password&username=user&password=password 

그런 다음, 작동 :이처럼 그것을 할 경우

이 호출은 작동하지만하지 않습니다.

정상적인 동작으로 간주 되나요? 내가 읽을 수있는 한, 이것이 효과가있다. 그것은 ID와 비밀 같은 내가 매개 변수로 보냈지 만 내가 URL을 수정하면, 그것을 찍은 모든 작동합니다 처리되지 않습니다. 여분의 것을 구현해야합니까?

Oauth2 서버는 두 번째 url처럼 client_id와 client_secret을 전송할 때 작동하지만, 이들을 params (첫 번째 url)로 보내면 그렇지 않습니다.

당신은 (OAuth2를 서비스) 여기에 코드를 확인할 수 있습니다 https://github.com/otamega93/CloudBasedUserRegistration2/tree/master/OAuth2-service

구성은 OAuth2Configuration, WebSecurityConfig 및 AuthServerApplication에 대부분이다. 나는 우편 배달부와 시험하고있다. 이것은 Oauth2 서버에 직접 액세스 할 때도 발생합니다.

토큰 엔드 포인트 ( oauth/token가) 보호
+0

필자는 우체부를 사용하여'Authorization' 헤더를 생성했습니다 (필자는 오타가 있다고 생각합니다). 그리고 실제로 작동합니다. 이것에 대해 좀 더 설명해 주시겠습니까? 왜 이것이 필요한지와 같이, 내가 가진'Authorization : Basic Z2F0ZXdheToxMjM0'과 URL의'gateway : 1234'는 무엇을 의미합니까? 문서 도구는 기꺼이 받아 들여집니다. 또한, 나는 그것을 받아 들일 수 있도록 질문에 적절히 대답해야합니다. 고맙습니다! –

답변

1

, TokenEndpoint를 참조하십시오

고객이 엔드 포인트에 액세스하는 봄 보안 인증을 사용하여 인증해야하며, 클라이언트 ID는 인증 토큰에서 추출됩니다. 이것을 (OAuth2 스펙에 따라) 정렬하는 가장 좋은 방법은 표준 Spring Security 지원으로이 엔드 포인트에 HTTP 기본 인증을 사용하는 것입니다.

OAuth 2 Developers Guide :

토큰 엔드 포인트 클라이언트 비밀의 HTTP 기본 인증을 사용하여 @Configuration 지원 봄의 OAuth에 의해 기본적으로 당신을 위해 보호

. 이것은 XML의 경우가 아니기 때문에 명시 적으로 보호해야합니다.

클라이언트는 기본 인증 체계를 사용하여 자신을 인증해야하므로 클라이언트가 요청에 Authorization 헤더를 추가 할 수 있으며, RFC 2617를 참조하십시오

가 승인을 받기 위해 클라이언트는 사용자 ID 및 암호를 전송 , 은 자격 증명의 base64 [7] 인코딩 된 문자열 내에서 단일 콜론 (":") 문자로 구분됩니다.

basic-credentials = base64-user-pass 
base64-user-pass = <base64 [4] encoding of user-pass, 
        except not limited to 76 char/line> 
user-pass = userid ":" password 
userid  = *<TEXT excluding ":"> 
password = *TEXT 

사용자 ID는 대소 문자를 구분할 수 있습니다.

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== 

첫 번째 요청이 더 Authorization 헤더를 포함하지 : 사용자 에이전트가 사용자 ID "알라딘"과 암호 "열기 참깨"를 전송하고자하는 경우

, 그것은 다음과 같은 헤더 필드를 사용합니다.

는 두 번째 요청이 "사용자 정보"subcompontent와 URL을 포함, RFC 3986를 참조하십시오

사용자 정보 하위가로 인증을 획득하는 방법에 대한 선택적 계획 관련 정보를 사용자 이름으로 구성하고 있습니다 리소스 에 액세스하십시오. 사용자 정보 (있는 경우) 뒤에는 상용 기호 ("@")가 붙어 호스트에서 구분됩니다.

+0

대단한 대답. 이제 나는 그것을 모두 이해합니다. 시간 내 주셔서 대단히 감사합니다! –