LoginSignup
1
1

More than 1 year has passed since last update.

Ory Kratosをセルフデプロイ&SSO設定(GitHub)

Last updated at Posted at 2022-10-03

はじめに

はじめまして。あかこうです。

最近Ory Kratosを使っているのですが、
その備忘録をここに書きなぐっておきます。

本記事でまとめられているのは、以下の内容です。

  1. Ory Kratosをセルフホストする
  2. 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側を設定する。

  1. Githubにログインする
  2. GitHubのサイトにアクセスする。
  3. New OAuth Appと書かれたボタンをクリックする。
  4. 各項目を適当に埋める。
    ただし、Authorization callback URLには以下のURLを設定する。

    http://127.0.0.1:4455/self-service/methods/oidc/callback/github

  5. Client IDを保管する。
  6. Generate a new client secretと書かれたボタンをクリックする。
  7. Client secretを安全に保管する。

b. Kratosの設定

以下の流れでKratos側を設定する。

  1. 以下の内容を 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.
        },
      },
    }
    
  2. github.data-mapper.jsonnet をbase64化する

    base64 -w 0 github.data-mapper.jsonnet
    # bG9jYWwgY2xhaW1zID0gc3RkLmV4dFZhcignY2xhaW1zJyk7Cgp7CiAgaWRlbnRpdHk6IHsKICAgIHRyYWl0czogewogICAgICBlbWFpbDogY2xhaW1zLmVtYWlsLCAvLyBJZiBlbWFpbCBpc24ndCBzZXQgdGhlIEpzb25uZXQgc25pcHBldCB3aWxsIGZhaWwgd2l0aCBhbiBlcnJvci4KICAgIH0sCiAgfSwKfQo=
    
  3. ./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
    
    
  4. 以下のコマンドでサーバを起動する

    docker-compose -f quickstart.yml -f quickstart-standalone.yml up --build --force-recreate
    

うまく動けば、http://127.0.0.1:4455/login から、GitHubでSSOできるはずです。

まとめ

本記事では、以下の内容についてまとめました。

  1. Ory Kratosをセルフホストする
  2. Ory KratosにGithubでSSOする

Ory Kratos便利ですね!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1