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으로 들어가면
관리자 로그인 창이 뜨게 됩니다.
이런 창이 뜹니다
로그인 후, 맨 위 왼쪽에 master에 슬그머니 마우스를 올리면 add realm 버튼이 뜰텐데 누르면
이런 창이 뜨고 name에 my_realm 을
create합니다
그리고 clients 를 누르고
이 버튼을 누릅니다. 버튼 밑에 리스트는 무시하세요.
다 만들고 나서 추가한 사진입니다.
save누르고
총 4개를 바꾼것입니다.
access type, root URL, Valid Redirect URIs, web Origins 바꿈
그리고 save누릅니다
조금 헷갈리게 제가 작성해놓았는데.
방금 만든 client의 ROLES
에 들어가서 Add Role 누르는 것입니다.
client 마다 role이 존재한다고 생각하면 됨
클릭후 들어가서
roles 클릭하고 add role 클릭
SAVE누르고 ROLE_ADMIN도 만들어준다.
이렇게 되야함
my client 안의 role인것이 중요
안보이면 VIEW ALL ROLES 누르기
ADD USER 눌러서
admin 만들고 user도 만들어주고
view all 무슨 버튼 눌러서 확인한다음
admin의 id를 클릭해서
role mappings 들어가서
이렇게 만들어라
비번 1로 설정하고 off 해줌
off하는 이유는 임시비번이 아니라 찐 비번으로 하기위함
set password버튼 누르고 admin도 똑같이해줌
- 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 윈도우 설치방법 참조하기
아까 access token cmd 창에서 나왔던 것을 확인한다.
긴 access token코드를 복사한다.
JWT 사이트에 가서 ACCESS TOKEN 복사한거 보기
안에 여러 정보가 들어있는 것을 확인할 수 있다
scope(접근범위 = 이용할 수 있는 서비스 목록들)를 확인 할 수도 있고, 역할을 확인할 수도 있다
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으로
클릭후
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_a로 로그인을 할 때에 admin 1 로 접속하면
client_a도 이용할 수 있기 때문에 이렇게 세가지가 뜬다
client_a, profile, email
근데 client_a로 로그인할 때에 user 1 로 접속하면
profile, email
이렇게 두가지만 뜬다
client_a는 어드민만 접속할 수 있는 페이지이기 때문에
세팅 페이지에서
login페이지 만들수있음 ㅋㅋㅋㅋㅋㅋ
이런식으로 custom 가능
회원가입도 가능함 개신기..
위 사진에서 test로 가입했는데 진짜 가입됨 개신기
E:\Programs\keycloak-16.1.1\themes
들어가기
보내준 압축파일 풀기
이런게 있다능
ㅋ 기본이미지가 가득하다
하지만 다운받은 테마에는
이렇게 이쁜 이미지가 가득하다 ㅋ
적용해보자 ㅋ
themes에 안뜨면 f5누르면 뜸
save
http://localhost:8060/login
로 들어가서 client a 누르면
이렇게 이쁜 창이 뜬다~^^