昨年の冬に MacBook Pro を買い換えたことで 1 台サーバーとしておいておける Mac ができたので、iOS アプリのビルド用に Jenkins 2 を構築して設置しました。
インターネットに公開するものの、さすがに認証がないとつらい、だけど BASIC 認証は Firefox がうまく覚えてくれなくなってるっぽいので避けたいと思い、別の認証を試すことにしました。
ちょうど、Azure AD の存在を思い出したので、連携させて認証できるようにしてみました。
以下 Jenkins を設置した場所を [JENKINS_URL] と表記します。
グループの作成
Azure AD 上に Jenkins 管理者と Jenkins 利用者という形でグループを作成しておきます。(Azure AD 「ユーザーとグループ」の中にあります)

各グループのオブジェクト ID が後で必要になるので控えておきます。

アプリの登録
Jenkins をアプリとして Azure AD に登録します。

作成のダイアログのサインオンURLに [JENKINS_URL]/securityRealm/finishLogin と入力します。

アプリが登録できたら開いて「マニフェスト」を選択し、groupMembershipClaims を null から "SecurityGroup" に変更します。

アプリの一覧に戻り「エンドポイント」というボタンをクリックして出てきた中にある「フェデレーションメタデータドキュメント」というURLからXMLをダウンロードしておきます。

最後に Azure AD のプロパティにある「ディレクトリ ID」をコピーしておきます。

Jenkins 側の設定
Jenkins の設定→グローバルセキュリティの設定を開きます。
ユーザー情報の選択を SAML 2.0 にし、以下のように SAML の設定を入力します。

| キー | 値 |
|---|---|
| IdP Metadata | フェデレーションメタデータドキュメントの内容を貼り付ける |
| Display Name Attribute | http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname |
| Group Attribute | http://schemas.microsoft.com/ws/2008/06/identity/claims/groups |
| Username Attribute | http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name |
| Email Attribute | http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress |
| Logout URL | https://login.windows.net/[ディレクトリID]/oauth2/logout?post_logout_redirect_uri=[JENKINS_URL] |
その次の「権限管理」では「グループの作成」でメモしておいたグループのオブジェクトIDを指定し、付与したい権限を選択します。

設定に失敗した場合は
設定に失敗して Jenkins にログインできなくなった場合、一度 Jenkins のプロセスを停止し、JENKINS_HOME にある config.xml を開いて authorizationStrategy タグを以下のようにすると認証が無効になり設定をやり直すことができます。
<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>