반응형

올해 초부터 시작했던 Google Cloud Study 가 어느덧 3번째 과정이 끝났다. 


2018/05/15 - [Development/Tech&Seminar] - Google Cloud Study Jams 후기


맨 처음에는 Qwiklabs 을 통해서 공부를 했었다. 그리고 두번 째 Advanced 과정에서는 Coursera 에 있는 GCP 과정을 수강을 했다. 

Qwiklabs 이나 Coursera 과정에 분명 실습 과정이 있긴 했지만 실습이 끝난 후에는 기억이 나지 않았다. ^^;;; 그래서 아쉬움이 많이 남긴 했었는데 이번에는 정말 사용해야 할 만한 이유가 생겼다.


바로 3번째 과정이 Cloud Hackathon 이라는 이름으로 프로그램을 직접  GCP 에 올려서 진행을 해야 했기 때문이다. 


우선 처음에 한숨이 나왔다.. 주제는 Bigdata 와 Kubernetes를 이용한 Microservice 구현 이었다. 먼저 선택은 Kubernetes를 이용한 Microservice 를 구현하는것으로 정했지만.. 뭐부터 해야할지 막막했다. 


기간은 총 6주. 충분한 시간이긴 했지만 정말.. 아무것도 할 수가 없었다. 갑자기 회사일은 바뻐지고. 덕분에 체력은 바닥나고. 명절에는 당연히 못하고.


그래도 결론적으로 거의 극적으로 구현까지는 했다. 그래서 지난 10월 6일 모든 팀들이 모여서 만든것을 소개하는 시간이 있었다. 


우리 팀에서 제출 한 것은 간단한 회원 가입을 Microservice 로 나누어서 GCP 의  Kubernetes에 올려서 동작을 확인해보는 것이었다. 만들긴 했지만 완성도가 많이 떨어졌다. 중간중간 exception처리나 message queue도 넣으려고 했는데 못 넣었다. 언제나 그렇지만 시간이 좀더 있었다면이라는 생각을 많이 했다. (그런데.. 시간이 많이 있었으면 좀더 나았을까 라는 질문도 던져봤다. -_-;;;)


다른 팀들 발표도 계속 진행이 되었고 독특한 아이디어로 구현한 모습들이 많았다. 약간 부끄러웠다. ㅠㅠ



기념품으로 후드 짚업과 여행용 짐정리 가방(?) 을 받았다. 



그리고 이런 인증서도 받았다. 좀더 잘 할 걸 이라는 후회가 되었지만 아무튼 좀 뿌듯했다.



그리고 이번 3차 과정 수료로 또 하나 모은 배지. 드디어 3개를 모았다. 



총 4개를 모으면 하나의 모양을 만들어내는 배지이다. 이제 마지막 1개가 남았다. 




그리고 공개된 마지막 4단계 최종 과정. 5번째는 개인별로 직접 지원(?) 이기 때문에 일단 4단계에서 최종 마무리가 된다. 그리고 주어진 미션은 이번달 10월 25일에 열리는 Google Summit 에서 개발자 라운지(?) 라는 곳에서 이번에 발표한 내용을 그곳에서 발표하는 것이다. ㅡ,,ㅡ;;;;; 망했다..


25일에 열리는 Google Summit 은 참석을 하려고 신청은 미리 하긴 했었는데 이런 형태로 참석을 해야 될줄은 몰랐다. 앞으로 남은 기간은 2 주 정도. 지금 만들어놓은 것을 어떻게 해서든지 다듬어야 하는데 과연 그게 가능할 지 모르겠다. 지금껏 했는데 마지막 하나를 포기하자니 정말 아쉽고, 발표를 하자니 눈앞이 깜깜하다. 


이번 Hackathon 과정이 끝나면 뭐가 기다릴지 굉장히 궁금했는데 이런게 있을 줄이야. 한숨 돌릴 수 있을 줄 알았는데 더 바쁘게 생겼다. ㅠㅠ


728x90
반응형
반응형

마이크로서비스를 구현(?) 하는 방법으로 TCC 라는 방법을 사용한 기사가 있어 내용을 소개하고자 한다. 

https://dzone.com/articles/transactions-for-the-rest-of-us

원문은 위에 dzone 사이트에 있다. 


TCC : Try-Confirm/Cancle


예약 시스템이 있다고 가정해보자. 예약은 다음과 같은 경우에 이루어진다. 

비행기와 자동차를 각각의 업체에서 예약을 한다. 바르셀로나로 가는 비행기를 예약을 하고 스페인 남부로 가기 위한 자동차를 예약 한다고 가정해보자. 

비행기 표가 없으면 차를 예약 할 필요가 없고 차가 없으면 비행기를 예약할 필요가 없다. 결론적으로 둘다 예약 가능 해야 예약을 한다. 


TCC에서 정의하는 기본적인 단계

1. 항공사에 HTTP POST 로 비행기를 예약 한다. 항공사는 확정을 하기 위한 URI와 expiration 을 준다. 

