봄 부팅 / 각도는 싱글 사인온 통합 Keycloak을 달성

계속하려면

Keycloak

Keycloak 인증 및 권한 부여로 알려진 최신 애플리케이션과 서비스를위한 오픈 소스 인증 및 액세스 관리를 제공합니다. Keycloak 지원 오픈 ID, OAuth는 2.0 및 SAML 2.0 프로토콜, 사용자 등록, 사용자 관리, 권한 관리 지원, 프록시 지원 OpenID는, SAML 2.0 IDP는 GitHub의, 링크드 인 및 기타 제 3 자 로그인을 지원 LDAP 및 Active Directory의 통합을 지원, 사용자 인증 프로세스를 지원 사용자 정의 사용자 인터페이스는 국제화를 지원합니다.

자바, C #을, 파이썬, 안드로이드, 아이폰 OS, 자바 스크립트를 지원 Keycloak은 SSO를 달성하기 위해 어댑터, 단지 작은 코드의 양과 구성을 사용하기 쉬운 제공, 다른 플랫폼이나 언어를 Nodejs.

라는 이름의 새로운 릴리스 Keycloak Quarkus 2019 년 말까지 계획 GraalVM Kurbernetes 기본 자바 및 오픈 JDK 핫스팟을위한 프레임 워크 특별히 맞춤은 공식적으로 발표했다.

설치

Keycloak는 공식 웹 사이트에서 다운로드, 제이보스 애플리케이션 서버에 내장 된 독립 실행 형 서버 배포의 압축 해제 후 실행을 시작하는 빈 / standalone.sh. H2 기본 데이터베이스, 당신은 다른 데이터베이스를 사용하여 구성을 수정할 수 있습니다. 독립형 클러스터 모드 도메인 클러스터 모드 시작 모드보다 구성은 공식 문서를 참조하십시오.
기본적으로 HTTP에서 로컬 사이트 : // localhost를 : 8080 / 인증 , 먼저 관리자 사용자 로그인을 만들어야합니다
봄 부팅 / 각도는 싱글 사인온 통합 Keycloak을 달성
직접 콘솔 관리자 로그인 HTTP를 : // localhost를 : 8080 / 인증 / 관리 / :
봄 부팅 / 각도는 싱글 사인온 통합 Keycloak을 달성

Realm

봄 부팅 / 각도는 싱글 사인온 통합 Keycloak을 달성
为保护不同的应用,通常创建不同的Realm,各Realm间的数据和配置是独立的。初始创建的Realm为Master,Master是最高级别的Realm。Master Realm内的admin用户(授予admin角色的用户)拥有查看和管理任何其它realm的权限。因此,不推荐使用master realm管理用户和应用,而应仅供超级管理员来创建和管理realm。
每个realm有专用的管理控制台,可以设置自已的管理员账号,比如接下来我们创建的heroes realm,控制台网址为http://localhost:8080/auth/admin/heroes/console 。
创建Heroes realm,点击左上角下拉菜单-》Add realm:
봄 부팅 / 각도는 싱글 사인온 통합 Keycloak을 달성
봄 부팅 / 각도는 싱글 사인온 통합 Keycloak을 달성
Login Tab中有多个可配置选项:用户注册、编辑用户名、忘记密码、记住我、验证email、使用email登录、需要SSL。
봄 부팅 / 각도는 싱글 사인온 통합 Keycloak을 달성
其中,Require SSL有三个选项:all requests、external requests、none,默认为external requests,在生产环境中应配置为all requests。

  • all requests 所有请求都需通过HTTPS访问
  • external requests localhost和私有IP不需通过HTTPS访问
  • none 任何客户端都不需HTTPS

Themes Tab可以配置界面主题、启用国际化:
봄 부팅 / 각도는 싱글 사인온 통합 Keycloak을 달성
Tokens Tab可以配置token签名算法、过期时间等。

Client

Client是realm中受信任的应用。
봄 부팅 / 각도는 싱글 사인온 통합 Keycloak을 달성
创建realm后自动创建以下client:

  • account 账户管理

봄 부팅 / 각도는 싱글 사인온 통합 Keycloak을 달성

  • admin-cli
  • broker
  • realm-management 预置了realm管理角色,创建realm管理员时需要分配这些角色
  • security-admin-console realm管理控制台

创建heroes client,点击Clients右上方的Create:
봄 부팅 / 각도는 싱글 사인온 통합 Keycloak을 달성
봄 부팅 / 각도는 싱글 사인온 통합 Keycloak을 달성
Client Protocol使用默认值openid-connect。Access Type有三个选项confidential、public、bearer-only,保持默认值public。confidential需要client secret,但我们将在web应用中使用此client,无法以安全的方式传输secret,必须使用public client,只要严格使用HTTPS,可以保证安全。Valid Redirect URIs输入 http://localhost:4200/* 。

认证流程:

  • Standard Flow 即OAuth 2.0规范中的Authorization Code Flow,推荐使用的认证流程,安全性高。keycloak验证用户后附加一次性、临时的Authorization Code重定向到浏览器,浏览器凭此Code与keycloak交换token(identity、access和refresh token)
  • Implicit Flow keycloak验证用户后直接返回identity和access token
  • Direct Access Grants REST client获取token的方式,使用HTTP Post请求,响应结果包含access和refresh token

调用示例,请求地址:http://localhost:8080/auth/realms/heroes/protocol/openid-connect/token
봄 부팅 / 각도는 싱글 사인온 통합 Keycloak을 달성

Client Scope

Client Scope定义了协议映射关系,keycloak预定义了一些Scope,每个client会自动继承,这样就不必在client内重复定义mapper了。Client Scope分为default和optional两种, default scope会自动生效,optional scope指定使用时才生效。
봄 부팅 / 각도는 싱글 사인온 통합 Keycloak을 달성
启用optional scope需要使用scope参数:
봄 부팅 / 각도는 싱글 사인온 통합 Keycloak을 달성
启用相应scope或配置mapper后,才能在client的token或userinfo中显示相应的属性。比如,上图中我们启用了phone scope,phone mapper中定义了phone number:
봄 부팅 / 각도는 싱글 사인온 통합 Keycloak을 달성
如果用户属性中定义了phoneNumber,在token中则会显示phone_number,可以在heroes client -> Client Scopes -> Evaluate查看效果:
봄 부팅 / 각도는 싱글 사인온 통합 Keycloak을 달성

Role、Group、User

Role分为两种级别:Realm、Client,默认Realm Role:offline_access、uma_authorization。
OpenID规范中定义了offline access,用户登录获得offline token,当用户退出后offline token仍可使用。在很多场景中是非常有用的,比如每日离线备份数据。要获得offline token除需offline_access角色外,还需指定offline_access Scope。默认,offline token不会过期,但需每30天刷新一次。offline token可以撤销:
봄 부팅 / 각도는 싱글 사인온 통합 Keycloak을 달성
uma_authorization User-Managed Access

Authentication

Identity Provider

ADFS

Salesforce

Spring Boot

Angular

참조 문서

Keycloak
봄 부팅과 Keycloak 사용에 대한 퀵 가이드
AD FS 문서
봄 부팅 및 OAuth2를
하여 OAuth 2.0 로그인 샘플
Keycloak 봄 부팅 및 OAuth2를
봄 SAML
Springboot OAuth2를 서버搭建OAuth2를认证服务
어떻게 설정 MS AD FS Keycloak의 중개 ID 공급자로 3.0

추천

출처blog.51cto.com/7308310/2446368