Keycloakとは
- KeycloakはWebアプリケーションおよびRESTfulなWebサービスのためのシングル・サインオン・ソリューションです。
- Keycloakの目的はセキュリティーをシンプルに実現し、アプリケーション開発者が組織内にデプロイしたアプリケーションやサービスを保護することです。
- ログイン、登録、システム管理、アカウント管理のための、カスタマイズ可能なユーザー・インターフェイスを提供しています
機能
- ブラウザー・アプリケーションに対するシングル・サインオンとシングル・サインアウト。
- OpenID Connectのサポート。 OAuth 2.0のサポート。 SAMLのサポート。
- ユーザー、ロール、ロール・マッピング、クライアントと設定を一元管理するための管理コンソール。
- ユーザーに自分達のアカウントを一元管理することを許可するためのアカウント管理コンソール。
関連情報
- ホームページ
- Docker Tags
- ドキュメント(英語)
- API
基本概念
レルム
- Masterレルム
- 管理用、開発用
- Masterレルムがシステム初期化の時に作成される
- そのほかのレルム
- Masterレルムの中に作成されているadminユーザで、そのほかのレルムを作成する
- アプリケーション用のクライアントは、そのほかのレルムにしか作成されない
- ユーザ、グループを追加する
レルム間の関係
Relying Party(RP)対応
オンプレ
ツール
- Lua resty openid
- https://github.com/zmartzone/lua-resty-openidc
- OpenID Connect Relying Party and OAuth 2.0 Resource Server implementation in Lua for NGINX / OpenResty
- プログラミング言語: Lua
- パッケージ管理ツール
nginx設定
init_by_lua_block {
require "resty.session".init({
remember = true,
store_metadata = true,
secret = "",
secret_fallbacks = {
"",
"",
},
storage = "redis",
redis = {
host = "redis",
port = "6379",
prefix = "sessions",
},
})
}
server {
listen 80;
location / {
set $pass '';
access_by_lua_file /usr/local/openresty/main.lua;
proxy_pass $pass;
}
RP実装 main.lua
local opts = {
ssl_verify = "no",
redirect_uri = "http://localhost/cb",
discovery = "http://../.well-known/openid-configuration",
cient_id = "",
client_secret = ""
}
local res, err, a, session = require("resty.openidc").authenticate(opts)
local jwt = require "resty.jwt"
local jwt_token = jwt:sign(
"secret_key_",
{
header={typ="JWT", alg="HS256"},
payload=res.user
}
)
ngx.req.set_header("X-RICOH-OIDC-TOKEN", jwt_token)
ngx.var.pass="http://fastapi:3000/"
AWS ALB
まとめ
- keycloakは、優秀なID管理やアクセス管理(IAM:Identity and Access Management)を実現するオープンソースソフトウェア(OSS)
- レルムの概念の理解
- Lua言語でRPを実装してみた

