6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SlackとKeycloakでSSO環境を構築する

Last updated at Posted at 2020-12-15

はじめに

SlackのプラスプランとEnterprise GridプランではSSOを有効にすると、IDP経由でSlackにアクセスできるようになります。
こちらのページを参考にしましたがそのままではうまくいかず、悪戦苦闘してなんとかSSOすることができました。
そこから得たSSO構築できるまでの手順を記述します。

環境情報

Slackプラン・・・Enterprise Grid
IDP・・・KeyCloak

KeyCloak側の設定

クライアント作成

Clientsにアクセスして表示された画面から「Create」をクリックすると以下の画面が表示されます。
b854c2a6-ab36-40f4-b089-0d62167af0ee.png

"Client ID"はhttps://slack.comとします。
値を入力したら「Save」をクリックします。

Clientの設定

以下の画面を参考にして設定してください。
0c1bf768-1fc0-4bc7-b435-2ec2ac5e9c3e_png__3840×3286_.png

  • "Valid Redirect UIs" には2つの値を設定します。
    • https://[your-slack-url]/
    • https://[your-slack-url]/*
  • “Assertion Consumer Service POST Binding URL” には “https://[your-slack-url]/sso/saml” を入力します
  • “Logout Service POST Binding URL” には “https://[your-slack-url]/sso/saml/logout” を入力します

値を入力したら「Save」をクリックします。

Client Scopeの設定

Client Scopeのタブに移動します。
初期はrole_listがアサインされています。
「Remove selected」をクリックして外します。
以下のようになればOKです。
305fc27e-ce42-411d-8327-b307e66d1981-960x199r.png

Mapperの追加

Mappersタブを選択すると以下の画面が表示されます。
6dc31805-e83f-4b38-9a9a-7c2e7995a568-960x114r.png
Mappersタブから「Add Builtin」をクリックすると以下の画面が表示されます。
df75c6e1-fb01-4a92-a63e-68bb1f078e94-960x151r.png
"X500 email" , "X500 givenName" , "X500 surname" にチェックを入れて「Add selected」をクリックします。
追加したMapperが表示されます。
b02f4286-a120-46de-b720-bd9f33cc7e41.png

それぞれを以下のように編集します。

1.email
“SAML Attribute Name” を “User.Email”に書き換えます。
7954c4aa-84e9-44a2-b8b2-7f25ac58c9da.png
書き換えたら「Save」をクリックします

2.givenName
“SAML Attribute Name” を “first_name”に書き換えます。
b1a894a5-f026-4ea5-9b91-4774b590cbb5.png
書き換えたら「Save」をクリックします。

3.surname
“SAML Attribute Name” を “last_name”に書き換えます。
889eb350-a2a8-4c01-ac2a-1b73f41bc1c6.png
書き換えたら「Save」をクリックします。

4.Username
Mappersの画面で「Create」をクリックし、以下のように設定します。
f582a3b3-0b84-4e14-b35b-70ac65280f7e.png
書き換えたら「Save」をクリックします。

Metadata取得

https://[keycloak-location]/auth/realms/[realm]/protocol/saml/descriptorにアクセスします。

表示されたファイルをローカルにclient-tailored-saml-idp-metadata.xmlなどの任意の名前で保存します。

Slack側の設定

Orgの管理画面からセキュリティ > SSO設定へ移動します。
f66fe7d8-df29-4b2d-bedc-7d3373463ca5_png__2336×1906_.png
「SSOを構成する」をクリックします。

  • “SAML 2.0 Endpoint (HTTP)” には "https://[kc-base-url]/auth/realms/[realm-name]/protol/saml" に設定します(メタデータ内のSingleSignOnServiceプロパティの"Location"フィールドにあります)
  • “Identity Provider Issuer” には "https://[kc-base-url]/auth/realms/[realm-name]" に設定します(メタデータ内の"EntityDescriptor"プロパティの"entityID"フィールドにあります)
  • "サービスプロバイダ発行者のURL" は https://slack.com とします
  • "公開(X.509)証明書" には "<ds:X509Certificate>" のフィールドの値を設定します
  • "AuthnContextClassRef" は "このバリューを送信しない" を選択します
  • "SAMLレスポンスの署名" は両方にチェックを入れます
    入力し終わると以下のようになります。