2. 렌터카 업체에 HTTP POST 로 자동차를 예약 한다. 마찬가지로 렌탈 업체는 확정을 하기 위한 URI 와 expiration 을 준다. 

3. 각각 받은 URI로 PUT 메소드로 호출을 한다.


Cancel 과 Confirm

항공사와 렌터카는 expiration 기간이 지난 후에는 자체적으로 취소하는게 가능하다. 이것은 위에서 정의한 3번을 실행하기 전에 이미 expiration 기간이 지났음을 의미한다. 

3번이 실행된 이후에 발생하는 각각의 오류에 대해서는 항공사나 렌터카 서로에게 영향을 주지 않는다. 이미 예약은 Confirmed 된 상태이기 때문이다. 


TCC Service / Participant

TCC participants (여기에서는 항공사와 렌터카) 는 "예약" 서비스를 위한 간단한 라이프 사이클 모델을 구현하기 위해 다음과 같은 상태를 따른다.

1. Initial : 아무것도 일어나지 않은 상태이다.

2. Reserved : HTTP POST를 통해서 "Try"를 한 상태이다. participants(항공사 또는 렌터카)는 Confirm 을 할 수 있는 URI와 만료시간을 제공한다. 

3. Final : 예약이 확정된 상태이며 쉽게 취소할수 없다. participants 가 지정된 시간 안에 HTTP PUT 메시지를 받으면 이 상태로 변경된다.

그림으로 표현하면 아래와 같다. 

Post 메소도를 통해서 받은 응답에는 PUT 으로 보낼수 있는 URI(ID 포함) 와 expiration 이 포함되어야 한다. 

보기에는 간단해 보이지만 실제로 구현하려면 중간중간 exception처리가 만만치 않아 보인다. 

각각을 Rest 로 호출을 하면서 각각의 서비스에서 발생한 Exception 에 대한 처리도 고민을 해봐야 하고 Response 에 대한 딜레이를 줄이기 위해 Message Queue 사용에 대한 부분도 확인을 해봐야 한다. 


728x90
반응형
반응형

HTTPS를 위해서 인증서 발급을 위해 openssl 을 이용해봤다..

 

https://sourceforge.net/projects/openssl/

 

여기 가서 다운 받아서 압축을 풀면 일단 설치는 완료된다. (윈도우 기준)

 

1. Private KEY 생성

 

명령어 : oepnssl genrsa -out [파일명] 2048

 

# openssl genrsa -out private.key 2048

Generating RSA private key, 2048 bit long modulus

.................................................+++

.................+++

 

e is 65537 (0x10001)

 

private.key

 

-----BEGIN RSA PRIVATE KEY-----

MIIEpAIBAAKCAQEAzLTDf8Q50h4H+S7H8fGLOSxQa68YSN43SDdF4GEL7rEBTt26

n+sJ/MILYk/OoSoTW46jq5YebGzWO2mqw/lciy7hx3xmhMTLjUsSmihrUfQKKrFZ

PeTKVdk9VocnnM+PutWdojhByRhlbDuYGtMku7o3mGhOK7TecZAkg0XDCLJnxyK5

Sfcx7LL/ZxJZoDlQYUqODD48jA5Ao3NsiYgRnBSvPuo2EaNHAEl9Uk9b8KGh8KK7

X75ixAa/vwDFik4BXG6MDV3nerR6yFrhyV0jDWwhArFwfNVC4T376y8nKcl6dToW

njNLe37jqIw6np7CLCn0b7l3yAL9eSvJsnmWywIDAQABAoIBAQC4amzpUL0KZxWl

zhhBBer4Ac0dhetp0g+Zlnn0D1mxmnLkOurjINqpg6K/2cf79yzjQdh/P0l/Qnmp

oqM91AskNIMgtRiiqav7SVOj35/3f9Qc7BLKqLADsScKKc5s/aytk75kIyxY3wqX

/AQmvmsMWFG3kthBlbsEMehC/vkafgh9HKpjsZfQFr7O/yBQ2p9t4PyHWf0sPaqZ

/tKxb7jGij+Z9MhaGQc4Xn2nAHooHOOrrj1uPc6m26avalkMk0VzTg60kitTNa0H

lrKWlMSzEK8avE+Bus+PPcQmDBmyAdbAomOaOmmE7+9Bk7/ewfJ0HRlM5pj/8z01

TyhLrxbhAoGBAPyKcJVVIBGwBaB96UaLlzlgyh8zyrIucEsnaxJkJfrxZrn8ACww

XeTaVpSviCF1Sst8Km3f6Ncvla1Hfl2unVgTIunkbKrrzKWPrMxwiAvY6lB3/tGa

OsS8ohzhrpXKEKjDAc0tnnsNI1auWh210KpUGt4Whzk3rvEnmcEQKY+7AoGBAM+C

ljFld5xpcrJkb8r4G2nUbvUPRekqlVb2gSzff5/O12aQUF7YBDQmijDNNaA6I5eB

