>

저는 스프링 보안 oauth2의 새로운 기능입니다. 이 인증 서버 샘플 코드 를 실행하고 싶습니다. 토큰을 얻으려면 우편 배달부를 다음과 같이 설정 한 다음 요청을 보냅니다.

이 경우 비밀번호로 클라이언트 ID를 입력했지만 비밀번호없이 로그인하고 싶습니다. 예를 들어 내 사용자는 사용자 이름, 비밀번호 및 클라이언트 ID를 보낸 다음 토큰을받습니다. 그러나 내가 보내는 모든 요청에서 서버는 401 응답을 반환합니다. 봄 부팅 2 oauth 2,어떻게해야합니까?

  • 답변 # 1

    1)액세스 토큰을 받으려면다음과 같은 요청을 사용해야합니다.

    curl --user client:secret \
      -X POST http://localhost:8080/oauth/token \
      -H "Content-Type: application/x-www-form-urlencoded" \
      -d "grant_type=password&username=username&password=password&scope=*" \
    
    

    기본 인증및 애플리케이션 자격 증명 (원하는 경우 비밀을 피할 수 있음). 요청 본문에 전달해야하는 사용자 이름 및 비밀번호와 grant_type 의 '비밀번호'값  필드.

    응답하여 다음과 같은 액세스 및 새로 고침 토큰을받습니다 :

    {
        "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2VtYWlsIjoidXNlckBtYWlsLmNvbSIsInVzZXJfbmFtZSI6InVzZXIiLCJzY29wZSI6WyIqIl0sImV4cCI6MTU0Nzc2NDIzOCwiYXV0aG9yaXRpZXMiOlsiQURNSU4iXSwianRpIjoiYzk1YzkzYTAtMThmOC00OGZjLWEzZGUtNWVmY2Y1YWIxMGE5IiwiY2xpZW50X2lkIjoiY2xpZW50In0.RWSGMC0w8tNafT28i2GLTnPnIiXfAlCdydEsNNZK-Lw",
        "token_type": "bearer",
        "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2VtYWlsIjoidXNlckBtYWlsLmNvbSIsInVzZXJfbmFtZSI6InVzZXIiLCJzY29wZSI6WyIqIl0sImF0aSI6ImM5NWM5M2EwLTE4ZjgtNDhmYy1hM2RlLTVlZmNmNWFiMTBhOSIsImV4cCI6MTU0Nzc2NzcxOCwiYXV0aG9yaXRpZXMiOlsiQURNSU4iXSwianRpIjoiZDRhNGU2ZjUtNDY2Mi00NGZkLWI0ZDgtZWE5OWRkMDJkYWI2IiwiY2xpZW50X2lkIjoiY2xpZW50In0.m7XvxwuPiTnPaQXAptLfi3CxN3imfQCVKyjmMCIPAVM",
        "expires_in": 119,
        "scope": "*"
        "jti": "c95c93a0-18f8-48fc-a3de-5efcf5ab10a9"
    }
    
    

    2) 그런 다음 해당 액세스 토큰을 사용하여 서버 응용 프로그램의리소스에 액세스 할 수 있습니다. 이 경우베어러 토큰인증 유형 및 액세스 토큰이 필요합니다 :

    curl -X GET http://localhost:8080/demo \
      -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2VtYWlsIjoidXNlckBtYWlsLmNvbSIsInVzZXJfbmFtZSI6InVzZXIiLCJzY29wZSI6WyIqIl0sImV4cCI6MTU0Nzc2NDIzOCwiYXV0aG9yaXRpZXMiOlsiQURNSU4iXSwianRpIjoiYzk1YzkzYTAtMThmOC00OGZjLWEzZGUtNWVmY2Y1YWIxMGE5IiwiY2xpZW50X2lkIjoiY2xpZW50In0.RWSGMC0w8tNafT28i2GLTnPnIiXfAlCdydEsNNZK-Lw'
    
    

    3)새로 고침하려면 클라이언트 자격 증명과 함께 기본 인증을 다시 사용해야하지만이 경우 grant_type 로 'refresh_token'이 필요합니다 :

    curl --user client:secret \
      -X POST http://localhost:8080/oauth/token \
      -H 'Content-Type: application/x-www-form-urlencoded' \
      -d 'grant_type=refresh_token&scope=*&refresh_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2VtYWlsIjoidXNlckBtYWlsLmNvbSIsInVzZXJfbmFtZSI6InVzZXIiLCJzY29wZSI6WyIqIl0sImF0aSI6ImM5NWM5M2EwLTE4ZjgtNDhmYy1hM2RlLTVlZmNmNWFiMTBhOSIsImV4cCI6MTU0Nzc2NzcxOCwiYXV0aG9yaXRpZXMiOlsiQURNSU4iXSwianRpIjoiZDRhNGU2ZjUtNDY2Mi00NGZkLWI0ZDgtZWE5OWRkMDJkYWI2IiwiY2xpZW50X2lkIjoiY2xpZW50In0.m7XvxwuPiTnPaQXAptLfi3CxN3imfQCVKyjmMCIPAVM'
    
    

    액세스 토큰이 만료 될 때마다 세 번째 요청으로 새로 고쳐야합니다. 그러면 리소스에 다시 액세스 할 수 있습니다.

    추가 정보

    1) JWT 및 사용자 지정 클레임으로 간단한 OAuth2 앱을 빌드하는 방법에 대한 나의 대답

    2) 관련 데모 응용 프로그램

    3) 관련 우편 배달부 수집

  • 답변 # 2

    OAuth 2.0 사양은 클라이언트 응용 프로그램이 액세스 토큰 (클라이언트가 액세스 할 수있는 사용자의 권한을 나타냄)을 획득하기위한 여러 부여 ( "방법")를 설명합니다. 그들의 데이터).

    Spring OAuth2 사전 정의 된 부여 유형 :

    ClientCredentialsTokenGranter

    RefreshTokenGranter

    AuthorizationCodeTokenGranter

    ImplicitTokenGranter

    ResourceOwnerPasswordTokenGranter (예를 들어 사용하는 암호 부여 유형)

    토큰 획득 로직을 변경하려면 사용자 정의TokenGranter를 사용하면됩니다.

    추가 :

    OAuth 2 개발자 안내서

관련 자료

  • 이전 algorithm - python libtcod - 가변 이동 비용 지형으로 길 찾기를 수행하는 방법은 무엇입니까?
  • 다음 sql - postgres 쿼리 내에서 List 사용