f6d50bba-4cb6-4730-92d4-15812d525e2d_png__1416×1798_.png
8368b08d-b215-4f3d-9d33-5c2d1a53e9df.png
「テスト設定」をクリックします。
KeyCloakのログイン画面が表示されるのでログインします。
設定が成功すると以下のような画面が表示されます。
6afad65f-c68b-4daa-8395-b8f08df07743_png__3830×1730_.png
同じ画面からSSOの環境設定が可能です。
組織のルールに合わせて変更できます。
b2e0a27f-9e03-4609-8673-69dc711edfd0_png__3820×1914_.png
ここまでで設定は完了です。ログインしてみましょう。

ログイン

ログイン確認用にSlackとKeyCloakのそれぞれに同一のメールアドレスのアカウントを準備しておきます。(メールアドレスが同じであれば自動的に紐付けられます)
アカウントが作成できたらブラウザからSlackのURL(https://[your-slack-url])にアクセスしてみましょう。
プライベートブラウザを使うのがおすすめです。
以下のような画面が表示されるはずです。
2cf7d20c-58a7-4727-8bf4-09b40b1947fd_png__3840×2338_.png
「Sign in with SAML」をクリックするとKeyCloakのログイン画面に遷移します。
79aee09d-9448-463d-96b1-a6b894214d86_png__3840×2338_.png
ログインが成功すると紐付いているアカウントが所属するワークスペースの画面が表示されました。
64d466c2-7584-46c0-8d7a-9101f93880e2_png__3840×2338_.png
これでSSOの設定は完了です。お疲れさまでした。

おまけ

おまけ1:ユーザーを無効にする

あるユーザーを無効にしてSSOできないようにしたいときの手順です。
KeyCloak側のUsers画面から無効にしたいユーザーを表示します。
"User Enabled"を"OFF"にします。
b20ae3c4-2c81-4b1b-96d0-ac377f7a65c5.png

変更できたら「Save」をクリックします。

Slackにアクセスしてログインしてみましょう。(セッションが残っている場合はログアウトしてください)
以下のように表示されログインできなくなりました。
db019d13-4c27-49e2-996a-5a38c337a126_png__3840×2338_.png

おまけ2:ユーザーを削除(解除)する

KeyCloakからユーザーを削除した場合、ログインはできなくなりますがSlack側も連動してユーザーが解除されることはありません。
ユーザーがログアウトしない限りはSlackの画面が見えてしまいますので、Slack側でもユーザーを解除する必要があります。
Orgの管理画面からメンバーディレクトリ > メンバーを開いて、該当のユーザーを見つけます。
ユーザーの右端の「…」をクリックし「解除する」をクリックします。
63852ffe-69ea-46dc-bf47-5a308d4f569d_png__3814×932_.png
以下のような確認画面が出ます。
02254e9e-f7a5-4aa3-8a68-e4a33eaa496d_png__1174×640_.png
「アカウントを解除する」をクリックすると解除されます。

解除されると該当ユーザーはすぐにSlackからログアウトされ、以下のような画面が表示されました。f07c8274-4e04-4987-8780-f13634ae6470.png
解除されたユーザーは解除済みユーザーとして登録されているため、すぐに復活させることができます。

おまけ3:セッションの有効期限を付ける

Orgの管理画面からセキュリティ > セキュリティの設定を開きます。
e1452979-d985-4ef9-8ec9-2b2360e9d502_png__3780×1592_.png
「セッションの有効期限」の右端にある「有効にする」をクリックします。
設定画面が出るので何時間セッションを維持させたいかを入力します。
e6b1cc1e-389c-49cf-9d77-333ac69e8651.png
「有効にする」をクリックで設定完了です。
3800c325-0b2e-4314-b481-b32b768e4384_png__3788×954_.png

参考ページ

6
0
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
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?