2McPfhOAPlE3ecQ0u2+g4CCaTorxNwzOsVfgfYZGqhqM9rG/GEhFztfcpUFwmX0L

AKjhZhqXjTxZBfz368jyR83oSb3PIkDOuOhMC/wxAoGAD4OJqwLRt4RytAtIG1dT

8OhrQkNyPkPwDg3b3ANe+e1+fAppEE3gVsC69ONbn4KPF7UG/jz1FtMLhNuRfbvO

WqzCRlAMBOv7ZGhRGzYGhYPL0Smt875fwdo8sz2B9h21rEhegfY9eB20gAyx6IVU

zkHgbKhBolgzXQkrvtp5UyUCgYEAlyCyJhOSA1ZA9G91g8sim/bdQJj4/5HF5ent

tjKoDklkUwwznH+SwDB5YIVz0tfE6CjnKkK8PZOezyOqCR2mjOwLj3MSVNrMjwVR

34Bdqxd395JGcLmOA8Tjmg7WREyvXIRQ3K4b4K4TbKohVFVzYYwig3HzkstyVOS5

gmUwLWECgYBE8CjpaFHvDiU3zpLXu6j3nn4OFrIj8CYwm6pyBTbWLy1hFz0aShZn

oXL9pLGsmNqWDwzk7PCoiqJLraGUnhycx6ylZIzlPssiezKL2S+QgN204fCwa34r

YRnr5og9+HyGukl3+d8zVxEd9NCL8Qh5hco0PjMn7aTVp+fhz6GT7g==

-----END RSA PRIVATE KEY-----

 

 

2. Public Key 생성

 

명령어 : openssl rsa -in [private key 파일명] -pubout -out [파일명]

 

# openssl rsa -in private.key -pubout -out public.key 

writing RSA key

 

public.key 

 

-----BEGIN PUBLIC KEY-----

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzLTDf8Q50h4H+S7H8fGL

OSxQa68YSN43SDdF4GEL7rEBTt26n+sJ/MILYk/OoSoTW46jq5YebGzWO2mqw/lc

iy7hx3xmhMTLjUsSmihrUfQKKrFZPeTKVdk9VocnnM+PutWdojhByRhlbDuYGtMk

u7o3mGhOK7TecZAkg0XDCLJnxyK5Sfcx7LL/ZxJZoDlQYUqODD48jA5Ao3NsiYgR

nBSvPuo2EaNHAEl9Uk9b8KGh8KK7X75ixAa/vwDFik4BXG6MDV3nerR6yFrhyV0j

DWwhArFwfNVC4T376y8nKcl6dToWnjNLe37jqIw6np7CLCn0b7l3yAL9eSvJsnmW

ywIDAQAB

-----END PUBLIC KEY-----

 

 

3. CSR 생성 (Certificate Signing Request - 인증서 서명 요청)

 

- 인증서 발급을 위한 필요한 정보를 담고 있는 인증서 신청 형식 데이터 이다. 

 

 구분  작성 예 
 Country Name (국가코드)   KR
 State or Province Name (시/도의 전체이름)  Seoul
 Locality Name (시/군/구 등의 이름)  Songpa-gu 
 Organization (회사이름)  XXXX
 Organization Unit (부서명)  Server
 Common Name (SSL 인증서를 설치할 서버의 Full Domain)  www.xxxx.com

 

주의 사항

- Common Name 에는 인증서를 설치할 사이트의 도메인의 이름을 넣어야 한다. (ip, port, http, https 포함불가능)

 

명령어 : openssl req -new -key [private key 파일명] -out [파일명]

 

# openssl req -new -key private.key -out private.csr

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [AU]:KR

State or Province Name (full name) [Some-State]:Seoul

Locality Name (eg, city) []:Seoul

Organization Name (eg, company) [Internet Widgits Pty Ltd]:local

Organizational Unit Name (eg, section) []:local

Common Name (eg, YOUR name) []:local

Email Address []:test@test.com

 

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:test

An optional company name []:test

 

중간중간 뭐라고 나오는 내용들이 많이 있다. 일단 테스트 이기 때문에 대충 넣었다.

 

private.csr

 

-----BEGIN CERTIFICATE REQUEST-----

MIIC3jCCAcYCAQAwbzELMAkGA1UEBhMCS1IxDjAMBgNVBAgTBUtvcmVhMQ4wDAYD

VQQHEwVTZW91bDENMAsGA1UEChMEdGVzdDENMAsGA1UECxMEdGVzdDENMAsGA1UE

AxMEdGVzdDETMBEGCSqGSIb3DQEJARYEdGVzdDCCASIwDQYJKoZIhvcNAQEBBQAD

ggEPADCCAQoCggEBAOAF/QjGmdafbFanuHg3MyUlABiBhPTavX1eGzqGD/oxLwMu

e8DHEAeLBQGwpIq8qqDd8hmjFUL7blt4bzAAaGTtRnK7y1kegFNE/qftv6Imx1x6

