본문 바로가기

기타/보안9

[security] OAuth 2.0의 인가 스펙과 OIDC(OpenID Connect)의 인증 스펙에 대해서 알아봅시다 개요안녕하세요. 오늘은 OIDC(OpenID Connect)에 대해서 자세히 알아보는 시간을 가져보도록 하겠습니다. 다들 OAuth2에 대해서는 아실것 같습니다. 잘 모르시는 분들은 [OAuth2] OAuth2 개론 - 개요와 Authorization Code Flow를 통해서 먼저 보고 오시는것을 추천드립니다. OAuth2는 HTTP 기반에서의 권한 부여(Authorizaiton)를 위한 업계 표준 프로토콜입니다. OIDC는 OAuth2의 확장중 하나로써 인증(Authentication)에 대한 프로토콜입니다.오늘은 인증과 인가의 차이부터 OIDC까지 알아보도록 하겠습니다.요약인증과 인가의 차이인증(Authentication): 사용자의 신원을 확인하는 과정입니다. 로그인과 같은 방식으로 사용자가 누구.. 2024. 6. 19.
[Security] OAuth 2 Extension, Proof Key of Code Exchange(PKCE)에 대해서 알아보자 개요안녕하세요. 이전 포스팅 [OAuth2] OAuth2 개론 - 개요와 Authorization Code Flow을 통해서 OAuth2 개론을 알아보았습니다. OAuth2는 http 기반에서의 인증의 표준으로써 안전하게 토큰을 발급하고 이를 통해서 인증(Authentication)된 유저만 접근할 수 있도록 할 수 있습니다.하지만 기본 OAuth2는 네이티브 앱 또는 SPA 웹을 사용할 경우 authorization code interception attack을 당할 수 있습니다. 이 공격을 당하면 본인이 아닌 다른 유저가 token을 발급받을 수 있게됩니다. 따라서 이를 방지하기 위해서 OAuth 2.1의 업데이트의 하나로 Proof Key of Code Exchange(PKCE)가 있습니다.오늘은 .. 2024. 6. 9.
[OAuth2] spring-authorization-server를 이용하여 인증 서버(auth server) 만들기 안녕하세요. 이전시간까지 우리는 jwt란 무엇인지, OAuth2 스펙과 기본적인 flow에 대해서 각각 알아보았습니다.[JWT] JWT(Json Web Token)에 대해서 자세히 알아봅시다 - 이론편[OAuth2] OAuth2 개론 - 개요와 Authorization Code Flow이번 포스팅과 다음 포스팅에서는 OAuth2의 인증 서버와 리소스 서버를 실제로 구현해보도록 하겠습니다.이번 실습은 이전시간에 배운 authorize_code grant type을 토대로 진행합니다.오늘 실습에 대한 코드는 github Repository에서 확인하실 수 있습니다.spring-authorization-server의 등장기존에는 Spring Security에서 인증 서버를 구성할 수 있도록 지원하고 있었습니다.. 2023. 3. 18.
[OAuth2] OAuth2 개론 - 개요와 Authorization Code Flow 안녕하세요. 이전 포스팅에서는 jwt의 이론과 Java, Spring Boot에서의 실습을 진행해보았습니다.이번 시간에는 OAuth2의 기본적인 이론에 대해서 알아보도록 하겠습니다.그리고 이번 포스팅의 이론을 기반으로하여 다음시간에는 실습을 진행해보도록 하겠습니다.OAuth2란 ?OAuth(Open Authorization) 2.0는 HTTP 기반의 인증을 위한 업계 표준 프로토콜입니다. OAuth는 리소스를 소유하고 있는 소유자(Resource Owner)를 대신하여 리소스(Resource)에 대한 접근을 제어할 수 있습니다. 이 프로토콜은 접근하고자 하는 리소스를 소유하고 있는 리소스 소유자(Resource Owner)와 리소스 서버(Resource Server), 이를 사용하고자 하는 클라이언트(C.. 2023. 3. 11.
[JWT+JAVA] JWT(Json Web Token)에 대해서 자세히 알아봅시다 - 실습편 안녕하세요. 이전 포스팅에서 JWT의 이론적인 측면에 대해서 자세히 다뤄보았습니다.오늘은 JWT를 java에서 생성해보고 검증하는 코드를 실제로 작성해보도록 하겠습니다.오늘 실습한 내용은 github에 올려두어 직접 테스트를 진행해보실 수 있습니다.실습 코드 github Link환경아래가 오늘 jwt 실습에 사용할 라이브러리입니다. jjwt를 사용합니다.jjwt를 사용하는 이유는 라이브러리를 선택할 때 아래의 기준으로 선택되었습니다.표준 스펙을 대부분 지원하는가 ?project가 가장 star의 수가 많은가 ?문서가 잘 되어있는가 ?implementation("io.jsonwebtoken:jjwt-api:0.11.5")runtimeOnly("io.jsonwebtoken:jjwt-impl:0.11.5")i.. 2023. 2. 27.
[JWT] JWT(Json Web Token)에 대해서 자세히 알아봅시다 - 이론편 안녕하세요. 오늘은 JWT와 그 기본적인 스펙에 대해 자세히 알아보는 시간을 가져보도록 하겠습니다.저의 옛날 포스팅에 보면 JWT에 대해서 간단히 설멍했던 글이 있습니다.[REST API] REST API의 Security With JWT하지만 너무 단순한 개념적인 부분만 설명드렸기 때문에 이번 기회로 제대로 정리해보고자 합니다.JWT 란 무엇인가 ?JWT는 Json Web Token의 약자로써 서로다른 기기에 데이터를 전달할 때 사용하는 방법중 하나입니다.구성은 기본적으로 Base64포맷이며 Header와 Body(claim 이라고 부르기도 합니다) 그리고 Signature 부분으로 나뉘어집니다. 실제로 JWT는 아래처럼 생겼습니다. .을 기준으로 slice하면 첫번째 부분부터 Header, Body,.. 2023. 2. 19.
[기타] 서비스의 일반적인 보안 취약성 - 2편 안녕하세요. 오늘 포스팅은 이전 포스팅에서 다루지 않았던 서비스의 일반적인 보안 취약성 4가지에 대해서 알아보는 시간을 가져보겠습니다. 리마인드 해보면 이전 시간에 다루지 않은 기본 취약성 4가지는 아래와 같습니다.주입 (Injection)기밀 데이터 노출메서드 접근 제어 부족알려진 취약성이 있는 종속성 이용주입 (Injection)Injection 공격은 여러 범위에서 사용할 수 있는 공격입니다. 이는 서비스의 시스템에 특정 데이터를 집어넣어 서비스에서 기본적으로 제공하지 않는 정보를 취득할 수 있는 공격입니다. 여러 유형이 있으며 앞어 확인했었던 XSS 역시 주입 공격의 일종이라고 할 수 있습니다. 대표적으로는 SQL Injection, OS Command Injection 등이 있습니다.주입 공격을.. 2022. 11. 12.
[기타] 서비스의 일반적인 보안 취약성 - 1편 안녕하세요. 1달 정도만에 새로운 포스팅으로 찾아 뵙습니다. 오늘은 웹 어플리케이션의 일반적인 보안 취약성에 대해서 알아보는 시간을 가져보고자 합니다. 이렇게 보안 취약성을 알아 본 후 Spring Security의 사용으로 이를 방어하는 방법까지 알아보도록 하겠습니다.개요웹 어플리케이션을 개발함에 있어서 목표로 하는 비즈니스를 문제를 해결하는 기능을 개발하는 것은 중요합니다. 하지만 이러한 기능적인 부분 뿐만 아니라 비기능적인 개발또한 중요합니다. 비기능적인 부분이라는 것은 실제 기능에는 영향이 없지만 부수적으로 고려해야할 사항을 말합니다. 대표적으로 성능, 확장성, 가용성, 그리고 보안이 있는데요.이 중 오늘 이야기하고자하는 보안에 대해서 이야기해보자면 이를 중요하게 생각하지 않으면 어플리케이션의 수.. 2022. 11. 8.
자바(java) 보안(SECURE) 코딩 1. SQL, 자원(Resource) 삽입(Injection) 대학교 때 코딩을 할 때와는 다르게 지금은 코딩을 하면서 이게 보안에 적합한가? 라는 생각을 많이 하게 되었다. 그래서 한국인터넷진흥원에서 발행한 보안 코딩가이드를 보면서 회사에서 진행했던 프로젝트와 비교해보았다. 생각보다 안지켜지던 점이 많았다. 앞으로 내가 코딩할때는 위 원칙들은 반드시 지켜야 겠다라고 생각하며  내용을 정리해 본다. 1. SQL 삽입- DB와 연동된 웹 어플리케이션에서 공격자가 입력 폼 및 URL 입력란에 SQL문 자체를 입력하여 DB로 부터 저옵를 열람하거나 조작할 수 있는 보안약점이다. public void weakCode(String name){ String tableName = "weakCodeTable"; String query = "SELECT * " + "FRO.. 2019. 6. 19.