Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hsw0/test-keycloak
Keycloak 테스트
https://github.com/hsw0/test-keycloak
keycloak vagrant
Last synced: about 1 month ago
JSON representation
Keycloak 테스트
- Host: GitHub
- URL: https://github.com/hsw0/test-keycloak
- Owner: hsw0
- Created: 2016-09-17T04:44:21.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2018-02-18T17:57:20.000Z (almost 7 years ago)
- Last Synced: 2024-08-05T08:09:45.558Z (5 months ago)
- Topics: keycloak, vagrant
- Language: Shell
- Homepage:
- Size: 144 KB
- Stars: 14
- Watchers: 1
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Keycloak + 기타 테스트
## [Keycloak이란?](http://www.keycloak.org/about.html)
[IdM](https://en.wikipedia.org/wiki/Identity_management) 및 SSO 서버 솔루션
* [웹사이트](https://www.keycloak.org)
* [공식 문서](http://www.keycloak.org/documentation.html)## 정리
아래 내용은 커스터마이징 없이 기본 관리툴 기능만 활용한 것입니다. 미처 확인하지 못한 부분이 있을 수 있습니다.
### 주요 개념
자세한 설명은 생략합니다
* Realm
* [Role](https://keycloak.gitbooks.io/server-adminstration-guide/content/topics/roles.html)
* [클라이언트](https://keycloak.gitbooks.io/server-adminstration-guide/content/topics/clients.html): Keycloak에 사용자 인증을 요구할 수 있는 개체 (서비스). SAML / OpenID Connect 로 연동 가능
* [Identity Brokering / Identity Providers](https://keycloak.gitbooks.io/server-adminstration-guide/content/topics/identity-broker.html) (이하 IdP): Google, Facebook 등 외부 인증 서비스
* [User Storage Federation](https://keycloak.gitbooks.io/server-adminstration-guide/content/topics/user-federation.html): LDAP 등 외부 사용자 DB### 사용자 설정
* 식별자: UUID (변경불가)
* Username (aka User ID)
* Password
- 임시 암호: 설정할 경우 로그인시 강제 변경
* 이메일
- 이메일 검증 여부
* 성 / 이름
* 부가 속성
- 임의 Key-Value 값.
* 그룹
* Role
* 생성일시
* 계정 잠금 설정
* 임시 잠금 설정 (로그인 실패에 의한)
* OTP
* 로그인 후 강제로 할 행동
- OTP 설정
- 프로필 변경
- 암호 변경
- 이메일 검증
* 연동한 IdP
- IdP측 사용자 식별자
- 토큰!!
* 연동한 서비스
* 로그인 세션### 접근 제어
* 사용자/그룹 별로 접근 가능한 서비스 (SAML/OpenID 클라이언트) 를 제한하는 기능은 없다.
* 서비스측에서 받은 사용자 정보로 제어해야 한다.
- 그룹, Role, 접근 정책(OpenID 전용), 부가 속성 등### 감사 로그
* 사용자 "로그인 관련" / 관리자 행위별로 자세한 정보와 함께 구조화된 형태로 기록된다.
* 당연하지만 각 서비스로 넘어간 뒤 행위는 남지 않는다.### Active Directory 연동
* LDAP -> Keycloak 동기화:
1. 최초 로그인시 자동으로 가져옴
2. 전체 / 증분 동기화는 콘솔에서 수동으로 또는 정기적으로 수행* Keycloak -> LDAP 동기화:
- 계정 생성, 수정, 삭제시 LDAP에 반영.
- Self service!
- 그룹 삭제는 반영되지 않음* Keycloak에서 암호 변경시 AD에도 반영.
* 인증 방식:
- LDAP binding
- Kerberos/SPNEGO SSO (미확인)
- Kerberos (폼 ID/PW)### Google 사용자 인증 (및 그 외 Open ID connect)
* 이메일이 같은 계정이 있을 경우 AD 암호 확인 후 자동으로 IdP 연동됨. 이후 ID/암호 또는 IdP 방식 둘 다 로그인 가능.
* 첫 로그인시 사용할 ID, 메일, 성,이름, 암호를 지정하면 AD 계정 생성
- 폼 입력값 검증 옵션이 없음.
- 스크립트에서 값을 미리 설정하거나 거부할 수는 있음
* 서로 다른 IdP는 여러 개 연동 가능
* 인증 플로우 설정시 사용자/암호/IdP 선택 폼 없이 바로 인증 가능
* 스크립트로 특정 Google Apps 도메인 사용자만 허용 가능
1. IdP Attribute Importer로 hd 속성 import.
주의: IdP 로그인으로 계정을 신규 생성하는 경우에만 입력된다.
2. 스크립트에서 1에서 가져온 속성과 비교### Multi factor authentication
* [HOTP](https://tools.ietf.org/html/rfc4226) - 카운터/시간 방식 지원
- 해시 알고리즘, 각종 파라메터 설정 가능
- Google Authenticator에서 잘 작동
* 인증 방식에 상관 없이 OTP 사용 강제 가능### Script-based Authentication
* JS로 인증 허용/거부 규칙을 설정할 수 있다. [Java ScriptEngine](https://docs.oracle.com/javase/7/docs/api/javax/script/ScriptEngine.html)을 사용.
* 그런데 사용이 매우 어렵다 (특히 디버깅 등)
* 예제: [snippets/StripEmailDomainFromUsername.js](snippets/StripEmailDomainFromUsername.js) 참조.
* 거부시 오류 메시지는 직접 선택할 수 없고 [상수 몇개](http://www.keycloak.org/docs/javadocs/org/keycloak/authentication/AuthenticationFlowError.html) 중에서 선택해야 한다.
* 이걸로 서비스로 넘어갈 때 접근 거부는 안 된다. 인증 과정 플로우만 커스터마이징 할수 있고 서비스로 넘어가는 플로우는 커스터마이징 자체가 불가능.### UI 커스터마이징
* 테마, 지역화 기능 등 제공
- 한국어 빼고
* 관리툴에서 변경 가능한 부분은 로그인 페이지 상단의 타이틀 정도... 경고 배너도 못 넣는다.
* 약관 기능은 있으나 수정 페이지가 없음.### 안 해본 거
* 메일 발송
- 메일주소 확인
- 암호 분실
* OpenID Connect 클라이언트 AuthZ 기능
- URL path 별로 권한 설정이 가능할 것 같다.
* 클러스터링
* TODO: Keycloak LDAP bind 계정 Administrator -> 서비스 계정으로 변경
* [Keycloak Security Proxy](https://keycloak.gitbooks.io/server-installation-and-configuration/content/v/2.2/topics/proxy.html)
- Reverse proxy
- 기존 애플리케이션 수정 없이 인증 붙일 수 있는 것 같다
* Kerberos/SPNEGO SSO### 이슈
* 관리자 로그인이 매우 빨리 풀린다
* Keycloak User Groups Retrieve Strategy 중 `LOAD_GROUPS_BY_MEMBER_ATTRIBUTE_RECURSIVELY` 는 예제로 설정한 Samba 4.3에서 제대로 작동하지 않음 [이슈](https://bugzilla.samba.org/show_bug.cgi?id=10493)
* 프로비저닝 실패
- 네트워크, 타이밍 등 각종 이슈로 가끔 프로비저닝이 실패할 때가 있음. `vagrant provision VM명` 으로 재시도 하거나 날리고 새로 만들것.
* Vagrant 1.8.5에서 SSH 키로 VM 접속 문제 [vagrant 이슈 #7610](https://github.com/mitchellh/vagrant/pull/7611)
- `/opt/vagrant/embedded/gems/gems/vagrant-1.8.5/plugins/guests/linux/cap/public_key.rb` 에 [패치](https://github.com/mitchellh/vagrant/pull/7611/files#diff-13c7ed80ab881de1369e3b06c66745e8R57)## PWM
LDAP 계정 자가 관리 서비스
* [Homepage](https://github.com/pwm-project/pwm)
* 암호 변경
* 암호 재설정
* Helpdesk
* ...## 로컬 설정
Vagrant & Ansible 설치:
```
brew install ansible
brew cask install vagrant
```구동:
```
vagrant up
```VM 셸 진입
```
vagrant ssh VM 명
# ex) vagrant ssh idsvc
```/etc/hosts:
```
192.168.33.224 dc1.example.com
192.168.33.225 idsvc.example.com keycloak.example.com pwm.example.com
192.168.33.226 ci.example.com
```## Keycloak 설정
* Vagrant VM: `idsvc`
* URL: https://keycloak.example.com
### 관리 realm: master (기본값)
* 관리 콘솔: https://keycloak.example.com/admin/master/console
* Login: admin
* Password: admin### 주 realm: example
계정 관리 페이지: https://keycloak.example.com/realms/example/account
## PWM 설정
* Vagrant VM: `idsvc`
* URL: https://pwm.example.com
* Configuration Password: `admin`
* 그 외 계정은 AD와 동일## Samba 4 AD 설정
* Vagrant VM: `dc1`
* Domain: EXAMPLE.COM
* Login: Administrator
* Password: admin### 테스트 계정 목록
* `[email protected]` / `test`
* `[email protected]` / `test`
* `[email protected]` / `test`## 연동 예제: Jenkins
* URL: https://ci.example.com
* [SAML 플러그인](https://wiki.jenkins-ci.org/display/JENKINS/SAML+Plugin)으로 연동.
* Jenkins 자체 설정으로 그룹별로 권한 부여## 기타
### Export/Import:
[Server Administration Guide. Ch 16. Export and Import](https://keycloak.gitbooks.io/server-adminstration-guide/content/topics/export-import.html) 참조
```
/srv/keycloak/bin/standalone.sh -Dkeycloak.migration.action=export -Dkeycloak.migration.realmName=example -Dkeycloak.migration.provider=dir -Dkeycloak.migration.dir=/vagrant/shared/export
```___
* [Keycloak](http://www.keycloak.org/)