keycloak 에 대하여

뿌이·2022년 2월 11일
0

스프링 클라우드

목록 보기
10/32

참고 강의

개발환경 설정

keycloak 설치

https://github.com/hyeonju9705/keycloakAccessToken.git

내 깃허브 clone 주소 인데 이대로 클론하시면 됩니다.
클론을 하는데, 밑의 경로에 다운받았습니다 저는

E:\Programs\keycloak-16.1.1

에 압축해제하기

해제한 폴더 -bin폴더- standalone.bat
실행하면 keycloak 서버 실행 완료
추가정보-실행 눌러서 실행!

조금 기다렸다가 localhost:8080/auth 들어가면 페이지 나옴

이런 페이지가 나옵니다!!!


저는 아이디 hj 비번 hj 로 가입했습니다.

가입 완료

이후부터는 localhost:8080/auth/admin으로 들어가면
관리자 로그인 창이 뜨게 됩니다.

이런 창이 뜹니다

Add Realm

로그인 후, 맨 위 왼쪽에 master에 슬그머니 마우스를 올리면 add realm 버튼이 뜰텐데 누르면

이런 창이 뜨고 name에 my_realm 을
create합니다

Add clients

그리고 clients 를 누르고

이 버튼을 누릅니다. 버튼 밑에 리스트는 무시하세요.
다 만들고 나서 추가한 사진입니다.

save누르고



총 4개를 바꾼것입니다.
access type, root URL, Valid Redirect URIs, web Origins 바꿈

그리고 save누릅니다

ADD ROLE

조금 헷갈리게 제가 작성해놓았는데.
방금 만든 client의 ROLES에 들어가서 Add Role 누르는 것입니다.
client 마다 role이 존재한다고 생각하면 됨

클릭후 들어가서

roles 클릭하고 add role 클릭

SAVE누르고 ROLE_ADMIN도 만들어준다.

이렇게 되야함
my client 안의 role인것이 중요
안보이면 VIEW ALL ROLES 누르기

Users


ADD USER 눌러서

admin 만들고 user도 만들어주고

view all 무슨 버튼 눌러서 확인한다음
admin의 id를 클릭해서

role mappings 들어가서

이렇게 만들어라



비번 1로 설정하고 off 해줌
off하는 이유는 임시비번이 아니라 찐 비번으로 하기위함
set password버튼 누르고 admin도 똑같이해줌

cmd창에 타이핑 해야할 것

  • curl 검증(토큰 요청)
    curl -X POST "http://localhost:8080/auth/realms/my_realm/protocol/openid-connect/token" ^
    --header "Content-Type: application/x-www-form-urlencoded" ^
    --data-urlencode "grant_type=password" ^
    --data-urlencode "client_id=my_client" ^
    --data-urlencode "client_secret=imCYXN5cCxKnUMcTLEf704tXznEw6LuO" ^
    --data-urlencode "username=admin" ^
    --data-urlencode "password=1" | jq


secret을 복사해 와서 위 코드의 client secret 부분을 바꿔줍니다.
한국어는 빼고요~

바꾸면 밑과 같은 코드가 되어야합니다.

curl -X POST "http://localhost:8080/auth/realms/my_realm/protocol/openid-connect/token" ^
--header "Content-Type: application/x-www-form-urlencoded" ^
--data-urlencode "grant_type=password" ^
--data-urlencode "client_id=my_client" ^
--data-urlencode "client_secret=iI4x5aHe8764wiNLYU0zaoEbITQlVO7h" ^
--data-urlencode "username=admin" ^
--data-urlencode "password=1" | jq

위 코드를 cmd에 입력해야함!!


입력하고 enter쳤을 때 위와 같은 화면의
access token이 길게 나오면 된거임

jq(JSON Parser) 설치

그리고 jq(JSON Parser)을 설치한다
jq 윈도우 설치방법 참조하기

엑세스 토큰 복사

아까 access token cmd 창에서 나왔던 것을 확인한다.

