월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 시큐리티 OAuth2
2024-2-20일 기준 인텔리제이에서 모듈 설정하는 방법입니다.
혼자 삽질을 많이 해서 다른 분들은 혈압이 오르지 않기를 바라는 마음으로 정리한 글을 공유합니다.https://literate-t.tistory.com/433
- 미해결스프링 시큐리티 OAuth2
password() deprecated
OAUth2AUthorizedClientProviderBuilder.builder() 에서 password() api 가 deprecated 가 됐는데 어떻게 사용해야할까요?
- 미해결스프링 시큐리티 OAuth2
403 에러
전에도 남겼었는데 이번에 실습을 하면서 AuthorizationCode Grant 를 누르면 인증을 받기 위한 로그인을 하고 나면 403 에러가 발생합니다. 그래서 Clientcontroller 에서 만든 로직에다가 breakpoint 를 찍으면서 확인해보면 결과 정보들은 강사님과 똑같이 들어있었습니다. 근데 return "/client" 부분만 가면 403 에러가 나와서 화면이 나오질 않는데 어느 부분을 먼저 봐야할까요..? 계속 수정해봐도 계속 403 에러가 발생해서 다시 질문드립니다!
- 미해결스프링 시큐리티 OAuth2
redirect_uri에 관한 질문입니다!
안녕하세요.사실 강의 초반부터 궁금했던 건데 이제서야 질문을 하게 됐네요.포스트맨으로 테스트하실 때 redirectUri를 http://127.0.0.1:8081 로 하셨는데요.브라우저에서 code 요청을 하면 response가 http://127.0.0.1:8081로 오는데요. 해당 브라우저가 8081 포트에서 동작하고 있지 않은데 어떻게 8081로 설정해도 브라우저로 응답이 오는지 궁금합니다. 이렇게만 보면 그냥 user-agent로 응답이 오는 것 같고, redirectUri는 nonce나 state 값 같은 역할만 하는 건가? 라는 생각이 들 때가 있습니다.
- 미해결스프링 시큐리티 OAuth2
액세스 거부
/home 에서 AuthorizationCode Grant 를 누르면 액세스 거부(403 에러)가 발생합니다..OAuth2ClientConfig 에서 auth.requestMatchers("/home").permitAll().anyRequest().authenticated()) 도 설정했는데.. 왜 인증 받는 화면으로 가지 못 하고 액세스 거부가 생기는건가요..??
- 미해결스프링 시큐리티 OAuth2
JwtAuthorizationFilter에 대한 질문입니다!
안녕하세요.테스트를 하다 보니까 (결과적으론 저의 실수인데요) 토큰을 검증하는 로직이 두 번 실행되는 겁니다. Mac 방식과 Rsa 방식 둘 다요. OAuth2ResourceServer에서 분명 addFilterBefore()에서는 하나의 필터만 넣어주었는데 말이죠.궁금해서 찾아보니 OAuth2ResourceServer에서 Mac방식과 RSA 방식 모두를 Bean으로 만들어서 그런 거였습니다. addFilter에 넣은 커스텀 필터만 동작하는 줄 알았지만, OncePerRequestFilter를 상속하면 빈으로 만드는 것만으로도 필터 목록에 추가되더라고요. 확인해 보니 가장 마지막에 추가되는 것 같습니다. 여기서 질문입니다!addFilterBefore() 등의 함수로 커스텀 필터의 위치를 지정하하면서, 설정에서 MAC과 RSA의 bean을 둘 다 살리면서 동작하는 방법은 없는 걸까요~? GenericFilterBean을 상속하게 해서 구현해도 addFilter 없이도 동작을 하니까 아래처럼 두 Bean 모두 살아있으면 검증을 두 번 하게 되네요. @Bean public JwtAuthorizationMacFilter jwtAuthorizationMacFilter(OctetSequenceKey octetSequenceKey) throws JOSEException { return new JwtAuthorizationMacFilter(new MACVerifier(octetSequenceKey.toSecretKey())); } @Bean public JwtAuthorizationRsaFilter jwtAuthorizationRsaFilter(RSAKey rsakey) throws JOSEException { return new JwtAuthorizationRsaFilter(new RSASSAVerifier(rsakey.toRSAPublicKey())); }
- 미해결스프링 시큐리티 OAuth2
ExceptionTranslationFilter에서 this.authenticationEntryPoint.commence(request, response, reason)에 중단점이 걸리지 않습니다ㅠ
안녕하세요.거의 동일한 환경에서 실습 진행 중입니다.스프링부트 2.7.2 버전입니다.리소스 서버 인증 방식으로 해서 루트 경로 접근 시 401 error가 뜨려면 기본 엔트리포인트 객체인 BearerTokenAuthenticationEntryPoint의 commence 함수가 호출되어야 할 텐데요..그 로직을 안 탑니다. 그런데 401 error은 정상적으로 떠요.ExceptionTranslationFilter의 sendStartAuthentication 함수 안에도 중단점을 걸어보고 BearerTokenAuthenticationEntryPoint의 commence 함수에도 중단점을 모두 걸어봤는데도 안 되네요. 미스테리입니다. yml 파일만 작성했으므로 코드 상의 실수도 없을 텐데 말이죠ㅠ+다른 엔트리 포인트에도 전부 중단점을 걸어보았는데 어디에도 걸리지 않네요브랜치 링크입니다!
- 미해결스프링 시큐리티 OAuth2
ClientRegistrationRepository 커스터마이즈
ClientRegistrationRepository 를 구성하는 방법으로 client_id, secret 을 properties 나 빈으로 만들어 준비하는 방식으로 많이 예제가 있는데 Resource Owner 와 Client 가 동일해 client_credentials 방식으로 인가를 진행하고 싶을 경우 어떻게 customizing 할 수 있을까요? 고객사마다 가입해 client_id, secret 을 발급받는 상황에서는 미리 properties 나 bean 으로 하드 코딩 해둘 수 없을 것 같습니다.
- 미해결스프링 시큐리티 OAuth2
Client Credentials 권한 부여 방식에서 사용자 정보 획득 방법 문의
안녕하세요. Client Credentials 권한 부여 방식에 대해 문의 드립니다.이 방식은 아래 정보만으로 AnonymousAuthenticationToken을 받아 오는 것으로 이해됩니다. client-id: oauth2-client-appclient-secret: Ao11cZOkxoXrKe8Nfu9pcNnuLBpKJzcG그렇다면 인증서버를 통해 사용자 정보를 가져 오는 부분이 필요하다면 어떤 식으로 구현해야 하나요?
- 미해결스프링 시큐리티 OAuth2
ProviderSetting Rename
ProviderSettings 가 2022.8.23 자로 AuthorizationServerSettings 로 이름 바꼈습니다.최신버전으로 강의 Follow 하시는 분들 참조 바랍니다.https://github.com/spring-projects/spring-authorization-server/issues/864
- 미해결스프링 시큐리티 OAuth2
addFilterBefore 관련한 질문입니다!
안녕하세요.필터 삽입 위치 관련해 작년에 남겨주신 답변에서, 인증 필터 전후로 넣는 게 적절하다 판단되어 UsernamePasswordAuthenticationFilter 앞에 넣으셨다고 설명해주셨는데요.그럼 편의에 따라 인증 필터인 AnonymousAuthenticationFilter 뒤에 넣어서 CustomOAuth2AuthenticationFilter에서 authentication 객체의 null 처리를 하지 않는 방법은 괜찮을까요? 실제로 해보니까 NullException이 발생하지 않더라구요.추가적으로 다음 처리를 해줄 때, key("anonymous"), principal("anonymousUser")은 정해진 값을 넣어주신 걸까요? ROLE_ANONYMOUS는 정해진 권한인 것 같은데..if (null == authentication) { authentication = new AnonymousAuthenticationToken("anonymous", "anonymousUser", AuthorityUtils.createAuthorityList("ROLE_ANONYMOUS")); } 감사합니다.
- 해결됨스프링 시큐리티 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) 가 접근이 되는 것이죠?