2021localYouserオンプレミス-クラウド-技術のお話し丁度SAMLを勉強中す。ADをDeepdiveしまくってる状況でして、その課程でSAMLが面白いなーと思い始めて一人でズブズブ沼に潜ってます。今回実装までこぎ着けたのがいくつか出てきたのでそれをかこうかなと思いまして。その内一つがMastodonです。見た目ちょいと昔のTwitterっぽいかんじの連合SNSです。Pubと言うものを使ってるんですが、この同じプロトコルを使用しているSNSサーバと連携して、複数サーバのタイムラインなんかが組めたりします。SNSサーバと連携できると言うことで、生きたトラフィックを自前サーバに流して遊べるという所が魅力でして、技術的な意味で暫くかなりどハマりしました。今でもこんな構成で稼働中です。我が家のMastodonサーバの構成SAMLとはシングルサインオンと言うものがあります。これは、認証情報を一元管理する仕組みの一つで、1つのアカウントで複数のサービスを横断するが如くアクセスできるようになるものを指しています。構成しなくても信頼の出来るよその認証サービスにその認証処理を委託することによって、セキュリティにツヨツヨな認証をさせることが可能になり、セキュリティレベルの向上、サインイン操作の省力化ができたりするので、最近だーいぶ流行ってきております。SAMLにおける認証シーケンスとしては以下の図のような感じです。SAMLは上図のような流れで認証を行う動きをする。ADを通じて認証を行えるように設定変更を行いました。ADでやるのは、以下のようなことです。設定ここでは、SPの設定をしていきます。今回、以下の設定を実装します(同値設定をMastodonに対しても行います。URL)https://interact.bluecore.net/auth/auth/saml/callback設定を終えたら保存します。2ユーザー属性とクレームここは、一度丸々設定を削除して新しく作り直します。今回私は以下のクレームルールを作成しました。属性:user.userprincipalname設定完了したら保存します。署名証明書Base64形式のファイルをダウンロードリンクをクリックしてダウンロードします。ダウンロードした証明書データをテキストエディタで開き、改行を全て削除してください。1行につなげた状態でMastodonには実装します。4アプリのセットアップ(パラメータの入手)ログインURLに書かれているURLをコピーしてテキストエディタへ貼り付けるなどしてください。ユーザの割り当てエンタープライズアプリケーション画面に戻り、「ユーザの割り当て」へ移動します。そこで自分のアカウントを試したければそのユーザを割り当ててください。パラメータを追加します。Mastodonにある環境変数の追加を行います。サービス再起動すれば良いとは思うんですが、今回色々面倒だったのでサーバを再起動しました。何もユーザ名・パスワードを入れずにSAMLボタンをクリックします。ADにログインしてない場合は、MicrosoftのAzureADへのログオンプロンプトが表示されますので、そこで認証を行います。ADにログオンしている環境ではSAMLボタンをクリックしたらすぐにMastodonのおなじみの画面が表示され、アクセスできるようになります。ADへ委任した状態となり、サインインをすることによってそのユーザ情報がMastodonへ引き渡されます。その引き渡し情報は2にて設定したクレームルールという設定に従っています。今回の設定では、基本的にメールアドレスの連携しか行っていません。私の場合、メールアドレスがユーザアカウントに設定しているメールアドレスと一致したため、従来使用している私のアカウント賭してログオンすることが出来ました。Responseと言うデータを受領しており、「認証が成功したと言うこと」「私のEmailアドレスは○○と言うこと」「正式にMSから払い出された情報であることを示す証明書と署名情報」がそこには記載されています。証明書の照合を行い確かに認証したことをMastodonは確認し、引き渡されたメールアドレス情報を素に、要素が合致する私のアカウントと紐つけて無事ログインできた・・・ということになります。これにより、SPであるMasotdonは自身のサーバにパスワード情報をやり取りする必要なく、その情報のやり取りをよりセキュリティのしっかりしたIdPに限定させることでよりセキュリティが向上するというわけでして。技術を理解すると視野が広がる今回これを久々に体感することが出来ましたヤタ───ヽ(・∀・)ノ───!!没頭できるから楽しいし、OASISのドキュメントをDeeplで翻訳しながらではありますが読んでいくと仕様を読むことの面白さをすこしだけ思いだしたような気がします。仕事で拾ったキーワードとかちょっと心に留め置き、こうしてチャレンジしてみるのも面白いのではないかな?とか。便利に扱える機能だというのが良く分かったので、もう少し深く掘り下げていこうと思っております。