2014-07-07 2 views
1

스프링 프레임 워크로 개발중인 나머지 서비스에 OAuth를 추가하려고합니다. 저는 주석 기반 구성과 스프링 부트를 사용하여 실행 중입니다. oauth 토큰 엔드 포인트 용 비밀번호

나는 내 프로젝트에 다음과 같은 클래스가 :

@Configuration 
@EnableWebSecurity 
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) 
public class SecuritySettings extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
     auth.inMemoryAuthentication() 
       .withUser("admin").password("123").authorities("ROLE_USER"); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests().anyRequest().authenticated() 
      .and().httpBasic().and().csrf().disable(); 
    } 
} 

다음과 같이 내 인증 서버 구성은 다음과 같습니다

@Configuration 
@EnableAuthorizationServer 
public static class MyAuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter { 

    @Override 
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception { 
     clients.inMemory().withClient("web") 
       .authorizedGrantTypes("password") 
       .authorities("ROLE_CLIENT","ROLE_TRUSTED_CLIENT","ROLE_USER") 
       .scopes("read", "write") 
       .resourceIds(RESOURCE_ID); 
    } 
} 

내가 할 때 나는에 요구하고 /oauth/token/ 끝 지점에 GET 요청 HTTP 기본 자격 증명을 입력하십시오. 나는 admin 사용자로 로그인하려고하면 그 다음은 web 작품으로 사용자 이름을 입력

o.s.s.o.provider.endpoint.TokenEndpoint : Handling error: NoSuchClientException, No client with requested id: admin 

기록됩니다,하지만 난 그것을 위해 암호를 알고하지 않습니다. 기본 암호가 기록되지만 작동하지 않습니다.

Using default security password: f23087f8-58ce-e3d-bc62-58bf0963e75c 

그럼이 암호는 무엇입니까? 어디에서 찾을 수 있습니까? 어떻게 설정할 수 있습니까?

답변

2

사용중인 API는 this builder class입니다.

토큰 엔드 포인트는 클라이언트 응용 프로그램에서 자원에 대한 액세스 토큰을 요청하는 데 사용됩니다. 브라우저 최종 사용자가 사용하지 않습니다. OAuth2 클라이언트는 대개 in the OAuth 2.0 spec과 같이 기본 인증을 사용하여 엔드 포인트에서 인증하는 데 사용할 수있는 "클라이언트 비밀"을 할당받습니다.

그래서 특정 질문에 대답하기 위해, 당신은 빌더 API에 "비밀"방법을 사용하고 클라이언트로 인증하는 값을 사용 : 또한

clients.inMemory().withClient("web") 
    .authorizedGrantTypes("password") 
    .secret("webclientsecret") 
    ... 

, "비밀번호"부여는 것을 의미한다 클라이언트는 토큰 using an end users ID and password을 요청하여 실제로 의도 한 바를 확인합니다. 여기에 암호 문제와 관련이 없습니다.

+0

안녕하세요! 답장을 보내 주셔서 감사합니다. 당신이 옳습니다, 그것이 내가 여기서 성취하려고하는 것입니다. 나는 사용자 이름/암호 조합을 시도하기 위해서만 브라우저를 사용하고있었습니다. 나는 실제로 전에 링크 한 페이지를 읽었습니다. 문서의 예제 요청은'Authorization' 헤더를 보내므로 제 경우에는 Basic Encode64 (web : webclientsecret)와 같아야합니다. 나 맞아? 나는 아직도 그것을 작동시킬 수 없었다. – idursun

+0

나는 마침내 작동하도록했습니다. 실제로 문제를 격리 할 수 ​​있도록 요청한 내용에 실제로 답변했기 때문에 대답을 수락합니다. – idursun

+0

Spring OAuth2에서 클라이언트 정의와 관련된 다른 문제를 조사하면서 답을 찾았습니다. 당신은 코멘트를 기꺼이합니까? 링크는 다음과 같습니다. http://stackoverflow.com/questions/36899386/null-client-in-oauth2-multi-factor-authentication – CodeMed

1

OAuth 액세스 토큰입니다. 사용자 로그인 및 암호를 기반으로하며 보호 된 자원에 액세스하는 데 사용됩니다. URL "/ oauth/token"은 사용 가능한 요청 토큰 대신 액세스 토큰을 가져 오는 데 사용됩니다. 이 요청은 요청 토큰 비밀을 기준으로 디지털 서명됩니다.

의 Oauth 프로토콜은이 방법으로이 액세스 토큰을 사용

  1. 응용 프로그램 소비자가 토큰을 요청 가져옵니다.

  2. 사용자는 서비스 제공 업체의 사이트로 리디렉션되고 거기에서 요청 토큰을 인증합니다. (Http basic을 통해 권한이 부여 된 경우 "Authorization"이름과 "Basic EncodeBase64 ("name : password ") 값을 가진 요청 헤더를 추가해야합니다. EncodeBase64는 함수이고"name "및"password "는 사용자 이름입니다 사용자 암호를 입력합니다.

  3. 응용 프로그램 소비자의 교류가 액세스 토큰에 토큰을 요청합니다.

  4. 응용 프로그램 소비자는 서비스의 API에 승인 된 요청을 보냅니다.

당신이 추가 정보를 찾을 수 없습니다 OAuth 2 Developers GuideSpring Social Reference

질문에 대한 답변을 얻었 으면 좋겠습니다. =)

+0

답장을 보내 주셔서 감사합니다. 나는 실제로 [here] (http://tools.ietf.org/html/rfc6749#section-4.3)에서와 같이 grant_type : password를 사용하여 토큰 엔드 포인트에 대한 게시물 요청을하고 있습니다. 사용자 이름은'admin'이고, 사용자 암호는'123'이며, 권한 부여 요청 헤더에서 인코딩하려고하는 것은'Authorization : Basic [X]'입니다. 여기서 X는'web : clientsecret' 쌍의 인코딩 된 값입니다 . 내가 맞습니까? 여기서 내가 무엇을 놓치고 있니? 이러한 암호는 작동하지 않습니다. 나는 항상 오류가 발생한다 : "무단" 메시지 : "Bad credentials" – idursun