복붙노트

[SPRING] OAuth2 클라이언트 자격증 명 흐름 이해하기

SPRING

OAuth2 클라이언트 자격증 명 흐름 이해하기

새 REST 서버와 기존 클라이언트 응용 프로그램 간의 클라이언트 자격 증명 흐름을 이해하고 구현하려고합니다. 이처럼 스프링 보안 OAuth2를 설정했습니다. 지금까지 내 이해에서 내 서버는 이제 다음 요청을 지원해야합니다.

$ curl -X -v -d 'client_id=the_client&client_secret=secret&grant_type=client_credentials' -X POST "http://localhost:9090/oauth/token"

그러나 나는 얻는다.

InsufficientAuthenticationException: There is no client authentication

교장이 여기에 null로 인한 (봄 보안 코드) :

@FrameworkEndpoint
@RequestMapping(value = "/oauth/token")
public class TokenEndpoint extends AbstractEndpoint {

    @RequestMapping
    public ResponseEntity<OAuth2AccessToken> getAccessToken(Principal principal,
            @RequestParam("grant_type") String grantType, @RequestParam Map<String, String> parameters) {

        if (!(principal instanceof Authentication)) {
            throw new InsufficientAuthenticationException(

따라서 서버를 먼저 인증해야합니다. 그러나 그것은 내가하고 싶은 것이 아닙니다. 내 서버 중 두 대가 공유 암호를 사용하여 서로 이야기하기를 원합니다. OAuth 공급자 서버는 클라이언트 서버가 해당 토큰을 사용하여 서버의 모든 REST 리소스에 액세스 할 수 있도록 요청시 (신뢰할 수있는) 클라이언트 서버에 액세스 토큰을 제공해야합니다. 이것은 외부 액세스로부터 REST 자원을 보호해야합니다.

나중에 나는 선택된 자원을 제 3 자에게 제공하고 결국에는 서버 간 통신을위한 좀 더 세분화 된 보안을 구현하기를 원합니다. 하지만 지금은 외부 액세스로부터 REST 서버를 보호해야합니다.

전체 고객 자격 증명 플로우 또는 스프링 보안 응용 프로그램에 대한 오해가있을 수 있으므로 모든 설명이 크게 감사 할 것입니다.

해결법

  1. ==============================

    1.인증 서 v에 클라이언트를 인증하지 않습니다.

    인증 서 v에 클라이언트를 인증하지 않습니다.

    다음과 같이해야합니다.

    curl --user the_client:secret --data "grant_type=client_credentials" http://localhost:9090/oauth/token
    

    이는 클라이언트를 권한 서버에 인증 한 후 grant_type 및 기타 매개 변수를 지정하는 것입니다. 그러면 oauth 클라이언트 세부 정보에 의해 결정된 범위의 'bearer'유형의 액세스 토큰이 반환됩니다. 토큰을 받으면 Authorization 헤더를 설정하여 보호 된 리소스에 액세스 할 수 있습니다.

    curl -H "Authorization: Bearer <accessToken>" <resourceUrl>
    
  2. from https://stackoverflow.com/questions/14140020/understanding-oauth2-client-credentials-flow by cc-by-sa and MIT license