묻고 답해요
129만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실습으로 배우는 OAuth 2.0 개념 원리, 그리고 해킹과 보안
기능 에러 문제
강의에 나온 비트나미 설정은 모두 완료한 상태입니다. 이상하게 위 사진과 같이 oauth.friends와 friends 페이지는 상단의 네브바가 정상적으로 출력이 되지만wgw 페이지의 경우 상단바가 깨지는 현상이 발생합니다.코드를 분석해보니 둘다 동일하게 menu.php라는 파일을 불러오는 역할을 하고설정을 3개로 나눠서 하는거면 몰라도 php.ini파일에서 공통적으로 설정된 값을 통해서불러와지는건데 무엇이 문제일까요?근데 이 문제는 네브바에 버튼을 통해 변경되는 페이지를 직접 url에서 입력만 해주면 되기 때문에큰 문제는 되지 않습니다. wgw 로그인 페이지에서 Friends로 로그인 하기 버튼을 누르게 되면강의에서는 정해진 url로 리디렉션이 진행됩니다.하지만 저는 Friends로 로그인 하기를 누를 시에 wgw 인덱스 페이지로 리디렉션이 되어서마찬가지로 코드를 확인해보니 이렇게 되어있더군요.friends_auth_url 에 대한 변수를 가지고 리디렉션이 되는 구조여서해당 변수의 값을 직접 url에 입력해봐도 인덱스 페이지로 리디렉션이 될 뿐인데.. 이렇게 구현이 되어있더라고여 authorize.php 파일에 뭔가 문제가 있는건지, 저같은 문제가 없었는지 의아하네요..
-
미해결스프링 시큐리티 OAuth2
ID_TOKEN 은 많은 사이들들에서 지원을 안한다고 보면될까요?
ID_TOKEN 은 많은 사이트들에서 지원을 안한다고 보면될까요?대부분의 사이트들은 Authorization Code Grant Type 방식만 지원하는 것 같습니다.
-
해결됨스프링 시큐리티 OAuth2
rest api 에서 OAuth 적용하기 질문입니다.
안녕하세요 선생님제가 개발해야하는데 강의가 있어서 급하게 결제하고 급하게 강의를 보고 있습니다.딱맞는 강의를 오픈해주셔서 정말감사합니다. 제가 kotlin 으로 rest api 를 개발중인데요( front 는 모바일이 별도로 있습니다. 제가 구글및 카카오 연동을해서 front 에 jwt token 을 만들어서 전달 해야하는데요) Q1. rest api 에서 google 이나 kakao 연동을 하려고 하는데요implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server'를 받아야할지 implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'둘중 어느것을 받아서 개발 해야하는지 궁금합니다. api 는 spring-starter-oauth2-resource-server 를 써야된다는 글을 봤는데그러면 yml 에 아래와 같은 설정을 어떻게 하는지?? 가 궁금하더라구요spring: security: oauth2: client: registration: google: client-id: client-secret: scope: openid,profile,email naver:두서없이 질문드려 죄송합니다. ㅜㅜ 너무 기초적인 질문을 드려서 죄송합니다.
-
미해결스프링 시큐리티 OAuth2
implicit grant 에서 refresh token 사용가능 여부 문의
back channel 이 없으면 refresh token 사용이 불가하다고 말씀해주셨는데,access token 처럼 refresh token 도 받아서 사용하면 안되는 걸까요? (표준에 어긋나서 사용을 안하는건가요) 사용기간이 긴 refresh token 은 보안적으로 위험해서 사용을 안하는 것인가요?
-
미해결스프링 시큐리티 OAuth2
token repository 커스텀 관련 질문 드립니다~
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.혹시 accesstoken, refreshtoken을 직접 만든 Db에 저장을 하고 관리하고 싶은데 이렇게 사용을 하는 방법이 있을까요?oauth2Login() 사용로그인시 직접 만든 Db에서 accesstoken 가져와 처리만약 만료된다면 위 Db에 저장되어 있는 refresh토큰을 이용
-
미해결스프링 시큐리티 OAuth2
어세스토큰 발급과 관련해서 질문합니다
안녕하세여, 관련하여 수업을 듣고있던중 저희쪽 소스에서는 인증토큰을 발행해Tokenstore 에 저장해서 사용하고있습니다 . 다만 토큰 만료시간이 되지않으면 로그아웃 처리를 하여도(프런트에서 로컬스토리지 제거만 해주고있음) 다시 그 토큰을 재사용 할수있게됩니다 . 이를 위해토큰 재사용을 막기위해 고민하고있는데요. 혹시 어떤식으로 구현하면 좋을지 조언 부탁드립니다. (토큰스토어에 저장된 토큰을 어떻게 꺼내오고 블랙리스트 목록으로 저장을 해야될지 .. 너무 막막합니다)
-
해결됨스프링 시큐리티 OAuth2
apply 대체
최신버전에서 apply가 deprecated되어서 자료를 좀 찾아봤습니다만, 확신이 없어서 질문드립니다.@EnableWebSecurity @Configuration public class SecurityConfig { @Bean SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(authorize -> authorize .anyRequest().authenticated() ) .formLogin(withDefaults()) .with(new CustomSecurityConfigurer().setFlag(true), withDefaults()); return http.build(); } }대체로 with을 사용한다고 하는데, Customizer.withDefaults를 두번째 인자로 주었습니다.이렇게 사용하는 것이 맞나요?Customizer의 역할도 조금만 알려주시면 감사하겠습니다. 기존 프로젝트에 대입하려니 최신 관련 자료가 너무나 없네요... ㅠㅠ
-
미해결스프링 시큐리티 OAuth2
혹시 추후에 해당 강의도 최신 Spring Security 6.x 버전으로 다시 강의가 나올 수 있을까요?
궁금합니다!!
-
미해결스프링 시큐리티 OAuth2
Acess token 발급에대해 궁금하여 질문 남깁니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 스프링 시큐리티강의를보고 로그인 기능을 구현하면서 보니 보통 소스들을 보면 acesss token 을 따로 create 하는소스들을볼수있는데, 구현하면서 어세스 토큰을 생성하는 메서드를 따로 만들지 않으면 내부적으로 만들어지는 부분이있는건가요?
-
해결됨스프링 시큐리티 OAuth2
OAuth2AuthorizationServerConfigurer 질문 있습니다.
ProviderSettings를 통해 기존의 토큰 요청 uri을 변경하는 법은 숙지했으나 token endpoint uri를 여러개 설정하는 방법이 있는지 궁금합니다.ex ) /oauth2/token /get-token ....
-
미해결스프링 시큐리티 OAuth2
keycloak인증 인가 정보에 부가정보를 추가할 수 있나요?
안녕하세요. 인증 인가 방법에 대해서 강의를 통해 많은 도움이 되고 있습니다.인증 인가 후 또는 인증 인가시에 부가 정보를 토큰 정보에 포함시킬 수 있는지 궁금합니다.예를 들면 해당 사용자의 서비스별 구독 정보등을 토큰에 포함시켜 이 정보를 인가 정보로 활용하고 싶은데요. 이런 정보는 access_token과 별개로 인증 후에 따로 토큰을 생성하여 관리해야 하나요.아니면 혹시 keycloak에서 생성하는 access_token에 포함시키는 방법이 있는지 궁금합니다.조언 부탁드립니다. 감사합니다.
-
미해결스프링 시큐리티 OAuth2
id_token과 access_token의 개념에 대하여
안녕하세요. scope에 openid를 포함하면 id_token을 발급 받을 수 있는데요. 이 id_token과 access_token의 정확한 사용 용도가 헷갈립니다.제가 이해하는 바가 맞는지 확인 부탁드립니다. 인증 : 사용자가 유효한 사용자인지 판단하는 것인가 : 사용자가 해당 기능을 사용할 권한이 있는지 판단하는 것 사용자 인증 관점에서 인증이 통과(scope에 openid가 있는 경우)하면 access_token과 id_token을 받습니다. 인증만이 필요한 경우라면 id_token에 있는 사용자 정보로 확인하면 되나요?만약 제가 개발한 서비스가 있고 사용자별 권한의 차등이 없는 경우 세션 없이 인증을 유지하기 위해서는 로그인 후 발급받은 이 id_token을 들고 다니면서 id_token값으로 토큰의 값 유무와 만료시간 등 으로 유효 사용자를 확인하면 되나요?토큰의 값으로만 확인해도 되는지 아니면 jwt에서 제공되는 어떤 validation 함수같은걸로 우선 위변조를 확인한후 위변조가 없다는것이 확인된 후에 값을 비교해서 사용하면 되는지 궁금합니다. 그리고 만약 위의 인증을 access_token 으로 한다면 access_token은 원래 태생이 인가(권한)이기 때문에 userinfo 엔드포인트를 호출하여 사용자 정보를 가져온 후에 이 사용자 정보로 사용자가 누구인지 인증을 확인하는것이죠? 저는 access_token없이 id_token만으로도 userinfo 엔드포인트를 호출 할 수 있는지 확인하기 위해postman에서 id_token을 bearer 토큰으로 호출했는데 401로 id_token 만 가지고는 userinfo 정보를 확인이 안되더라고요. 이게 맞는건가요? 아시는 고수님들의 답변 기다리겠습니다.
-
미해결스프링 시큐리티 OAuth2
oidc userinfo 확인 시 오류가 납니다.
안녕하세요. 강의 잘 보고 많은 부분 배워가고 있습니다. 강의 진행중 섹션 7의 OAuth2 로그인 구현 - Oauth 2.0 User 모델 소개(2)에서뒷부분 oidc로 사용자 정보 조회하는 부분인데요. @GetMapping("/oidc") public OAuth2User oidc(String accessToken, String idToken) { ClientRegistration clientRegistration = clientRegistrationRepository.findByRegistrationId("keycloak"); OAuth2AccessToken oAuth2AccessToken = new OAuth2AccessToken(OAuth2AccessToken.TokenType.BEARER, accessToken, Instant.now(), Instant.MAX); Map<String, Object> idTokenClaims = new HashMap<>(); idTokenClaims.put(IdTokenClaimNames.ISS, "http://localhost:9091/realms/oauth2"); idTokenClaims.put(IdTokenClaimNames.SUB, "OIDC0"); idTokenClaims.put("preferred_username", "userpww"); OidcIdToken oidcIdToken = new OidcIdToken(idToken, Instant.now(), Instant.MAX, idTokenClaims); OidcUserRequest oAuth2UserRequest = new OidcUserRequest(clientRegistration, oAuth2AccessToken, oidcIdToken); OidcUserService oidcUserService = new OidcUserService(); OAuth2User oAuth2User = oidcUserService.loadUser(oAuth2UserRequest); return oAuth2User; }oidcUserService.loadUser(oAuth2UserRequest); 이 부분이 실행될 때loadUser 메서드 내부의 if (!userInfo.getSubject().equals(userRequest.getIdToken().getSubject())) { OAuth2Error oauth2Error = new OAuth2Error(INVALID_USER_INFO_RESPONSE_ERROR_CODE); throw new OAuth2AuthenticationException(oauth2Error, oauth2Error.toString()); }이 부분을 타면서 예외가 발생합니다. 어떤 부분을 확인해 봐야 할까요?userInfo의 sub와 userRequest의 sub가 달라서 그런걸까요?읽어주셔서 감사합니다.
-
미해결실습으로 배우는 OAuth 2.0 개념 원리, 그리고 해킹과 보안
www.wgw.co.kr에 접속이 안됩니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의를 들으며 실습하고 있는데, www.friends.co.kr, oauth.friends.co.kr은 모두 접속이 되는데 www.wgw.co.kr은 접속이 되지 않습니다. 강의 내용 대로 따라했고 변경한 파일 모두 확인했는데 오타는 없는 것 같습니다. 혹시 다른 문제가 있을까요?
-
미해결스프링 시큐리티 OAuth2
키클락 권한 구성에 대해 조언 및 가이드 문의 입니다.
안녕하세요. 인증관련 개발 진행중입니다.저희는 사용자의 유형을 보면1차 분류로 시스템을 관리하는 관리자와 서비스를 이용하는 사용자로 구분되며사용자는 다시 같은 그룹의 사용자를 관리(생성,수정,삭제등)할 수 있는 관리사용자와 일반사용자 이렇게 나뉩니다.이런 환경일때 realm과 role, group을 어떻게 나누는게 효율적일지 궁금하여 문의 드립니다.1차 시스템 관리자와 서비스 이용 사용자는 서로 완전히 다른 유형이라 realm으로 나누는 게 좋을지 group 또는 Client나 role 등으로 나뉘어야 할지 고민입니다. 같은 서비스라서 같은 realm안에 두는게 맞을거 같기도 하고요.그리고 서비스 이용자 중 그룹과 Role를 둘다 나뉘어야 할거 같아서 이렇게 권한 분류가 가능한지 궁금합니다서비스 이용자중 그룹을 나누어 A, B, C 그룹이 있고 A그룹에 관리사용자 role, 일반사용자 roleB그룹에 관리사용자 role, 일반사용자 roleC그룹에 관리사용자 role, 일반사용자 role각 그룹별로 권한을 나누어 각그룹의 관리사용자는 각그룹만 관리가능하고 다른 그룹에는 관리권한이 없게 구성하고자 하는데 이런게 키클락 옵션만으로 가능할지 궁금합니다. 아 그리고 키클락의 REST API를 통해 UI를 이용하지 않고 사용자 관리 옵션 설정등을 하려고 하는데요. 최고 관리자인 Admin으로 API 토큰을 받아 처리하는 방법까지는 확인을 하였습니다.그런데 혹시 이 부분을 그룹 관리자에게 권한을 부여할 수 있을까요?예를 들면 A그룹에 관리사용자로 인증 토큰을 받아서 이 토큰으로 REST API를 이용해서 사용자 관리를 할 수 있는지가 궁금합니다. 질문이 정리가 안되서 의도를 이해하실지 모르겠네요. 암튼 읽어 주셔서 감사합니다.
-
미해결스프링 시큐리티 OAuth2
granttype password
안녕하세요.password grant type 으로 인증서버를 구현하고 싶은데oauth2 authorization server 최신 버전인 1.1.5 에서는 deprecated 되어있어서 영상과 같이 0.3.1 버전으로 했는데 unsupported grant type 이라고 나옵니다.쓸 수 있는 방법이 있을까요? 다른 질문에서 답변으로 TokenEndpointConfigurer 에 있는 api 를 다루면 password 타입을 다룰 수 있다고 하신거같은데 맞을까요?!아니면 authorize_code 방식에서 로그인 페이지를 리다이렉트를 하지 않고 바로 처리할 수 있는 방법이 있을까요? 혹시 사내 서비스 여러개가 있을 때 로그인 기능만 빼서 로그인해주는 로그인 서버를 구축하려고 하는데 더 좋은 방법이있을까요? oauth2 방식 말구요!
-
미해결스프링 시큐리티 OAuth2
안녕하세요 강사님 질문 있습니다!
안녕하세요! 수업 강의 내용은 아니지만 연관이 있는 질문입니다! OAuth Client와 Resource server가 하나의 서버에 있어도 되나요?제가 토이 프로젝트를 구성하고 있습니다. 소셜 로그인 기능을 넣으려고 이것저것 설계하다 보니까 백엔드 서버에 OAuth2 Client와 Resource server 설정이 같이 있어야 하겠더라고요. Resource server 설정이 필요한 이유는, jwt 검증 때문입니다. 예를 들어 구글에서 발급받은 액세스 토큰을 프론트엔드로 반환해줄 거고, 프론트엔드(Nextjs)는 헤더에 access token과 함께 요청을 보내겠죠. 이때 백엔드 서버는 jwt 검증을 해야할 것입니다.수업에 이런 부분을 구두로 말씀하신 건 잘 모르겠는데, 저희 실습에서는 OAuth2 Client에서 Resource server로 요청해보는 건 있었지만 그 둘이 하나의 application.yml에 있는 실습을 하지 않았던 것 같아서요.chat gpt 유료 결제해서 쓰고 있어서 이 부분 가능하다고 답변을 듣긴 했는데 강사님이 맞다고 해주셔야 안심할 수 있을 것 같습니다. 만약..아니라고 하면 사실 많이 혼란스러울 것 같지만 간단한 가이드라도 부탁드려도 될까요..흐름이라도..문득 드는 생각은하나의 application.yml에 OAuth2 Client와 Resource 서버 설정을 다 넣는다OAuth2Client와 Resource 서버를 모듈을 분리한다. 이 경우에는 프론트에서 요청이 들어왔을 때 OAuth2 Client모듈이 Resource server 모듈에 자원을 요청한다(리소스 서버에서 검증까지) 둘 다 가능하다고 하면 지금 시간이 그리 여유있지 않아 1번으로 가고 싶긴 한데 이게 일반적인 방법인지 궁금합니다. p.s. 새로운 security 6 강의는 언제 올라오나요? 목이 빠졌습니다..ㅋㅋㅋ
-
미해결스프링 시큐리티 OAuth2
Token Decoder
저는 업무 환경 상 버전이 다르게 진행하고 있고,org.springframework.boot version "3.2.1"security version "6.2.1"개념과 과정을 강의를 통해 도움 받고 있습니다.궁금한 것은 Authorization Server 에서 강사님이 설정하신 바와 같이 JwtSource 설정을 넣으니, Resource Server 에서 다른 알고리즘으로 파싱이 안된다는 에러가 나더라구요.@Bean public JWKSource<SecurityContext> jwkSource() throws NoSuchAlgorithmException { RSAKey rsaKey = generateRsa(); JWKSet jwkSet = new JWKSet(rsaKey); return (jwkSelector, context) -> jwkSele ctor.select(jwkSet); }[DefaultJWTProcessor]new BadJOSEException("Signed JWT rejected: Another algorithm expected, or no matching key(s) found"); Authorization server 에서 Token발행 과정을 디버깅하면DelegatingOAuth2TokenGenerator > JwtGenerator에서 alg : RS256, encoder 는 NimbusJwtEncoder 로 토큰이 저장됩니다. Resource 서버에서 NimbusJwtDecoder 를 통해 진행되기는 하나 header key 가 RSA 로 들어오던데요. Authorization server 의 jwkSource 설정을 모두 주석처리하니, 더 이상 키 불일치 에러는 발생하지 않더라구요. 버전 상의 문제일지 양쪽 서버에 뭔가 다른 설정이 필요했을지 궁금해서 문의 남깁니다.
-
미해결스프링 시큐리티 OAuth2
2024-2-20일 기준 인텔리제이에서 모듈 설정하는 방법입니다.
혼자 삽질을 많이 해서 다른 분들은 혈압이 오르지 않기를 바라는 마음으로 정리한 글을 공유합니다.https://literate-t.tistory.com/433
-
미해결스프링 시큐리티 OAuth2
password() deprecated
OAUth2AUthorizedClientProviderBuilder.builder() 에서 password() api 가 deprecated 가 됐는데 어떻게 사용해야할까요?