Azure ADを使ってSlackにSSOするときに、いろいろハマってしまった経験をせっかくなので残しておきます。
Azure ADのガイドだけだと全然設定できなかったので…
#利用したプラン
・Azure AD P2(Enterprise Mobility+Security E5)
・Slack Pro Plus
#環境の特性
- E-mailは、O365のExchangeOnlineではなく、GSuiteを使っていたのでAzure ADのmail属性はnull
- どうもAzure ADのmail属性は、Azure ADと同じテナント内のExchange Onlineをセットアップしないと入らないようです
- 実際にPowershellでオブジェクトの属性を丸っと引っこ抜いたらnullでした
#セットアップ時のハマりどころ
URLの設定や証明書のアップロードは、Azure ADのSlackセットアップガイド通りで問題ないのですが…
###ハマりどころ1つ目:SlackでSSO設定が保存できない
Slack側でSSO設定を保存しようとすると、「SSO が有効化されていません
SAML レスポンスに必要な email属性が見当たりません。お使いのAzure設定を確認してください。」というエラーメッセージが出現。
原因:Slack側で必須としているemail属性がAzure ADのClaimに必須情報として登録されていなかった
対策:email属性をAzure ADのClaimに必須情報として登録する
SlackではNameID以外にメールアドレスも必須情報として必要としていて、これが設定されていないとAzure ADとの信頼構築時にエラーになってしまうのです。
####Step2:「User.Email」をクレームに追加する
- 名前にUser.Emailと入力する
- 名前空間は空欄でOK
- ソース属性は、お使いの環境でEmailが保存されている属性を選択する
- うちの場合は、ユーザー名にメールアドレスが設定されているので、userprincipalnameを選択
####Step3:Slackの管理画面で再度設定を保存する
これで保存できるはず。
###ハマりどころ2つ目:Azure ADの認証画面でエラー
SSOを使ってSlackにログインして、Azure AD側の認証画面でエラーコードAADSTS75011
が出る(ごめんなさいスクショわすれました )。
原因:Slack側のRequestedAuthnContext
で、PasswordProtectedTr ansport
の指定があった
対策:RequestedAuthnContext
を送らないように設定を変更した
RequestedAuthnContext
に含まれる情報は、SAMLの仕様で定義されているもので、Service Provicer(今回はSlack)がIdentity Provider(Azure AD)に認証方法を指定するための情報なのです。
Azure ADは、RequestedAuthnContext
に対応しているため、今回のようにPasswordProtectedTransport
の指定があれば、パスワード入力をAzure AD側で行わせることで何も問題はないです。ですが、今回SSOを構築した環境ではすでにWindows Hello for Businessをセットアップ済みでパスワード以外の方法(Windows Hello for Business)によってアカウントが認証されてしまっていたがためにSlack側の要求に答えられなかったようです。
今回は、 RequestedAuthnContext
が省略されていてもAzure ADが動作するのと、
SP側から認証方法を指定しなくてもIdPであるAzure AD側でガッチリ認証できるので送信しないことにしました。
以下設定です。
####Step1:SlackのSSO設定にあるAuthnContextClassRefの設定を変更する
入力欄をクリックするとプルダウンメニューが出現するので、「このバリューは送信しない」をクリックします。
######※蛇足1
RequestedAuthnContext
を送らないSPは結構あるようで、SalesforceやGSuiteも送っていないようです。SPの認証がショボいのでIdPでガッチリ認証しますってことなので、SPからわざわざ指定する必要もないのかもしれませんね。