5V2Cnh/998a3O0NXCvkBu5RRKALVl1qHOl4PKFLeX+NyoGzhqInu8ZrWu86K0cRu

JqtRF9Qpd0r7/E3yGaFdPIVA0AtM8W8+ne9Y3mMHeC7Os6DvEH1H6ZwReQljDZKK

lPjqBZwN4pn2W9ws3U0N6iTn37gQDTCJFW3MwIFUk+wK4L95XfZXCx+x/L5khTkV

mVUFvSbEw6FYWK0xeQKKtol6qUOkqC+EvKggPkUCAwEAAaAqMBMGCSqGSIb3DQEJ

AjEGEwR0ZXN0MBMGCSqGSIb3DQEJBzEGEwR0ZXN0MA0GCSqGSIb3DQEBCwUAA4IB

AQCHP6rPvZWJx1w6MW+Te3WWlaGo6WCHaVv6nxYgvnCgX+BK2B2FY9MfaSagZabj

x4SVxctJlO8WfWz+vI+iOONxkDgfPXerIXSm6qDF2ITcYvWeU/6N12Ixf+mapygO

6dTfpqAsHePJmHgWah9s+uzYllYT+HlVJtSwooKOhsYER/oEttCbDc1NGnJVLO2S

cbpbVbuuqo12MtdrZ/ZrSPiHKU+gJzieUd8gUXVDEXbo6ljlRkONMe1LPPmeKvGy

6nfaE78/U0rBce1qPaxlPUVl16bHfnjjC5BTFjym0jcMnKbOuHiHVCAeuscTXoiF

YaRIlbEUh+D/5QhtMMKqJV0o

-----END CERTIFICATE REQUEST-----

 

 

4. CRT 인증서 만들기

 

명령어 : openssl req -x509 -days [기간] -key [private key 파일명] -in [csr 파일명] -out [파일명] -days [기간]

 

# openssl req -x509 -days 365 -key private.key -in private.csr -out mycommoncrt.crt -days 365

You are about to be asked to enter information that will be incorporated                     

into your certificate request.                                                               

What you are about to enter is what is called a Distinguished Name or a DN.                  

There are quite a few fields but you can leave some blank                                    

For some fields there will be a default value,                                               

If you enter '.', the field will be left blank.                                              

-----                                                                                        

Country Name (2 letter code) [AU]:KR                                                         

State or Province Name (full name) [Some-State]:Seoul                                        

Locality Name (eg, city) []:Songpa-gu                                                        

Organization Name (eg, company) [Internet Widgits Pty Ltd]:                                  

Organizational Unit Name (eg, section) []:                                                   

Common Name (eg, YOUR name) []:                                                              

Email Address []:                                                                            

 

mycommoncrt.crt

 

-----BEGIN CERTIFICATE-----

MIID4zCCAsugAwIBAgIJAJ73VwJ+KNz9MA0GCSqGSIb3DQEBCwUAMFQxCzAJBgNV

BAYTAktSMQ4wDAYDVQQIEwVTZW91bDESMBAGA1UEBxMJU29uZ3BhLWd1MSEwHwYD

VQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTgwODIzMDEwMzE3WhcN

MTkwODIzMDEwMzE3WjBUMQswCQYDVQQGEwJLUjEOMAwGA1UECBMFU2VvdWwxEjAQ

BgNVBAcTCVNvbmdwYS1ndTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkg

THRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzKib3QSYnn5bGtIY

2DOQiPpieNNzpiyE8+Uhf9VufyBeMR8DGfaCuku0cjqF15Gqkgl2+3DavaGtyuNQ

e8Idz1jUHW/nLUlKLOzYf/a3W4n7EOjzhUv3H16KenqxhJcc1RFs6Zg+c/n76hId

/NrFbLq/kX4/xEPmRRe6O88SSUlcyBVQo59jMNH0IJOHZ8V1gKvTpQkUt3su7ojX

QfkmQv2Hps6pg2FRPnysDS6wDolaMt1f/Dd51l/Y29Dm5sjiPTHXZbYp/mD0Ka3T

TipnM60wMdDSdCQx9aT0hdVhXEHz0aSMezJP5SUvbIL4DHQPC1GHF2vYlsbivp/t

6Uu4kQIDAQABo4G3MIG0MB0GA1UdDgQWBBRRJxq/mdmqJswbHi1djbMaGnmQhzCB

hAYDVR0jBH0we4AUUScav5nZqibMGx4tXY2zGhp5kIehWKRWMFQxCzAJBgNVBAYT

AktSMQ4wDAYDVQQIEwVTZW91bDESMBAGA1UEBxMJU29uZ3BhLWd1MSEwHwYDVQQK

ExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGSCCQCe91cCfijc/TAMBgNVHRMEBTAD

AQH/MA0GCSqGSIb3DQEBCwUAA4IBAQADDWN84F8IdPmc43jGi2jOmhp3OwHoBvVp

DXJrXJNGjDYpJ8BZn+kf6K5D59qZfIW1cHhzaf/kylQsHF2cH8ZFU69kp0txIi/f

