묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 시큐리티 OAuth2
authorization server 1.0.2 Oidc Configurer없음
현업 환경 상 1.0.2 버전에서 개발하고 있는데 OAuth2AuthorizationServerConfigurer 에 OIDC 관련 configurer 가 빠진 것으로 보입니다. 공식문서를 봐도 customizing 하는 부분은 있는데 default 설정은 어떻게 가져다 쓸 수 있는지 안내되어있는 곳을 못찾았는데요. get /userinfo 요청을 보내도 OidcUserInfoEndpointFilter 에 디버깅이 걸리지 않고 FilterChainProxy 에서도 Filter 리스트에서 빠져 있습니다. 어디를 찾아봐야할까요? private Map<Class<? extends AbstractOAuth2Configurer>, AbstractOAuth2Configurer> createConfigurers() { Map<Class<? extends AbstractOAuth2Configurer>, AbstractOAuth2Configurer> configurers = new LinkedHashMap<>(); configurers.put(OAuth2ClientAuthenticationConfigurer.class, new OAuth2ClientAuthenticationConfigurer(this::postProcess)); configurers.put(OAuth2AuthorizationServerMetadataEndpointConfigurer.class, new OAuth2AuthorizationServerMetadataEndpointConfigurer(this::postProcess)); configurers.put(OAuth2AuthorizationEndpointConfigurer.class, new OAuth2AuthorizationEndpointConfigurer(this::postProcess)); configurers.put(OAuth2TokenEndpointConfigurer.class, new OAuth2TokenEndpointConfigurer(this::postProcess)); configurers.put(OAuth2TokenIntrospectionEndpointConfigurer.class, new OAuth2TokenIntrospectionEndpointConfigurer(this::postProcess)); configurers.put(OAuth2TokenRevocationEndpointConfigurer.class, new OAuth2TokenRevocationEndpointConfigurer(this::postProcess)); return configurers; }
-
미해결스프링 시큐리티 OAuth2
Client Credentials 방식에서 로그아웃 처리
안녕하세요.Client Credentials 방식에서 사용자가 곧 클라이언트고 서버 간 통신에 사용되며 로그인 방식이 인가까지만 이뤄진다고 이해했습니다. 인증된 사용자가 아니기 때문에 /logout에 접근하지 못하는데요. 익명 유저로 처리되니까요.permitAll()에 /logout을 추가해서 로그아웃 과정을 살펴 보니까 session과 context도 정리가 다 되더라고요. 혹시session이나 context가 null 나오는 건가 싶었거든요. 그렇다면 Client Credentials 방식의 로그인의 경우 logout을 permitAll에 추가하여 로그아웃 로직이 실행될 수 있도록 해야 하는 것 같은데 맞을까요? 아님 굳이 안 거쳐도 되는 과정인가요?감사합니다.
-
미해결스프링 시큐리티 OAuth2
Resource Owner Password 권한 부여 방식 문의
안녕하세요. Resource Owner Password 권한 부여 방식에 대해 문의 드립니다.AppConfig에 사용자 이름과 패스워드를 map 저장하게 되는데요.사용자가 수많은 사용자의 이름과 패스워드를 was vm 메모리에 들고 있는 건가요?was가 이중화 또는 클라우드 일때 매번 다른 was를 붙으면 그때마다 권한을 다시 부여 받는 것인지요?감사합니다.
-
미해결스프링 시큐리티 OAuth2
oidcLogoutHandler 작성할 때의 질문입니다!
안녕하세요.oidcLogoutHandler()는 말 그대로 scope에 openid가 포함되어 open id 방식으로 인증했을 때의 로그아웃 처리인데요.oauth2.0으로 로그인했을 때의 로그아웃 처리는 어떻게 하는지 궁금합니다. Oauth2ClientInitiatedLogoutSuccessHandler 같은 클래스는 없더라고요!
-
미해결스프링 시큐리티 OAuth2
refresh Token 관련해서 궁금합니다.
15:56 시점에서 Access Token이 만료되는 시점에서는 Refresh Token을 가지고Access Token이 재발급이 되신다고 들었습니다. 질문 만료된 시점에서 AccessToKen이 어떤흐름으로 진행되는지 궁금합니다. 제 생각으로는 사용자는 Client에 요청을 하면 ResourceServer에서 Refresh Token을 검증을 하고 Authorization Server에 AccessToken을 재발급후 다시 사용자에게 새로운 AccessToken+이전의 RrefreshToken 주는 방식인가요? 질문ResourceServer의 소스를 모면 token을 검증이 이루어지느 시점이 어디에서 이루어지는지 궁금합니다.
-
미해결스프링 시큐리티 OAuth2
keycloak이 강의 버전과 맞지 않아서 생기는 오류 일부 정리
keycloak 버전이 제일 낮은 게 20 버전이라서 저는 가장 최근 버전인 23 버전으로 사용했습니다. 23 버전 기준으로, 제가 파악한, 강의와 다른 부분입니다.20 버전부터는 최초 로그인 할 때 동의 항목이 안 나올텐데요. 관리자 콘솔에서 Clients -> Cliend details에서 Login settings에서 Consent required를 켜면 됩니다.엑세스 토큰 발급 이후에 userinfo 엔드포인트로 user 데이터를 요청하면 body에 아무 것도 안 나올 겁니다. 응답 헤더 살펴보면 insufficient_scope이며 Missing openid scope이라고 나오는데요.이렇게만 써있으면 userinfo 요청할 때 param에 scope=openid 넣으면 될 것 같지만 안 됩니다. 토큰에 해당 정보가 없는 거라서, 토큰 발급 전에(code 얻어야할 때) scop에 openid를 추가하면 됩니다.http://localhost:8080/realms/oauth2/protocol/openid-connect/auth?response_type=code&client_id=oauth2-client-app&scope=profile email openid&redirect_uri=http://localhost:8081 공식문서에 나와 있습니다. In case an access token is missing openid scope.
-
미해결스프링 시큐리티 OAuth2
boot 3.0 이상 버전에서 apply()
apply() 에서 CustomSecurityConfigurer 를 넣어주는게 deprecated 가 됐는데 구글링을 해도 정보가 많지 않습니다. 어떻게 설정해야 하나요?
-
미해결스프링 시큐리티 OAuth2
25:00 PKCE 관련 질문 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.secret을 안보내도 된다는것 자체가 약간은 의아해서 질문드립니다. PKCE, 인가코드만 있어도, challenge, verifer 를 통해서, 인가서버로 요청하는 client 가 위조되었을 가능성이 낮기 때문에 secret을 안보내도 되도록 허용하는 것인가요? 인가 코드를 탈취당해도, PKCE를 통해서 client 가 challenge, verifier 를 통해서 알 수 있으니까..?
-
미해결스프링 시큐리티 OAuth2
7:50 초 authentication token 관련 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. Oauth2AuthenticationToken 이라는 것이 사실은 인가서버로의 인증을 의미하는 것이지 client 서버로의 인증이라고는 볼 수 없는 것 아닌가요? 그러니까 Oauth2 과정을 거쳤다는 것은, 해당 유저의 resource 를 auth 서버든 resource 서버든 접근이 가능하다는 것이지, 우리 서버에 인증이 되었다는 것은 아니라고 저는 이해했는데요. 왜, oauth2 프로세스가 끝나면 최초 요청지 (예를들어 localhost:8081/home -> 로그인 창으로 가서 oauth2 process 끝 -> localhost:8081/home 이라고 할때, 최초 요청지는 localhost:8081/home) 가 접근이 되는 것이죠?
-
미해결스프링 시큐리티 OAuth2
26:30 경에 userinfo 분기가 강사님과 다릅니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. OicdUserService의 아래 메서드에서 true를 반환해버리는데요. 우선 해당 함수의 if(authroization_code 이냐?) 분기를 타고, accessibleScopes가 empty 가 아닙니다. 아마 키클록에서 default 스코프가 있기 때문인거 같은데요. shouldRetrieveUserInfo 해당 영상에서는 키클록의 default 스코프가 빠진걸까요? 아니면 grant type 문제일까요? 참고로 grant type 은 별다른 옵션 없이도, registration repository에서 꺼내오는 순간 registration에는 authroization_code 입니다.
-
미해결스프링 시큐리티 OAuth2
21:22 redirect uri
redirect uri 에 관련해서, 저는 아래처럼 이해를 했어요. [ 이해한 내용]아래 두개 redirect uri는 동일해야함. authorization code 발급시, redirect uri 헤더access token 발급시 redirect uri 헤더1번은 redirect 받기 위함. 2번은 1번을 검증하기 위함 [ 궁금한 점 ] 키클록에 등록하는 redirect Uri는 또 뭔가요? 깃허브나 이런 다른 provider 들에 앱을 등록할 때도 redirect uri, 혹은 callback uri 가 있던데 무슨 용도일까요?
-
미해결스프링 시큐리티 OAuth2
7:30초 쯤 redirect uri 관련 질문 있습니다.
요즘 웹을 구성한다고 하면, react 진영의 Next.js 라는 서버사이드 렌더링 서버를 띄우는 경우가 많은걸로 아는데요. redirect uri 를 Nextjs 서버로 보내고, Nextjs 가 code를 스프링 서버로 다시 보내는 경우 어떻게 해야하나요? - code 요청에 들어가는 redirect uri 를, 프론트 서버로 지정함. - 나중에 access token 요청시 프론트 서버로 지정함. 이게 맞나요? 이 방향이 아니라, redirect uri를 스프링 서버로 받아버리면, 스프링 서버가 나중에 프론트 서버로 리다이렉트를 시킬수도 있을거 같은데요. 두 경우 모두, 스프링 서버쪽에서 프론트의 uri를 알아야하는 문제가 있는거 같은데, 다른 방식은 없나요? (스프링 서버쪽에 커스텀 헤더로, 프론트 서버가 알려주는 방식도 가능 할거같긴한데, 좋은 방법인지 모르겠네요)
-
미해결스프링 시큐리티 OAuth2
keycloak 최신버전(23.0.1) 에서는 implict 설정할때에 redirect url 설정하는 부분이 사라졌습니다
그러다보니 화면대로 implict로 인증받을 때에 401 응답만 계속 받게 되고 토큰 조차 확인이 안되네요 혹시 다른 방법이 있을까요?
-
미해결실습으로 배우는 OAuth 2.0 개념 원리, 그리고 해킹과 보안
https에서 http로 넘어가지 않을 때 사용한 방법입니다.
혹시나 저와 같은 문제를 겪으신분들이 계실까봐 버프스위터의 크롬으로 동작 시 http로 넘어가지 않는 경우 해결책입니다. 1. 크롬 설정설정 -> 개인 정보 보호 및 보안 -> 보안 -> 세이브 브라우징 항목을 [보호되지 않음(권장되지 않음)], 고급 항목의 [항상 보안 연결 사용] 해제 이전에 버프스위터를 사용하면서 버프스위터 SSL인증서를 자체적으로 사용했던 경우(버프스위터 프록시에서 import/export CA를 적용했던 분들만 포함입니다) 설정 -> 개인 정보 보호 및 보안 -> 보안 -> 인증서 관리 -> 신뢰할 수 있는 루트 인증기관 -> 발급 대상에서 PostSwigger 이라고 되어 있는 인증서 삭제 이것때문에 진도 못나가다가 결국 해결되어서 좋네요ㅎㅎ 혹시 다른분들도 겪으시는 문제일까봐 업로드합니다.
-
미해결스프링 시큐리티 OAuth2
access_token 받은후 유저정보요청시 에러
안녕하세요 선생님 강의 진행중 오류가 해결되지 않아 이렇게 문의를 남깁니다. 다름이 아니라 제가 access_token을 받고 http://localhost:8081/user?accessToken=access_token이렇게 요청을 보내면OAuth2User oAuth2User = defaultOAuth2UserService.loadUser(oAuth2UserRequest);의 loadUser부분의 ResponseEntity<Map<String, Object>> response = getResponse(userRequest, request);에서 사진과 같이 RestClientException이 발생하고 그 이유는 body null 이기 때문이라는데 여기서 어떻게 손을 써야 오류가 고쳐질지 모르겠습니다. 혹시 해결방법을 아시는지 궁금합니다.
-
미해결스프링 시큐리티 OAuth2
Resouce Server에서 JWT 토큰 검증 후 로직추가
Resource Server 에서 JWT 토큰 검증 후 access token 에서 claim 을 추출하여 인증된 사용자의 추가 정보를 DB에 조회 후 SecurityContextHolder 에 저장하는 로직을 추가 하려고 합니다. Resource Server 에서 커스터 마이징이 가능한게 AuthenticationManager와 JwtAuthenticationConverter 등등인데 JwtAuthenticationConverter 은 적합하지 않을거 같아 AuthenticationManager에 JwtAuthenticationProvider 커스터 구현체를 등록해서 진행해야 할거 같은데 더 좋은 방벙이 있을까요?
-
미해결스프링 시큐리티 OAuth2
spring boot 2.1.4 버전 호환
안녕하세요~프로젝트 구성에 spring boot 2.7.x 버전이라고 나와있는데spring boot 2.1.4 버전에서는 spring-security-oauth2-authorization-server 를 사용할 수 없나요??있다면 어떤 버전을 사용해야 하나요??(spring-security-version 버전은 4.0.3 입니다. )
-
해결됨스프링 시큐리티 OAuth2
openid scope가 헷갈려요 ㅠㅠ
안녕하세요 강사님. openid scope가 계속 헷갈려서서요...scope: openid 클라이언트에서 id token 검증하여 사용자 인증함scope: openid profile email address phone클라이언트에서 access token을 인가 서버에 전송하여 인가 서버에서 토큰을 검증하여 사용자 인증함scope: openeid 미포함클라이언트에서 access token을 리소스 서버에 전송하여 리소스 서버에서 토큰을 검증하여 사용자 인증함openid scope는 리소스 서버를 거치지 않고 사용자 인증을위해 사용한다고 생각되는데, 제가 제대로 이해한게 맞는지 궁금합니다!
-
미해결스프링 시큐리티 OAuth2
OAuth2.0 코드 부여 방식 인가서버를 REST API 서버 형태로 구현 질문
안녕하세요.. 선생님.. 드디어 완강했습니다.시간 엄청 걸리고 좀 힘들었네요. 다름이 아니라.모바일에서 요청하기 위한 자체 인가서버 OAuth2.0 authorization code 부여 방식 구현을 REST API 서버 형태로 구현할 수 있는지요?사용자 인증 시 웹 페이지 형태의 응답이 아닌 REST API 형태로 요청하고 응답을 받을 수 있도록 구현하려고 합니다. 원래는 인가서버에 사용자 로그인을 하고 동의해야 code 발급받고 클라이언트로 redirect 하여 클라이언트 서버가 대신 인가서버로 access token을 발급 받게 되는데.. 문제가 이 부분이네요.Spring Security 수업에서 ajax 방식으로 API 서버에 요청하면 보통 redirect 없이 응답만 받는 구조이다라고 선생님이 알려주셨는데요. 이와같이 redirect 없이 REST API로 구현할 수 있는 방법이 있는지요?인가서버 로그인은 form login 방식을 사용하지 않고 html 응답 없이 front end 단에서 fetch나 ajax API를 이용해서 POST 전송, json 형태로 username과 password 를 넣어서 요청하고 응답 처리를 할 수 있도록 커스텀하게 구현은 할 수는 있을 것 같긴 해요.. 동의화면은 그냥 false로 해서 안 나오게 하거나 아니면 login 완료 후 json 응답으로 동의가 필요하다는 응답을 주고 다시 POST 방식으로 동의하면 될 것 같긴하네요.클라이언트 서버는 그냥 리소스서버 처럼 사용해서, front end에서 클라이언트 서버로 access token을 전달하여 사용자 정보를 json 응답으로 가져오면 될 것 같아요. 하지만 문제는 redirect 처리를 어떻게 해야 하는지 잘 모르겠네요.인가서버에 임시코드 요청 시 json 응답으로 code를 주고 redirect 없시 다시 인가서버로 access token을 요청하는 방식으로 구현해야 하는지요?질문하면서도 authorization code 부여 방식에서 이렇게 구현을 하는게 맞는지? 의문이 드네요..이런 REST API OAuth2 인가서버라는게 표준 spec에 맞는지도 의문이고..모바일에서 REST API 방식으로 요청하고 인가서버에서 json 형태의 응답이 표준 spec 이랑 안 맞는 것 같기도 하고.. 무조건 html 웹 페이지 형태의 응답 기반으로 구현해야 하는지요? 여기에는 resource owner password 방식이 딱 맞는 것 같긴 한데 Deprecated 되어서 구현하면 안될 것 같고. 일반적으로 어떻게 구현하는지 알고 싶네요. 이런 케이스가 있는지요?어떻게 하면 좋을지 선생님 의견을 듣고 싶네요..감사합니다. ps 질문2. 클라이언 서버, 리소스서버로 딱딱 나누지 않고, 클라이언트 서버를 리소스서버 형태로 구현해서.. 사용자 인증 방식을 form login이 아닌 JwtDecoder 방식으로 인증 처리하여 클라이언트 서버가 서비스 정보를 주는 형태로 구현해도 되는지요?
-
미해결스프링 시큐리티 OAuth2
backchannel에 대해서
안녕하세요 섬세하고 친절한 강의 잘 듣고 있습니다.다름이 아니라 백채널과 프론트채널이 있는데백채널은 어떤 암호화기법이 추가로 있는 통신망을 뜻하는건지요?구체적인 차이점을 알고 싶습니다.감사합니다.