spring-security 의존성만 추가해도 보안에 관한 여러빈 이 추가되고기본적인 보안이 됨?웹 보안 구성 빈객체 설정 클래스 생성 역할. (WebSecurity, HttpSecurity)http 요청 관련 보안 처리 (필터 기반 ) 인증 인가 초기화 작업 이 진
위에서부터 순서대로 설정클래스 실행인터페이스 임 구현하게 되면 우리가 어떤 조건에 따라서 원하는 설정클래스를 로드해야될때 ImportSelector로드 가능함.1번이 트루면 A설정 클래스로드 이런식..오른쪽 WebMvcSecurityConfiguration 을 현재
이런 순 왜?우리가 사용하고자하는 설정 클래스의 값들을 문자열로 구성해서 리턴하면된다?간단히 요약하면, 이 코드는 DispatcherServlet이 클래스 경로에 있는지 확인현재 웹 의존성을 추가했기때문에 WebMvcSecuritconfiguration 반환함Delea
spring Security는 초기화 진행이 되면 기본적으로 2개 인증방식을 설정한다.FormLogin / HttpBasic어떤 클래스에서 AuthenticationEntryPoint설정을 관장할까?인증 예외 발생시 AuthenticationEntryPoint클래스를
사용자 요청 -> DelegatingFilterProxy사용자가 요청시 처음 요청을 받는 곳은 Sevlet Container(Was)Was에서 스프링의 라이프사이클을 가질 수 없기에 스프링 빈에 접근을 못한다.그래서 대리자 DelegaingFilterProxy에서 받아
HTTP는 액세스제어 / 인증 을 위한 프레임웍 제공가장 일반적인 인증 방식은 BasicRFC 7235 표준 인증 프로토콜은 HTTP 인증 헤더에 기술 됨.Id / pw 을 basic으로 인코딩해서 보냄BasicAuthenticationEntryPoint클라이언트 요청
A service(a.com) - 브라우저 - B service(b.com)출처가 다른 도메인 사이에 통신은 자원 공유는 보안적으로 허용이 안돼도메인이 다르면 기본적으로 보안이 막혀있음.A.com이 B.com의 리소스를 안전하게 사용할 수 있을까?여기서 CORS 정책이
2개 모듈 cors -1 (웹만있는) cors-2 (security server)cors-1 에서 이런식으로 보내면.url 베이스로 cors 정책을 시행하는걸로 설정 함.이상태로 요청을 보내게 될 경우. setAllowCredentials true 경우addAllowe
개방형 인가 부여.A가 B에게 유저정보 요청B 는 A를 몰라서 A가 너가 유저정보를 받기위해서 user에 허락이 필요해A가 user에게 B한테서 너의 정보를 가져오려하는데 B한테 가서 허락좀 맡아줘B는 user에 승인하에 A에게 유저정보를 줌A는 유저정보가지고 비즈니스
OAuth2 오픈 소스 - Keycloak 설치 & 설정토큰을 발급하고 토큰을 검증 하는 기능 https://www.keycloak.org/downloads 여기서 Server탭 에서 다운이런식으로 사용접속 화면id 만들고 메인화면 relm 생성하자 clien
보호된 자원에 접근 권한 부여하는 놈위에 설명을 그림으로Resource Owner(사용자) 승인(구글로그인 동의하는 것 예시)하고 인가서버에게 권한 요청인가서버는 권한 부여 승인하고 토큰 발급이제 클라이언트하고 자원 서버만 남음키클록 시작1단계: 인가서버로 클라이언트가
액세스 토큰리프레쉬 토큰ID 토큰인증 코드토큰은 난수 유의미한 정보 X 식별자 역할인가서버는 디비 같은 저장소에 토큰을 저장함 표에나와있는 정보들.인가서버랑 네트워크 랑 계속 디비 조회를 해야되서 리소스를 많이 잡아먹음.토큰 발행시 서명을 거친다.서명은? 토큰에 대해
크롬이 인가서버로 부터 권한 부여!? 인가서버로부터 유저에게 승인 / 동의 과정을 해줘야 인가서버는 클라이언트에게 권한 부여를함 이때 발급된게 엑세스토큰 발급. 권한 부혀 유형이 여러가지임 Authorization code Grant Type 인가
가장 많이 쓰고 보안적으로 많이 안전한 방식
id_token은 뒤에가서, Uri 날리면 바로 토큰을 줌
클라이언트가 id/pw를 인가서버에 전달인가서버는 등록된 사용자의 계정을 검증해서 맞으면 바로 토큰 발급타사 어플리케이션 권한 사용 자제, 고도 신뢰할 자사 어플리케이션만 사용유저 정보가 노출되기 때문에 타사 어플리케이션은 좀 위험함. 전체적인 파라미터 내용이 정확하
액세스 토큰은 만료시간을 짧게 (보안상) 액세스 토큰이 만료시간이 짧은 단점을 보완하기위해 리프레쉬 토큰!리프레쉬 토큰도 재발급 되네.영원히? 흐음.여기서는 리프레쉬 토큰을 재사용하거나 재발급을 함.재발급이 더좋지 않나?재사용하는 정책도 있지만 보안상 문제가있어서 (탈
Code Verifier 해쉬된 값으로 전달하면 -> Code Chanllenge(해쉬값)라 함.코드 생성을 위한 3가지 단계가 있음 인가 서버는 해당 코드에 대한 코드 챌린지값과 코드챌린지 함수가 저장되어있음Code_verifier 원래 최초 문자열 -> 서버로보내
인증 프로토콜?왜 만듬 ?OAuth 2.0 인가 프레임 웍 인증 X클라이언트는 프론트로 이해하면 될듯?마치 인증 처리를 위한 기술인거 같은데 X 인가권한을 획득해서 권한을 이용해서 자원을 이용하기 위한 것.근대 인증만을 위한 프로토콜을 만든게 OpenId Connec
왼쪽에는 하나의 프로젝트 안에 구성되어있었음별도의 프로젝트로 진행되고 있는 인가서버인가서버를 원래 개발 중단 하려 했는데 spring-security에서 다시 개발해서 진행하기로함 별도로 프로젝트로 진행..Oauth2.0 클라이언트 모듈에 대해.OAuth login /
클라이언트와 인가서버 두 사이에 상호작용을통해 권한 부여 흐름 진행yml에 설정된 값들을 ClientRegistartion에 필드에 저장되고이정보를 참조해서 권한 부여 요청을 위한 매개변수를 이용해 인가서버 통신설정 해주기.OAuth2ClientProperties 속성
OpenId Connect 1.0 Provider(인가서버)인가서버로부터 클라이언트의 정보들을 가져와 매핑한다는 뜻.클라이언트 등록정보 메서드 사용하면 편리하게 설정 가능ProviderDetails 서비스 제공자(인가서버) 엔드포인트 담을 수 있는 클래스UserInf
단순히 객체를 저장하고 관리하는 역할빈으로 등록할 수 도 있음.Java config 방식인대 yml로 해도 된다.@Bean 으로 하고 싶을때 자바 config방식으로 구현 하면된다.값들을 가져와서 ..콘솔값 출력
자동설정 초기화 과정OAuth2ImportSelector 제일먼저 로드 됨분기에 의해 참에 해당되는 설정 클래스 로드됨.OAuth2ClientConfiguration 설정클래스 로드됨.1~3 과정은 4번 설정클래스 로드 하기위한 과정스프링 mvc 사용할 수 있는 인터페
Oauth2Login설정을 하면 OAuth2LoginConfigurer가 실행됨필터 생성 인증 처리하는 필터 -> OAuth2LoginAuthenticationFilter/login/oauth2/code 여기까지 고정 /\* 여기들어가는값은 레지스트레이션 ID인증코드
몇개의 설정만으로 로그인이 구현가능함이런 방법과커스터마이저를 사용하면 해당 api에 대한 커스텀한 설정할수 있찌만 디폴트는 설정 없음오류가나서 설정다시변경커스텀하게 설정안하면 어떻게될까디폴트 화면으로..업로드중..
권한부여 방식코드 요청방식은 인가서버와의 1단계 임.이 필터가 권한 코드 부여 흐름 시작.authorizationGrantType - > 코드를 발급받기 위한 엔드 포인트.OAuth2AuthorizationRequestRepository클라이언트가 코드 요청 -> 코드
인터페이스다 .인가서버에서 엔드포인트 요청 DefaultOAuth2UserService표준 OAuth2.0 provider -> 우리가 아는 인가서버 실제 사용자의 정보를 요청해서 반환받는 의미를 가지고 있다. 반드시 엑세스 토큰을 지참 토큰을 가지고 인가서버로가서사용
reqeust 을 받아서 OAuth2User타입으로 반환하는 인터페이스표준방식으로 서비스에서 사용인증 처리함.ID Token으로 인증처리리퀘스트 객체를 컨버터 속성레스트 템플릿 객체오픈ID 영역에 있는 스코프 -> 사용자 정보를 담고 있다.내부적으로 DefaultOAu
인증을 처리 인가서버 통신을 해서RequestEntity 변경 Rest로 통신을 위해헤더명 인가 실제 엑세스 토큰을 Bearer 타입으로 토큰을 포함해 보낸다응답으로 바디에 sub , email등 사용자의 속성을 가지고 온다.그리고 변환해서 DefaultOAuth2Us
실제로 로그인 하면세션 생성로그 아웃 하면여러가지 로그아웃 핸들러도 있다.각 핸들러는 세션을 삭제거나 인증된것들 삭제하거나등 로그아웃에 필요한 것들을 처리한다.엔드포인트를 가져온다 엔트포인트를 만들어서 가져오는?최종적으로 타겟 Url 만들어짐 두개 설정정보 같아야 됨
OAuth2AuthenticationToken 안에서 유저 정보를 가져오면 된다.구현체인 DefaultOAuth2User / DefaultOidcUser하나로 다 참조가 가능함 하지만 명확하게 하기위해 나눈다.default 로 사용자 정보 가져옴좀 더 빠르게 참조 가능
oauth2Login 설정하게 되면\-> oauth: OAuth2LoginConfigurer 을 의미하고 모든 로그인 설정을 하게 된다.인가 설정 엔드포인트 / 토큰 엔드포인트 , 유저인포 엔드포인트 , 리다이렉션 엔드포인트 설정 클래스마다커스텀하게 값을 변경해서 제
1단계 일때 사용하는 클래스?커스텀하게 할수 있는 법을 알아보자다른파라미터 추가? 표준 클라이언트Id 리다이렉트 Url등.. 이거 외에 커스텀하게?커스텀하게 설정하지 않으면 DefaultOAuth2AuthorizationRequestResolver 실행OAuth2Au
설정 클래스가 하는 역할은 없다Init , configure 호출역할 그리고 두개 메소드 실행시 만들어지는 클래스 들위에 3개는 인가서버로 임시 코드 요청 할 때 사용되는 3개 클래스파란색 클래스는 2단계에서oauth2Login - > oauth기술을 활용해서인가서버로
OAuth2AuthorizedClinetManage 는 인터펫왼쪽은 웹에 관해 권한 요청 가지고있는 속성들클라이언트 인가를 받기위한 제공자 provider여러가지 방식을 지원한다.원하는 방식 선택후 객체만듬실제 권한부여 처리를 진행함
컨트롤러 설정 이 설정만으로 인가코드 설정은 바로 완료됨.
패스워드 방식은 username/pw 필수적으로 전달해줘야됨,이 정보를 토큰요청시 전달해야되는대, OAuth2AuthorizedClientManager는 이 정보가지고 밑에 요청해야되는데.?그러기 위해서 펑션 인터페이스를 통해.. 전달함 Manager는 클라이언트 인가
성공적으로 가져오면 사용자 정보를 가져오게 된다. 인증객체를
pass 많이 쓰일거같지않고 중요하지않다 생각해 패스한다.
첫번째 super()필터가 요청에대해 동작하기 위한 url 정보를 정의한다ex) 웹요청시 필터가 요청을 받아서 처리할것인지 defaultFilterProcessesUrl 정보와 Url 매칭이참이면 처리한다기존 로그인 컨트롤러에 있던 로직을 옮긴다.최종적 코드인가를 받고
타입 인자로 선언해 준다자체적으로 클라이언트가 인가받게되고 최종결과물인 결과물이 변수에 바인딩 됨그림처럼 진행되도록 코드를 작성하고 원래는 클라이언트를 반환하도록함그런데 어노테이션은 선언하면 그림 과정이 생략되서 작동하게 됨.초록색 값까진 아규먼트 리졸버가 해줌.최종
Client도 필터 기반으로 구현되있음인가서버는 스코프를 권한으로 위임해서 리소스 서버에 보낸다.Resourece 의존성이 jose도 포함
인가서버에서 인코딩 서명을 통해서 토큰을 발행함.서명이된 토큰을 디코딩해서 검증의 과정을 거치는데 서명하면서 비밀키로 , 디코딩은 퍼블릭키퍼블릭 키 위치한 정보를 저장한다 , 이 정보를 통해서 토큰을 검증하는데 사용함인가서버에서 제공하는 여러 엔드포인트 정보를 알 수
사용자가 서버에 접근하는데 인증이 필요하다 해당 자원에 접근하려면서버 입장에선 인증받지 않는 입장에서 다시 인증받을 수 있도록 유도한다던가로그인 페이지로 유도함 -> 인증의 진입점으로 연결 시켜줌 -> 인증앤트리 포인트가 이역할을 함설정을 지우고 실행시키면 이런 화면을
스프링부트가 초기화되면 리소스서버에서 자동적으로 실행되야될 자동설정클래스디폴트로 생성되는 필터체인 (설정클래스를만들지 않을 떄)그림에서 봣던 설정클래스들특별하게 빈을 생성하기보다 클래스들을 임포트를 함.필터체인 설정 별도에 설정클래스를 만들지 않으면 여기서 만듬.이게
이 빈을 만들어야 빈안에 스프링 시큐리티에서 인증 인가처리할 수있는 필터들이 생성되고체인형식으로 만들어져서 요청을 처리함 .각각의 설정 클래스들이 초기화 됨.jwt 인증객체로 컨버터 하는 객체인증하지 되지 못한 처리를 엔트리 포인트의 역할filter -> client
jwt 를 헤더에 실어서 보내는 값.jwt 객체로 반환을 하는 디코더디코딩하는 과정을 토큰을 검증하는 과정서명에 의해서만드나 jws 암호화해서 만드나 jwe 서명에 의해 검증이 됨으로 책임 이 있다.decode 함수로 jwt 반환with 로 시작하는 함수는 ? jwt
JwtDecoders -> JwtDecoder 객체 생성할수 있는 유틸 객체issuerUri 를 통해 인가서버와 통신을 한다통신으로 메타데이터들을 가져오고 (알고리즘 목록, 인가서버 엔드포인트목록 , 그랜트타입지원목록 등.)jwt-set-Uri 정보도 가져옴 가져온정보
JCE 는 JCA 확장버전으로 좀더 강화된 보안 추가9개의 Provider 목록중 어떤걸 사용하더라도 보안서비스 구축 가능1번째 애플리케이션 SHA-256알고리즘 주면 provider는 각 프로바이더 목록 스캔 조건에 일치하는 알고리즘있으면 해당 Provider 제공2
MAC ? HMAC 토큰 암호화 알고리즘에 사용해시 알고리즘 + Key 비대칭키는 표준형식이 X509: 퍼블릭키 PCS8: 프라이빗 키keyFactory 퍼블릭키나 프라이빗 키를 생성할때 X509 표준형식에 대해서 만들어 질수 있고다른 형식들로 각각의 형식 퍼블릭키
JOSE 사양에 포함된 기술들JWT 토큰 -> 토큰을 만드는 방식은 JWS / JWE JWT는 하나의 추상화된 개념이다.일반적으로 토큰을 만들땐 비밀 키로 해석 할땐 개인키공개 키 세트는 JWK 보통 JWK-SET화살표 방향은 참조한다 -> 사용한다로 생각하고 읽으면
JWK안에 비대칭키 대칭키 에 관련된 속성을 저장할 ㅅ 있다.sig(서명용도로 만들어진 키) enc(암호화를 목적으로 만들어진 키)해당 ID에 해당하는 JWK를 선택하기위한 KeyIdRSA 공개키 / 대칭키JWK 타입의 객체를 생성함대칭키 생성 , 비대칭키 생성 , R
여기서 인가서버는 키클록, 엑세스토큰은 JWTEC 는 타원 곡선 알고리즘각각의 알고리즘에 의해서 설정하게 되면알고리즘에 따른 디코더가 생성되고 주어진 알고리즘 한해 검증이 이루어 짐.출처가 다른 2개의 출처 간에 기본적으로 보안때문에 막혀있어서클라이언트애 응답할 때
왼쪽은 토큰이 발행되는 순서 , 오른쪽은 토큰을 검증JwtAuthenticationFilter 이전 시간에 이미 작성필터가 하는역할은 인증객체 만들고 사용자가 승인을 위해 아이디 패스워드를 전달하면 인증 토큰에 전달하고다시 인증 매니저에 전달하면 아이디 패스워드에 대한
알고리즘을 설정하고.시크릿키값으로 검증하겠다. 시퀀스 키 기반으로 대칭키 검증을 jwt디코더로 인해서 하게 된다.새로운 설정을 추가해주고이전 단계에서 만들었던 코드로토큰을 발급 받고다시 보내면JWT 디코더로 검증을 시작한다님버스 디코더가 잡힌다지난시간에는 직접 유저 네
기존 MAC 에서 RSA 방식으로 전환여기까지 signer 클래스RSA 키 만들어 주기인증부분에선 검증 하는 쪽 부분만 대칭키에서 -> 비대칭 키로 바꿔주면 된다..검증 부분도 수정해 준다그런대 중복된 부분을 리펙토링빈을 등록해주고이후 동작 은 이전 시간 과정과 같음
앞서 디코더 이 인증과같이 님버스 디코더를 만든다.알고리즘은 설정헤준 rs512 서버에서는 디코더를 통해서 검증을 수행하는데 비대칭키에 대한 검증이 작동되도록 내부적으로 실행됨알고리즘을 맞추기 위해 rsa키 알고리즘 변경설정 파일 생성그러면 통과
퍼블릭키 파일을 이용해 검증 로드 코드를 통해서 파일을 읽어 온다. readPublickey 파일로 부터 데이터를 가져온다음 최종적으로 바이트배열로 변환해서 인자로 넘겨줌. 코드
이전 시간에 테스트 함다양한 토큰의 대한 검증 방식을 학습하고 있따필터직접 생성해서 검증 , 디코더로 검증 실제 원격으로 인가서버로부터 공개키를 가져와서 검증하는 방식간단한 설정만으로도 검증을 시큐리티가 알아서 해줌키클록을 써서 하자이 설정에 의해서 모든 초기화과정이
인증 타입안에 pricipal 속성이있는대 그속성에 들어가는 타입이 jwt리소스 서버에서 토큰 검증이후 인증처리 할 때 생성하는 인증객체의 구현체가 Jwt인증토큰업로드중..둘다 동일하게 다뽑아 낼 수 있다.
클라이언트가 토큰을 가지고 검증을 하기위해 수행하는데BearerTokenAuthoenticationFilter 수행에 가장 먼저 실행되는 토큰리소스서버에서 토큰을 검증하는 딱 하나의 필터ProviderManage 실제 인증 처리를 수행할 인증 프로바이더를 선택함레스트
권한에 따른 제한을 나누는 것을 알아보자리소스 서버관점 스코프 개념토큰안에 스코프 범위 가 포함 안돼있으면 Invalid 스코프가 포함되면 접근 허용실제 토큰을 가지고 파싱 하게 되면 스코프 정보가 나오는데스코프 정보가지고 인증 객체를 만드는대 인증객체의 권한을 구성함
스코프 속성을 가진 토큰이 리소스 서버에 왓을때 스코프에 해당하는 값을 권한정보로 매핑함스코프 항목을 스프링시큐리티가 자동적으로 매핑해줌.만약 인가서버에서 scope2 속성을 만들 경우 우리가 따로 매핑해줘야된다 . 권한정보로 사용해야 될 경우기본은 scope명칭 인대
pass
2개의 모듈 추가권한 요청이 성공하면 디폴트 url로 클라이언트에서 인가서버랑 통신에서 토큰을 받기 위해 키클록 같은 유형은 인가서버 정보를 명시해줘야됨.화면 쪽 타임리프 어노테이션을 통해 토큰을 바로 가져올 수 있다.클라이언트가 인가서버에게 임시코드를 받기 위함로그
CORS 설정을 해주자 클라이언트 서버와 통신을 위해컨트롤러 구성인가서버로 부터 퍼블릭키를 가져옴첫번째는 레스트 템플릿이용두번째는 화면에서 바로데이터 가져오기 성공 ( 첫번재 버튼 )두번째 버튼 성공임시코드 발급받고발급 받은 임시코드 인가서버 토큰 요청 최종 인증 받음
독립형 : 자체적으로 검증이 가능하다 (셀프 인증) 불투명 : 오펙크 토큰 제공 (원격)Oauth2 인증 엔드포인트 코드 발급OAuth2 토큰 : 토큰발급OAuth2 토큰 검사 엔드포인트 : 오펙크 토큰 검사OAuth2 토큰 해지 엔드포인트 : 토큰을 해지할 수 있다.
스프링시큐리티가 제공하는 클래스인증 인가 기능이 동작할수 있또록 여러 구성요소를 정의하구 설정함, 일반적으로 인증 인가 동작하려면? 시큐리티 필터체인 한개가 반드시 필요함필터체인으로 인증인가에따른 여러가지 필터를 추가함 리퀘스트 매처같은것도 설정함시큐리티 필터체인이 최
인가서버가 실행되면 가장먼저 실행되는 설정
공급자 = 인가서버 클라이언트 요청바다 프로바이더 컨텍스 생성파이널리에서 삭제한다.엔드포인트 커스텀 가능이슈어를 가져와서 널이아니면 전달 아니면 만들어서 전달빈을 미리 정의 반드시 해줘인가서버의 정보는 ip 가 어떻게 될지 모르니 issuer 정보를 줘야된다.안주게 되
권한 부여 상태유지 -> 어느 속성 값을 저장하고 있다.OAuth2AuthorizedClinet - 자체 의미는 클라이언트가 인가를 받았다. (클라이언트의 인가받은 상태 유지) OAuth2Authorization - 인가서버가 클라이언트에게 권한을 부여 했다.(권한
대략적인 개요 어떤 통신을 하는지 구조인가서버가 제공하는 엔드 포인트 임시 코드 발급 (OAuth2AuthorizationEndpointFilter)코드 반환 OAuth2LoginAuthenticationFilter 임시코드 받는 클래스토큰을 발급하기 위해 자격증명을