9hOu5W/OwxtyCmomaL99zJdHePfj4MFhu+aANCkaOcEFlE3kc+JTCdj2jPZxMIJr

dIBsbLJeEwX8q7RJ2t/pPn/LiYRVuEEj9qpXu4MOw01ccjSPHA/TgZ+FDOZb3U9y

ABXB64uoxbxr5zIAgYKoQUOoX3S0gwDo9omWcnAPU4fjtT7Es/3HNjtSet3TGW68

J7vbhPIovtusLqH1/AUKmEVspeUKkn9ero0Ee9ruuP5HALb8zstG

-----END CERTIFICATE-----

 

 

5. 인증서 Config 파일 (test.conf)

 

[req]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn

[ dn ]
C=KR
ST=Seoul
L=Seoul
O=COMPANY
OU=DEV
emailAddress=test@test.com
CN = testmachine

[ req_ext ]
subjectAltName = @alt_names

[ alt_names ]
IP.1 = 111.111.111.111
DNS.1 = test.com

 

위에서 만들다 보면 계속 같은 내용을 써야 한다. 그래서 그 부분을 파일로 만들어 놓고 csr, crt 생성할때 사용하면 된다.
 
openssl req -new -key private.key -out private.csr -config test.conf
openssl req -x509 -days 365 -key private.key -in private.csr -out mycommoncrt.crt -days 365 -config test.conf
 
그리고 이렇게 해서 인증서를 만들었을때 subjectAltName 이 안들어간다 . 그 부분이 필요할 경우에는 이렇게 명령어를 사용하면 된다. 
 
openssl req -x509 -days 365 -key private.key -in private.csr -out mycommoncrt.crt -days 365 -config test.conf -extensions req_ext
 
 

 

openssl 팁 몇가지
 
openssl x509 -text -noout -in <인증서파일>  : 인증서 내용을 볼수 있다.
 
openssl x509 -in mycommoncrt.crt -out mycommonpem.pem -outform PEM  : CRT 파일을 PEM 파일로 변환한다.

 

참고자료

 

https://www.comodossl.co.kr/certificate/ssl-installation-guides/Apache-csr-crt.aspx

https://www.kicassl.com/sslcert/sslcert/formSslCert.sg

http://namjackson.tistory.com/24

728x90
반응형

'Development > Tech&Seminar' 카테고리의 다른 글