긴 access token코드를 복사한다.
JWT 사이트에 가서 ACCESS TOKEN 복사한거 보기
안에 여러 정보가 들어있는 것을 확인할 수 있다

scope(접근범위 = 이용할 수 있는 서비스 목록들)를 확인 할 수도 있고, 역할을 확인할 수도 있다

client 생성


create버튼 누른후

my_client_a랑 my_client_b 생성 save


여기 가서 CLIENT_A 만든 후
CLIENT_B도 생성해주기


밑으로 스크롤 내려서 SAVE 버튼 누르고 위의 맨 위의 버튼 중 하나인 CLIENT SCOPES 누르세요

CLIENT_A클릭후 ADD SELECTED 눌르면 위와 같은 화면이된다

CLIENT_B도 이렇게 된다.

실습

파일-캐시무효화 누르면 런타임 버튼 안뜨는건 다 뜨게된다
그래도 안뜨면 폴더안에 폴더가 있는지 확인하기!
난 이게 문제였음


gateway의 client-secret client secret에 맞게 두개 다 바꿔주기
우리의 secret으로

client secret 확인방법


클릭후

a 시크릿 긁기
이게 a 시크릿
b도 마찬가지로 b클릭해서 secret 긁을 수 있음

긁은걸로 CLIENT SECRET 바꿔주는것임~

gateway 실행 후 bizapplication 실행

들어감


에 의해 로그인 하면 /로 가져서


이렇게 보인다

이제 소스를 수정해보겠음

gatewayApplication.java의 코드를

return Mono.just(authorizedClient.getAccessToken().getScopes() + "ㅎㅇ" + authorizedClient.getAccessToken().getTokenType() + "베베베베" + authorizedClient.getAccessToken().getTokenValue());

로 수정하고
http://localhost:8060/token
으로 들어가면

이런 화면이 뜨는데
ㅎㅇ까지가 scope
765cef81 이게 토큰 타입
베베베베 부터는 access token이다

다른아이디로 로그인하고싶을때는 keycloak에서 로그아웃 해야함


http://localhost:8060/login 에서
client_b선택 후

admin
1
로 로그인

로그인 하면 이런 창을 보게된다

권한 다르게 주기 실습


a는 admin만 들어갈수있는 페이지

b는 admin과 user모두 들어갈 수 있는 페이지



이렇게 다 설정해줘야함

캡쳐에서 놓친 부분이 있는데,
a페이지에 대해서만 스코프 를 주고,
b페이지는 안줬던거 같음.
아니면 user, admin 에 b페이지에 대해 까먹었거나..
하튼 뭔가 더 해야 admin으로 로그인 시 , client_a,b에 대한 스코프를 둘 다 볼 수 있다

client scope


중요함 무조건 이렇게줘야함
이유는 모름


client_a로 로그인을 할 때에 admin 1 로 접속하면
client_a도 이용할 수 있기 때문에 이렇게 세가지가 뜬다
client_a, profile, email

근데 client_a로 로그인할 때에 user 1 로 접속하면
profile, email
이렇게 두가지만 뜬다
client_a는 어드민만 접속할 수 있는 페이지이기 때문에

신기한거


세팅 페이지에서
login페이지 만들수있음 ㅋㅋㅋㅋㅋㅋ


이런식으로 custom 가능
회원가입도 가능함 개신기..

위 사진에서 test로 가입했는데 진짜 가입됨 개신기

custom page 꾸미는법

E:\Programs\keycloak-16.1.1\themes
들어가기
보내준 압축파일 풀기

이런게 있다능
ㅋ 기본이미지가 가득하다

하지만 다운받은 테마에는

이렇게 이쁜 이미지가 가득하다 ㅋ
적용해보자 ㅋ

themes에 안뜨면 f5누르면 뜸
save

http://localhost:8060/login

로 들어가서 client a 누르면

이렇게 이쁜 창이 뜬다~^^

  • realm settings에서 token시간도 설정 가능하다
    우와아아앙
profile
기록이 쌓이면 지식이 된다.

0개의 댓글