2017-02-12 1 views
1

Username/Password/ClientId/Secret을 허용하는 Spring을 사용하는 OAuth 토큰 생성이 완벽하게 작동합니다. 외부 클라이언트의 경우 사용자 이름과 암호로 입력해야 OAuth Token이 생성됩니다.외부 클라이언트 용 ClientId 및 ClientSecret이없는 Spring OAuth2 토큰

<security:http pattern="/oauth/token" create-session="stateless" 
     authentication-manager-ref="clientAuthenticationManager" 
     xmlns="http://www.springframework.org/schema/security"> 
     <security:intercept-url pattern="/oauth/token" access="IS_AUTHENTICATED_FULLY" /> 
     <security:anonymous enabled="false" /> 
    <security:http-basic entry-point-ref="clientAuthenticationEntryPoint" /> 
     <!-- include this only if you need to authenticate clients via request parameters --> 
     <security:custom-filter ref="clientCredentialsTokenEndpointFilter" after="BASIC_AUTH_FILTER" /> 
    <security:access-denied-handler ref="oauthAccessDeniedHandler" /> 
    </security:http> 

다음은 추가해야하는 새 코드이지만 브라우저에서 사용자 이름과 암호를 묻는 것입니다. 우리는 클라이언트 ID없이의 OAuth를 생성하고 내부의 OAuth를 생성하는 클라이언트 ID를 전달할 수있는 경우

<security:http pattern="/**external**/oauth/token" create-session="stateless" 
     authentication-manager-ref="clientAuthenticationManager" 
     xmlns="http://www.springframework.org/schema/security"> 
     <security:intercept-url pattern="/external/oauth/token" access="IS_AUTHENTICATED_FULLY" /> 
     <security:anonymous enabled="false" /> 
    <security:http-basic entry-point-ref="clientAuthenticationEntryPoint" /> 
     <security:custom-filter ref="clientCredentialsTokenEndpointFilter" after="BASIC_AUTH_FILTER" /> 
    <security:access-denied-handler ref="oauthAccessDeniedHandler" /> 
    </security:http> 

는 안내하시기 바랍니다.

답변

1

clientId없이 OAuth 토큰을 생성 할 수 없습니다! Oauth2에는 토큰, 암시 적 코드, 사용자/패스를 만드는 3 가지 방법이 있습니다. Oauth 클라이언트가 사용자의 자격 증명에 액세스 할 수 있다는 것을 의미하기 때문에 마지막을 피해야합니다. OAuth는이를 방지하기 위해 작성되었습니다. 암시 적 토큰은 사용자 자격 증명 (일반적으로 브라우저 만 포함)을 사용하여 부여됩니다. 코드 모드에서 OAuth 클라이언트는 (브라우저에 있어서는 안된) 코드를 수신 한 다음 토큰으로 교환합니다. 토큰 교환에 대한 코드는 Oauth 클라이언트가 clientId와 secret를 사용하여 인증해야합니다. 이는 일반적으로 기본 인증을 사용하여 수행됩니다.

+0

당신의 의견에 동의하지만, 내가 달성하고자하는 것은 내부적으로 전달 된 clientId를 사용하는 토큰 생성입니다. 여기서 사용자는 스프링 보안 xml 구성으로 사용자 이름과 암호 만 전달합니다. – Rahul

+0

암시 적 토큰을 발행하는 것에 대해 이야기하고 있습니까? 암시 적 권한 부여를 사용하면 Oauth 클라이언트는 사용자 브라우저를 서버의/oauth/authorize로 리디렉션합니다. 이 URL은 보호되어 있으므로 브라우저가 로그인 페이지로 리디렉션되고 사용자는 양식 기반 인증을 사용하여 인증됩니다. 로그인이 끝나면 브라우저에 승인 페이지가 표시되고 use r은 clientId가 식별 한 응용 프로그램에 대한 액세스를 승인/거부합니다. OAuth 클라이언트는 신임장을 보지 않아야하며, 신뢰할 수있는 OAuth 서버 만이 그렇지 않으면 OAuth를 사용할 필요가 없습니다. –

0

나는 당신이 필요로하는 것은 오직 신뢰할 수있는 클라이언트와 함께 사용되어야한다

자원 소유자 암호 부여 유형 https://tools.ietf.org/html/rfc6749#section-1.3.3에 설명되어 자원 소유자 암호 보조금 형태라고 생각합니다. 따라서 말하는 외부 클라이언트가 신뢰할 수있는 클라이언트 인 경우 (동일한 회사, 예 : Facebook Mobile App에서 개발 한 기본 모바일 응용 프로그램과 마찬가지로)이 기능을 사용할 수 있습니다.

흐름이 https://tools.ietf.org/html/rfc6749#section-4.3.1

에 설명되어 자원 소유자 부여 유형의 가장 중요한 측면은 클라이언트해야하지 저장소 사용자 이름과 암호입니다.

관련 문제