Google Cloud Hackathon 간단한 후기  (0) 2018.10.08
TCC가 뭐지???  (0) 2018.09.07
#2 OpenID Connect Flow  (0) 2018.08.14
#1 Open ID Connect 가 뭐야???  (0) 2018.08.07
Google Cloud Study Jams 후기  (0) 2018.05.15
반응형
앞에 글(2018/08/07 - [Development/Tech&Seminar] - #1 Open ID Connect 가 뭐야???에서 OpenID Connect가 무엇인지에 대해서 설명을 했었다. 이번에는 각가의 흐름에 대해서 좀더 자세히 설명을 해보기로 한다. 

OpenID Connect 의 Flow 는 response_type 에 의해서 정해진다고 말했었다. 그 response_type 에 따라서 어떻게 다른지 확인해보자.

아래 정의한 모든 Request는 parameter  scope  openid 가 포함되어야 한다. openid가 포함되어있지 않을 경우는 다르게 동작할 수 있다. 

1. response_type = code

Endpoint

Authorization Code

Access Token

ID Token

Authorization

O

X

X

Token

X

O

O


openid  포함되지 않을경우 (oauth authorization code flow  동일하다)


Endpoint

Authorization Code

Access Token

ID Token

Authorization

O

X

X

Token

X

O

X

 

    2. response_type = id_token (Token Endpoint 를 사용하지 않는다.)

    Endpoint

    Authorization Code

    Access Token

    ID Token

    Authorization

    X

    X

    O

     

    3. response_type = id_token token (Token Endpoint 를 사용하지 않는다.)


      Endpoint

      Authorization Code

      Access Token

      ID Token

      Authorization

      X

      O

      O


      추가적으로 Oauth 2.0 에서는 response_type 에 token 이 라는 항목도 있지만 OpenID Connect 에서는 사용하지 않는다. response_type 이 token 일 경우에는 ID-Token을 리턴하지 않기 때문이다. 

      4. response_type = code id_token

      Endpoint

      Authorization Code

      Access Token

      ID Token

      Authorization

      O

      X

      O

      Token

      X

      O

      O


      5. response_type = code token

      Endpoint

      Authorization Code

      Access Token

      ID Token

      Authorization

      O

      O

      X

      Token

      X

      O

      O


      openid  포함되지 않을경우 (oauth authorization code flow  동일하다)


      Endpoint

      Authorization Code

      Access Token

      ID Token

      Authorization

      O

      O

      X

      Token

      X

      O

      X


      6. response_type = code id_token token

      Endpoint

      Authorization Code

      Access Token

      ID Token

      Authorization

      O

      O

      X

      Token

      X

      O

      O




      참고자료

      http://openid.net/specs/openid-connect-core-1_0.html#IDToken

      https://medium.com/@darutk/diagrams-of-all-the-openid-connect-flows-6968e3990660


      728x90
      반응형
      반응형

      Open ID Connect 에 대해서 공부하면서 이것저것 찾아본것을 정리해 보았다. 


      1. OpenID Connect 란? 


      - OpenID Connect 는 Oauth 2.0을 확장해서 개발 되었다. 

      OpenID Connect 는 openid라는 scope 값을 포함해서 Authorization Request를 보내며 인증(Authentication) 에 대한 정보는 ID Token 이라고 불리는 JSON Web Token(JWT) 을 리턴해준다.  (scope에 openid 를 무조건 포함해야 하는지는 좀 헷갈린다.. )

      OpenID Provider (OP) : End-User 를 인증하고 인증이벤트 및 End-User에 대한 당사지에게 클레임을 제공할수 있는 Oauth 2.0 인증서버 (원문 : OAuth 2.0 Authorization Server that is capable of Authenticating the End-User and providing Claims to a Relying Party about the Authentication event and the End-User. )



      2. ID Token

      - ID Token 은 End-User의 인증에 대한 Claims 를 담고 있는 암호화 된 토큰이다. ID Token 은 JSON Web Token(JWT) 로 표현된다.


      타입 

       필수여부

       설명

       iss

       Required

       ID Token  발급에 대한 고유 식별값. host, port 등이 포함되기도 한다.

       sub

       Required

       End-User 에 대한 고유한 값

       aud

       Required

       ID Token 과 관련된 청중, client_id 와 관련이 있다.

       exp

       Required

       토큰 만료 시간

       iat

       Required

       JWT 를 발행한 시간

       auth_time

       Required/Optional

       End-User에 대한 인증이 일어난 시간.

       nonce

       

       

       acr

       Optional

       Authentication Context Class Reference. 

       amr

       Optional

       Authentication Method Reference. 

       azp

       Optional

       Authorized Party.

       

      Json Object 예시

        {

         "iss": "https://server.example.com",

         "sub": "24400320",

         "aud": "s6BhdRkqt3",

         "nonce": "n-0S6_WzA2Mj",

         "exp": 1311281970,

         "iat": 1311280970,

         "auth_time": 1311280969,

         "acr": "urn:mace:incommon:iap:silver"

        }



      3. OpenID Connect Authentication Flow

       

      OepnID Connect Authentication 흐름에는 3가지 종류가 있다. 


      1. Authorization Code Flow
      2. Implicit Flow
      3. Hybrid Flow

      우선 이 흐름을 설명하기 전에 아래 표를 먼저 살펴보자. 

       Property 

       Authorization Code Flow

       Implicit Flow 

       Hybrid Flow 

       All tokens returned from Authorization Endpoint

       NO

       YES

       NO

       All tokens returned from Token Endpoint

       YES

       NO

       NO

       Tokens not revealed to User Agent

       YES

       NO

       NO

       Client can be authenticated

       YES

       NO

       YES

       Refresh Token possible

       YES

       NO

       YES

       Communication in one round trip

       NO

       YES

       NO

       Most communication server-to-server

       YES

       NO

       VARIES


      무슨말인지 이해가 안될지도 모르지만 우선 내 생각이 이거 2가지만 기억하면 좋을것 같다. 


      #1 All tokens returned from Authorization Endpoint : token 발급 위치에 대한 내용이다. Oauth 2.0 이나 OpenID Connect 나 정의 되어있는 URL 을 보면 끝에 authorize 로 끝나는 URL 이 있다. (아닐수도 있지만 보통 비슷하다) 이 URL 이 바로 Authorization Endpoint 이다. 먼저 인증이 되었는지 안되었는지 확일을 하는 URL 이고 이 URL 의 응답에 따라서 client 에서는 로그인 창으로 리다이렉트 되기도 한다. 이 값이 NO 라는 말은 Token 발급 Endpoint 가 아니라는 의미이다. 뒤에 또 설명을 하겠지만 간단히 설명하면 Authorization Code 방식은 Authorization Endpoint 에서 인증이 확인되면 Code를 발급하고 그 Code 를 가지고 Token Endpoint로 요청을 해서 Token을 발급받는다.

      #2 All tokens returned from Token Endpoint : URL 이 accessToken 또는 token 이렇게 끝나는 URL 이다. Implicit Flow 같은 경우는 이미 Authorization Endpoint 에서 Token을 발급하기 때문에 Token Endpoint 가 필요 없다. 

      4. Response_type


      위에서 잠깐 언급한 3가지의 Flow Authorization Request response_type 값에 따라서 결정된다. response_type 필수 이다.

       

      response_type value

      Flow

      code

      Authorization Code

      id_token

      Implicit

      id_token token

      Implicit

      code id_token

      Hybrid

      code token

      Hybrid

      code id_token token

      Hybrid

       

      각각의 흐름에 대한 특징들은 다음 글에서 다시 설명하겠다. 


      참고자료

      https://connect2id.com/learn/openid-connect

      http://openid.net/specs/openid-connect-core-1_0.html#IDToken

      https://medium.com/@darutk/diagrams-of-all-the-openid-connect-flows-6968e3990660


      728x90
      반응형
      반응형


      한달 전에 Google Cloud Study Jams 을 진행하는 그룹장을 모집한다는 내용을 보게 되었다. 스터디원도 아니고 그룹장을 모집한다라니. 몇번을 할까말까 고민을 하다가 지원을 하게 되었다. 


      Google Cloud Study Jams 을 통해서 그룹장 및 그룹원들은 Qwiklabs 에서 제공하는 Google Cloud Platform 관련 lab 들을 한달간 무료로 수강을 할수 있는 기회가 제공된다. 그룹장은 같이 스터디를 할 그룹원들을 최소 5명이상 모아야 하며 Google에서 제시한 4가지의 필수 과목을 수료하게 되면 교육을 이수하게 된다. 단, Qwiklabs에서 제공되는 모든 Lab들을 수강할 수 있으며 필수 과목 이외에도 다른 과목을 수강하는것도 허용된다. Qwiklabs에 권한이 크레딧으로 부여되는게 아니라 기간으로 부여되기 때문에 개개인이 듣고 싶은 모든 Labs들을 수강이 가능하다. 


      좋은 기회인것은 분명하고 공부도 하면 좋을것 같아서 회사 내에서 그룹원들을 모집하고 한달간 진행을 했다. 진행이라고 해서 별다른건 없었다. Qwiklabs 자체가 개개인이 Lab을 진행 해야 하기 때문에 그룹원들 보다 먼저 진행해서 좀더 쉽게 할수 있도록 도와주는 역할 정도였다. 그리고 공지사항 같은 것들을 전달하고 하는 역할이었다. 그리고 어느새 한달이 지나갔다.


      2018년 5월 15일 종강모임을 하게 되었다. 원래 참석 대상은 그룹장 대상이었으나 일부 자리가 남아서 그룹원들도 선착순으로 참석할 수 있었다. 장소는 역삼역 GFC 22층 구글 코리아에서 진행 되었다.




      시작에 앞서 먼저 저녁식사가 뷔페식으로 제공되었다. 아마도 구글 직원들이 사용하는 카페테리아 같은데 전에 세미나 들으러 21층은 자주 왔었는데 22층은 처음 와봤다. 그렇게 많지는 않지만 그래도 음식들이 깔끔하고 후식이랑 음료수등로 많이 있어서 배부르게 먹기 충분했다. 


      Google Cloud Study Jams 담당자이신 임성혁 님께서 진행을 하면서 수료식이 시작되었다.

      화면에 보이는 숫자중 위에 있는 것은 전 세계에서 진행된 Google Cloud Study Jams 숫자이고 아래 있는 숫자들인 이번에 처음으로 한국에서 진행된 숫자이다. 첫번재는 참여 인원, 두번째는 그룹 숫자, 세번째는 진행한 시간 네번째는 달성률이다. 짧은 기간 진행된 그룹과 달성률을 전세계 숫자와 비교하면 높은 수치라고 한다. 그만큼 각각의 그룹과 그룹원들의 참여율이 높았다고 할 수 있다.


      이것은 다음에 진행될 Advanced 과정에 대한 예고편이다. 의미심장한 Coursera가 화면에 보인다. 언제 시작될지 아직은 모르지만 벌써부터 기대가 된다. 하지만 전에도 느꼈지만 Coursera 는 이번처럼 만만치는 않을거라 생각이 된다. 

      그리고 이것은 구글에서 준비해준 작은 선물이다. 


      왼쪽에 보이는 것은 티셔츠와 친환경 소재로 만든 연필, 그리고 구글 스티커이다. 이것은 그룹장에게만 준 선물이고 오른쪽에 보이는 배지는 그룹원들에게 주는 선물이다. 



      이번 스터디 기간 동안 내가 진행한 내용이다. 다행히 GCP Essentials 는 완료를 할 수 있었고 그 이외에 Kubernetes 관련된 것도 2개정도 더 들었다. 좀더 많이 들었으면 더 좋았을텐데 라는 아쉬움이 남는다. 그리고 이번에 진행하면서 의사전달을 Slack을 이용했는데 개인적으로는 만족을 했는데 그룹원들에게는 아직 익숙치 않은것 같았다. 그래서 그것때문에 의사전달이 제대로 되지 않은 경우도 발생을 해서 좀 힘이 들었다. 물론 다음 스터디 진행 시에도 Slack을 그대로 사용할 거지만 그때는 좀더 사용을 잘 할 수 있도록 해야겠다. 그리고 어떻게 하면 좀더 즐겁게 많은 것을 배울 수 있도록 참여를 유도할 것인지 고민을 해봐야겠다. 

      728x90
      반응형
      반응형

       

      구글에서 대용량 아키텍쳐 설계 대한 2일짜리 워크샵을 진행한다고 해서 신청을 했다. 신청한 사람 중에 일부만 참석할수 있는 워크샵 이어서 선정이 안될까 조마조마 했다. 워크샵 내용은 아래 표처럼 이틀동안 강의도 듣고 실습도 해볼수 있는 일정이었다. 교육은 "대용량 아키텍처와 성능 튜닝" 저자인 조대협님께서 직접 해주셨다.

       

      우선 기술적인 자세한 내용들은 워낙 방대하고 적을수 없어서 여기에다 일일이 적지는 않겠다.  기술적인 내용보다는 첫날 들었던 "아키텍트"는 어떻게 해야 하는지에 대해서 몇가지 인상깊었던 것에 대해 적어보려고 한다. 


      아키텍트는 전달을 잘해야 한다. 

      아키텍트는 설계를 하는 사람이다. 아니, 설계만 하는 사람이라고 생각을 했었다. 그런데 그것도 중요하지만 다른 중요한것이 있었다. 바로 커뮤니케이션이다. 아키텍트는 설계를 한후 개발팀이 설계한 것을 보고 개발을 할수 있도록 전달을 해야 한다. 그렇기 때문에 개발팀과의 커뮤니케이션이 정말 중요하다. 보통 설계 문서를 주지만 이건 한계가 있다. 왜냐? 개발자들은 설계문서를 잘 안본다는 안타깝지만 사실에 가까운 팩트이다. 결국 찾아다니면서 설명을 해줘야 한다. 그리고 말보다는 그림이 더 설명을 하기도, 이해를 하기도 쉽다.



      위 사진을 한번 살펴보자. 인스타그램 같은 앱에서 사진을 올렸을 경우 사진을 저장하는 절차를 설계한 그림이다. 모바일컨트롤러(MC) 에서 API Gateway를 거쳐서 인증을 받은후 API 서버를 거쳐서 사진을 저장하게 된다. 각각의 흐름에는 번호가 붙어 있다. 각각의 트랜잭션이 일어날때 마다 필요한 DATA 와 받는 Data도 표현을 해준다. 각각의 번호는 하나의 RestAPI 로 설계가 될수 있다. 이런 형태로 하나 하나 다 정의를 해줘야 한다고 한다.(아키텍트는 정말 힘든 직업인것 같다 ㅡㅡ;;)  


      그리고 커뮤니케이션과 더불어서 개발팀의 능력치 파악도 중요한 포인트이다. 개발팀의 능력에 따라서 일의 양이나 일정을 결정 할 수 있다. 그리고 누구한테 어떤 일을 맡겨야하는것 까지 파악이 된다면 정말 도움이 많이된다. 이런 것들을 잘 파악하기 위해서는 같이 술을 먹어야 한다고...


      아키텍처는 상황에 따라서 변한다.

      설계 변경이야 늘 있는 일이라서 새삼 놀랍지도 않은 일이다. 아침에 받았던 설계를 점심 이후에 다시 가져와서 수정해야 된다고 들은적이 정말 많다. 그런데 하나의 product를 유지하기 위해 환경이 변화해서 전체 아키텍처가 변경이 된다는 말에서 놀랐다. 

      처음 product  를 만들 때에는 정해진 feature를 만들어서 제공하기 위한 제품 위주의 아키텍처 였다고 가정해 보자. 제품을 출시하고 나면 다른 경쟁사들에게 뒤쳐지지 않기 위해서 빠르게 개발해서 빠르게 대응할 수 있는 아키텍처가 필요하다고 한다. 이런 형태로 처음 구상했던 아키텍처를 끝까지 가지고 가는게 아니라 변화하는 상황에 빨리 대응하기 위한 형태로 아키텍처를 그때 그때 알맞게 변경을 해야 한다고 한다. 생각해 보면 하루에도 수십개, 수천개씩 쏟아져 나오는 product들 사이에서 살아 남으려면 변화는 필수인것 같다. 그리고 아키텍처도 예외는 아니라는 것이다. 


      이틀간의 짧은 시간동안 많은 내용을 배웠다. 모든 내용을 다 이해해서 내 머릿속에 담을수 있었으면 더 좋았겠지만 아직은 좀 무리였다. 하지만 앞으로 공부를 더 해나가면 발전할 수 있을거라는 생각은 한다. 오랜만에 다녀온 워크샵에서 좋은 지식과 자극을 같이 얻을수 있어서 너무 좋았다. 


      728x90
      반응형

      'Development > Tech&Seminar' 카테고리의 다른 글

      TCC가 뭐지???  (0) 2018.09.07
      Openssl로 SSL 을 위한 인증서 발급하기 (HTTPS)  (2) 2018.08.22
      #2 OpenID Connect Flow  (0) 2018.08.14
      #1 Open ID Connect 가 뭐야???  (0) 2018.08.07
      Google Cloud Study Jams 후기  (0) 2018.05.15

      + Recent posts