월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 시큐리티 OAuth2
clientRegistration이 null로 뜹니다.
디버그 모드 상태에서 보면, clientRegistrationRepository에 객체가 존재하고, 관련 설정값들이 확인이 되고있는데, 이것이 변수에 저장되지 못하고null이 되고 있습니다.따라서, clientId 같은 속성들도 확인이 불가능 합니다.컨트롤러에서는 해당 의존성을 사용하지 않으면 일단 기능은 작동되니 사용하고있지 않으나,컨트롤러에서 clientRegistration를 사용할수 없는 상황입니다.
- 미해결스프링 시큐리티 OAuth2
OAuth2Login()과 OAuth2Client()
OAuth2Login()으로 로그인을 구현하는 것과 OAuth2Client()로 로그인을 구현하는 것은 정확히 어떤 차이가 있어서 이렇게 구분되어 있는건가요.?
- 미해결스프링 시큐리티 OAuth2
postman으로 보내는 요청 URI는 어디에 있나요?
아무리 찾아도 안보이네요
- 미해결스프링 시큐리티 OAuth2
부록
부록 파트는 아직 미완상태인가요?
- 미해결스프링 시큐리티 OAuth2
restfual api 개발할때
안녕하세요 선생님. 지금가지 선생님의 강의를 바탕으로 oauth 를 사용하는 프로젝트를 구축하는데 있어 궁금점이 생겨 질문드립니다.소셜로그인 인증 챕터 부분에서는 전형적인 session 인증 방식인데 restful api 서버 개발시에는 어떻게 설정해야할까요? 대안으로 찾아본바 successHandler 를 커스텀하게 설정하여 jwt 로 암호화해서 서버 api로 리다이렉트 시 쿼리파라미터에 jwt를 넣어 프론트에게 jwt 를 전달하는데 이 방식이 맞나요?또한 강의에서 restfual api 에 대해 다루신다면 어느 챕터에서 확인할 수 있을까요?
- 미해결스프링 시큐리티 OAuth2
keycloak
PS C:\dev\keycloak-20.0.0\bin> .\kc.bat start-dev Error: Could not find or load main class io.quarkus.bootstrap.runner.QuarkusEntryPointCaused by: java.lang.ClassNotFoundException: io.quarkus.bootstrap.runner.QuarkusEntryPoint해당 에러가 뜨는데 혹시 어떠한 이유 때문일까요?
- 미해결스프링 시큐리티 OAuth2
질문있습니다
질문이 있어 글 남깁니다.해당 강의에서 authorizationEndpoint와 redirectionEndpoint를 커스텀하게 설정하는 방법을 배웠는데, 실무에서 이러한 api들을 커스텀하게 설정해서 요청 uri를 변경하는 경우가 실제로 생기나요?생긴다면 어떤 상황에서 사용되는지 알 수 있을까요?
- 해결됨스프링 시큐리티 OAuth2
Spring Authorization Server - 기본 구성으로 시작하기 31:45
안녕하세요.임시코드 요청은 정상적으로 동작했습니다.토큰요청시 uri 에 뜨는 code 를 복붙 하니 json 형태로 응답이 오는것이 아닌,html 양식으로 응답이 왔습니다. 임시코드 요청토큰 요청// // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) // package io.security.oauth2.springsecurityoauth2authorization; import org.springframework.context.annotation.Bean; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.security.web.SecurityFilterChain; @EnableWebSecurity public class DefaultSecurityConfig { public DefaultSecurityConfig() { } @Bean public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception { httpSecurity.authorizeRequests((authorizeRequest) -> { ((ExpressionUrlAuthorizationConfigurer.AuthorizedUrl)authorizeRequest.anyRequest()).authenticated(); }); httpSecurity.formLogin(); return (SecurityFilterChain)httpSecurity.build(); } @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withUsername("user").password("{noop}1234").authorities(new String[]{"ROLE_USER"}).build(); return new InMemoryUserDetailsManager(new UserDetails[]{user}); } } // // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) // package io.security.oauth2.springsecurityoauth2authorization; import com.nimbusds.jose.jwk.JWKSet; import com.nimbusds.jose.jwk.RSAKey; import com.nimbusds.jose.jwk.source.JWKSource; import com.nimbusds.jose.proc.SecurityContext; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.util.UUID; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.OAuth2AuthorizationServerConfiguration; import org.springframework.security.config.annotation.web.configurers.oauth2.server.resource.OAuth2ResourceServerConfigurer; import org.springframework.security.oauth2.core.AuthorizationGrantType; import org.springframework.security.oauth2.core.ClientAuthenticationMethod; import org.springframework.security.oauth2.jwt.JwtDecoder; import org.springframework.security.oauth2.server.authorization.client.InMemoryRegisteredClientRepository; import org.springframework.security.oauth2.server.authorization.client.RegisteredClient; import org.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository; import org.springframework.security.oauth2.server.authorization.config.ClientSettings; import org.springframework.security.oauth2.server.authorization.config.ProviderSettings; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint; @Configuration public class AuthorizationServerConfig { public AuthorizationServerConfig() { } @Bean public SecurityFilterChain authSecurityFilterChain(HttpSecurity http) throws Exception { OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http); http.exceptionHandling((exception) -> { exception.authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login")); }); http.oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt); return (SecurityFilterChain)http.build(); } @Bean public ProviderSettings providerSettings() { return ProviderSettings.builder().issuer("http://localhost:9000").build(); } @Bean public RegisteredClientRepository registeredClientRepository() { RegisteredClient registeredClient = RegisteredClient.withId(UUID.randomUUID().toString()).clientId("oauth2-client-app").clientSecret("{noop}secret").clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC).clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_POST).authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE).authorizationGrantType(AuthorizationGrantType.REFRESH_TOKEN).authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS).redirectUri("http://127.0.0.1:8081").scope("openid").scope("read").scope("write").clientSettings(ClientSettings.builder().requireAuthorizationConsent(true).build()).build(); return new InMemoryRegisteredClientRepository(new RegisteredClient[]{registeredClient}); } @Bean public JwtDecoder jwtDecoder(JWKSource<SecurityContext> jwkSource) { return OAuth2AuthorizationServerConfiguration.jwtDecoder(jwkSource); } @Bean public JWKSource<SecurityContext> jwkSource() throws NoSuchAlgorithmException { RSAKey rsaKey = this.generateRsa(); JWKSet jwkSet = new JWKSet(rsaKey); return (jwkSelector, context) -> { return jwkSelector.select(jwkSet); }; } private RSAKey generateRsa() throws NoSuchAlgorithmException { KeyPair keyPair = this.generateRsaKey(); RSAPrivateKey rsaPrivateKey = (RSAPrivateKey)keyPair.getPrivate(); RSAPublicKey rsaPublicKey = (RSAPublicKey)keyPair.getPublic(); return (new RSAKey.Builder(rsaPublicKey)).privateKey(rsaPrivateKey).keyID(UUID.randomUUID().toString()).build(); } private KeyPair generateRsaKey() throws NoSuchAlgorithmException { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(2048); KeyPair keyPair = keyPairGenerator.generateKeyPair(); return keyPair; } }
- 미해결스프링 시큐리티 OAuth2
OAuth 2.0 Client + OAuth 2.0 Resource Server 연동 - 연동 구현(2) - 15:40
안녕하십니까.. validateJwt 하는 부분에서 에러가 납니다..에러 해결하지 못해 질문드립니다.깃 클론 링크git@github.com:InSuChoe/spring-security-oauth2.git
- 미해결스프링 시큐리티 OAuth2
RSA 검증 기능 구현 - PublicKey.txt 에 의한 검증 46:20
/api/user get 요청시 JwtAuthorizationRsaPublicKeyFilter#doFilterInternal코드를 블록에서 에러가 발생합니다.Jwt jwt = jwtDecoder.decode(getToken(request)); String username = jwt.getClaimAsString("username");디버깅으로 따라가봤습니다.JwtAuthenticationFilter#getToken 리턴값으로(토큰값에서 Bearer를 없애고 리턴한 값)Jwt jwt = jwtDecoder.decode(getToken(request));위 코드를 실행했었어야 했는데 자꾸 프로그램이 종료가 됩니다?원인을 알 수 가없습니다.깃 클론 링크입니다. git@github.com:InSuChoe/spring-security-oauth2.git
- 미해결스프링 시큐리티 OAuth2
'Social Login 연동 구현' 관련 질문
'Social Login 연동 구현' 과정에서 oauth2 로그인 작업이 완료되면 로그인 과정에서 얻은 해당 유저에 대한 SecurityContext가 세션 스토리지에 저장되는 건가요?그래서 로그인 이후 다음 요청부터는 세션 스토리지에서 해당 유저의 SecurityContext를 가져오는식으로 Authentication 객체에 접근하는 건가요?
- 미해결스프링 시큐리티 OAuth2
RSA 검증 기능 구현 - JwtDecoder 에 의한 검증 7:40
http://localhost:8081/api/user get 요청 코드도 달라진게 없는 것 같은데응답결과 401 로 나옵니다. 깃 클론 링크 첨부합니다. git@github.com:InSuChoe/spring-security-oauth2.git
- 해결됨스프링 시큐리티 OAuth2
깃헙 주소가 있습니까?
깃헙 소스 코드 주소를 알 수 있을까요?
- 해결됨스프링 시큐리티 OAuth2
섹션8 - DefaultOAuth2AuthorizedClientManager -필터 기반으로 구현하기 , 21:35초
위와 같이 수정해봤는데요.위와 같이 수정하고 시작을 하면 기존의 코드와 같이 작동은 하는데요.강의에서 적으셨던 코드와 같은 의미의 코드는 아니죠?
- 미해결스프링 시큐리티 OAuth2
client
스프링 시큐리티 1편도 굉장히 좋은 강의였고 이번 강의도 들으면서 혼자 Oauth2.0 공부하며 이해되지 않은 부분들이 강의 덕분에 이해가 되고 있습니다. 제가 지금 OAuth 2.0 Client - oauth2Client() 파트를 듣고 있는 중이고 현재 팀 프로젝트를 위해sns 로그인을 구현해야 하는데 강의에서 OAuth 2.0 Resource Server 전까지만 들어도 괜찮을까요?마감이 얼마 남지 않아서 물어보게 되었습니다. 항상 좋은 강의 찍어주셔서 감사합니다.
- 미해결스프링 시큐리티 OAuth2
user 로그아웃 되지 않는 현상
로그아웃 한 화면로그아웃 후 세션이 사라지지 않음강의 돌려보면서 확인중인데요.제가 입력을 잘못 해준 부분은 없는것 같은데 ..로그아웃이 안되는중입니다..
- 해결됨스프링 시큐리티 OAuth2
OAuth2 로그인 구현 - Oauth 2.0 User 모델 소개(2) / 19:40초
-저의 경우는 우선 요청시 강의와 에러명이 다릅니다.어드민 계정 삭제하고 새로 어드민 계정 생성한 후다시 요청했는데도 그대로입니다.. 'user 에 권한이 부적절하다. 니깐.. user 에 password권한이 없어서 그런가? ' 라고 생각해서 아래와 같이user 를 추가해줘봤습니다. send 버튼을 누르니..아래와 같이 실행됩니다..뭐를 잘못건드린건 없는것 같은데...안되는중입니다..ㅜ
- 미해결스프링 시큐리티 OAuth2
키클록 종료하기 위해서는 어떻게 해야하죠?
인텔리제이 내에서 터미널로 kc.sh 을 실행하는데요.터미널에서 undo 명령어 치고다시 kc.sh 실행해줄때 에러가납니다.현재 8080 포트를 사용중이라고요.안전하게 종료해주는 방법이 있나요?shutdown.sh 같은 프로그램은 없는것 같습니다.
- 해결됨스프링 시큐리티 OAuth2
application.yml/ OAuth2ClientProperties 편 30:50초
index 경로로 넘어가질 못하고 있습니다.yml 설정은 강의와 똑같이 설정했습니다.
- 미해결스프링 시큐리티 OAuth2
10:40 질문
Resource Owner Password Credentials Grant Type 편질문합니다.데이터 입력하고 'send' 버튼 클릭2.access_token 복사 3.userinfo 에 Authentication 값에 붙여넣고 'send' 버튼 클릭새로 요청을 해도 응답 결과는 그대로입니다.