はじめに
はじめまして。あかこうです。
最近Ory Kratosを使っているのですが、
その備忘録をここに書きなぐっておきます。
本記事でまとめられているのは、以下の内容です。
- Ory Kratosをセルフホストする
- Ory KratosにGithubでSSOする
(※本番用のデプロイではないです。)
1. Ory Kratosをセルフホストする
以下のコマンドで、Ory Kratosをセルフデプロイできます。。
参考にした公式サイト
git clone https://github.com/ory/kratos
cd kratos
docker-compose -f quickstart.yml -f quickstart-standalone.yml up --build --force-recreate
うまく動けば、http://0.0.0.0:4455/ からアカウント登録・ログインなどの操作ができるはずです。
2. GitHub SSOの設定
次にGitHubでSSOする設定を書きます。
a. GitHubの設定
以下の流れでGitHub側を設定する。
- Githubにログインする
- GitHubのサイトにアクセスする。
-
New OAuth App
と書かれたボタンをクリックする。 - 各項目を適当に埋める。
ただし、Authorization callback URL
には以下のURLを設定する。http://127.0.0.1:4455/self-service/methods/oidc/callback/github
-
Client ID
を保管する。 -
Generate a new client secret
と書かれたボタンをクリックする。 -
Client secret
を安全に保管する。
b. Kratosの設定
以下の流れでKratos側を設定する。
-
以下の内容を
github.data-mapper.jsonnet
として保存する。local claims = std.extVar('claims'); { identity: { traits: { email: claims.email, // If email isn't set the Jsonnet snippet will fail with an error. }, }, }
-
github.data-mapper.jsonnet
をbase64化するbase64 -w 0 github.data-mapper.jsonnet # bG9jYWwgY2xhaW1zID0gc3RkLmV4dFZhcignY2xhaW1zJyk7Cgp7CiAgaWRlbnRpdHk6IHsKICAgIHRyYWl0czogewogICAgICBlbWFpbDogY2xhaW1zLmVtYWlsLCAvLyBJZiBlbWFpbCBpc24ndCBzZXQgdGhlIEpzb25uZXQgc25pcHBldCB3aWxsIGZhaWwgd2l0aCBhbiBlcnJvci4KICAgIH0sCiAgfSwKfQo=
-
./contrib/quickstart/kratos/email-password/kratos.yml
を開き、
以下のように修正する。version: v0.7.1-alpha.1 dsn: memory serve: public: base_url: http://127.0.0.1:4433/ cors: enabled: true admin: base_url: http://kratos:4434/ selfservice: default_browser_return_url: http://127.0.0.1:4455/ allowed_return_urls: - http://127.0.0.1:4455 methods: password: enabled: true oidc: config: providers: - id: github # this is `<provider-id>` in the Authorization callback URL. DO NOT CHANGE IT ONCE SET! provider: github # This defines the app type used for integration. Use 'github' for GitHub OAuth app. Use 'github-app' for GitHub App. client_id: <client_id> # 保管したClient IDを貼り付ける client_secret: <secret> # 保管したClient secretを貼り付ける mapper_url: "base64://<2.で作ったbase64>" # mapper_url: "base64://bG9jYWwgY2xhaW1zID0gc3RkLmV4dFZhcignY2xhaW1zJyk7Cgp7CiAgaWRlbnRpdHk6IHsKICAgIHRyYWl0czogewogICAgICBlbWFpbDogY2xhaW1zLmVtYWlsLCAvLyBJZiBlbWFpbCBpc24ndCBzZXQgdGhlIEpzb25uZXQgc25pcHBldCB3aWxsIGZhaWwgd2l0aCBhbiBlcnJvci4KICAgIH0sCiAgfSwKfQo=" # Alternatively, use an URL: scope: - user:email enabled: true flows: error: ui_url: http://127.0.0.1:4455/error settings: ui_url: http://127.0.0.1:4455/settings privileged_session_max_age: 15m recovery: enabled: true ui_url: http://127.0.0.1:4455/recovery verification: enabled: true ui_url: http://127.0.0.1:4455/verification after: default_browser_return_url: http://127.0.0.1:4455/ logout: after: default_browser_return_url: http://127.0.0.1:4455/login login: ui_url: http://127.0.0.1:4455/login lifespan: 10m registration: lifespan: 10m ui_url: http://127.0.0.1:4455/registration after: password: hooks: - hook: session oidc: hooks: - hook: session log: level: debug format: text leak_sensitive_values: true secrets: cookie: - PLEASE-CHANGE-ME-I-AM-VERY-INSECURE cipher: - 32-LONG-SECRET-NOT-SECURE-AT-ALL ciphers: algorithm: xchacha20-poly1305 hashers: algorithm: bcrypt bcrypt: cost: 8 identity: default_schema_id: default schemas: - id: default url: file:///etc/config/kratos/identity.schema.json courier: smtp: connection_uri: smtps://test:test@mailslurper:1025/?skip_ssl_verify=true
-
以下のコマンドでサーバを起動する
docker-compose -f quickstart.yml -f quickstart-standalone.yml up --build --force-recreate
うまく動けば、http://127.0.0.1:4455/login から、GitHubでSSOできるはずです。
まとめ
本記事では、以下の内容についてまとめました。
- Ory Kratosをセルフホストする
- Ory KratosにGithubでSSOする
Ory Kratos便利ですね!