AQ Tech Blog

PassLogic を使ってみた(SAML 認証編)

作成者: yuta.minematsu|2024年05月28日

はじめに

クラウドインテグレーション部の峰松優太です。

本シリーズ記事では、PassLogic を利用して以下の 2 つを実現します。

  • SAML 認証連携による PassLogic 認証を利用した Microsoft 365 へのログイン
  • PassLogic for Windows Desktop による PassLogic 認証を利用した PC へのログオンおよび Microsoft 365 へのシームレスサインオン

PassLogic とは デバイスレス・ワンタイムパスワード を用いた認証プラットホームであり、パスロジ株式会社より提供されてます。

PassLogic 公式より、以下 2 つの記事が公開されています。

これらのシステムを実際に構築し、詰まった点や考慮すべきだと感じた点について紹介します。

なお、今回の全構築作業を以下 3 フェーズに分割しています。

本記事では、フェーズ 2 について記載します。

  • Microsoft Entra Connect による AD と Entra ID の同期
  • SAML 認証連携による PassLogic 認証を利用した Microsoft 365 へのログイン

Microsoft Entra Connect

Microsoft Entra Connect (旧 Azure AD Connect) を用いて AD と Entra ID を同期します。

Microsoft 公式ドキュメント に従い、Entra Connect を実施します。
今回は AD サーバに Entra Connect をダウンロードして実行し、OU "PassLogic" のみを同期対象としました。


Entra Connect 実施後、AD ユーザ ym に相当するユーザが Entra ID に追加されており、Microsoft 365 へのログインが可能になります。

ソースアンカー

Entra Connect の完了画面で、こんなことが書かれていますね。

Azure Active Directory (現 Entra ID) では AD 属性 mS-DS-ConsistencyGuid をソースアンカー属性として使用するように構成されています。

ソースアンカー (sourceAnchor) とは

  • AD と Entra ID で同一オブジェクトを一意に識別する
  • オブジェクト有効期間内では不変 (Immutable) であることから、Entra ID では ImmutableId とも呼ばれる
  • 同期対象が User の場合は mS-DS-ConsistencyGuid 属性がデフォルトで指定される
  • mS-DS-ConsistencyGuid 属性に値が設定されてない場合、objectGUID 属性の値が書き込まれる
  • フェデレーションの場合は UserPrincipalName 属性とともに ImmutableId を用いてユーザを識別し連携する

参考: Microsoft Entra Connect: 設計概念

フェーズ 1 の LDAP 認証連携時に objectGUID 属性値をマッピングしましたね。
これによって PassLogic ユーザは ImmutableId の情報を持っていることになり、Microsoft Entra とのフェデレーションを構成することができます。

補足

LDAP 認証連携時に objectGUID ではなく mS-DS-ConsistencyGuid 属性を指定した場合、PassLogic ユーザインタフェースでの AD 認証時にエラーが発生します。
おそらく AD 属性値の格納方式の違いにより、PassLogic が値を認識できないためであると考えられます。

※ 両者の実質的な値は同じです。Powershell で以下のコマンドを実行して確認できます。

# AD の属性値をエクスポート
ldifde `
-f attributes.txt `
-d {対象ユーザの distinguishedName} `
-l objectGUID,mS-DS-ConsistencyGuid

# Entra ID の ImmutableId を確認
Connect-MgGraph -Scopes "User.ReadWrite.All"

Get-MgUser `
-UserId {対象ユーザの UserPrincipalName} `
-Select OnPremisesImmutableId `
| fl OnPremisesImmutableId
注意

Entra Connect を使用せずに作成された Entra ID には ImmutableId の値は設定されません。
この場合は、ImmutableId に手動で値を設定する必要があります。

参考: ハードマッチによる Azure AD (Office 365) 上のユーザーをオンプレミス Active Directory ユーザーと紐付ける方法

既存の Entra テナントを用いた Entra Connect については以下をご覧ください。

参考: Microsoft Entra Connect: 既存のテナントがある場合

SAML 認証連携

PassLogic と Microsoft Entra の SAML 認証連携を設定します。


認証サーバ SAML 設定

SP 登録 (PassLogic)

運用管理ガイドに従い、Microsoft Entra の メタデータ を PassLogic サーバへ登録します。

項目 説明
No. リスト番号
プロバイダ 任意のサービス名
SAML タイプ   「SP initiated SSO」 or 「IdP initiated SSO」
NameID フォーマット サービスで指定されているフォーマット
UID タイプ 備考
ドメイン pltest.***
Recipient SAML 認証レスポンスの送信先 URL
Issuer https://{PassLogic サーバの FQDN or IP アドレス}
Audience SAML 認証レスポンス内の Audience 属性値
署名アルゴリズム SHA-1 or SHA-256
注意点
  • UID タイプにて objectGUID を指定します。
  • クラウド版では、PassLogic サーバの URI がエンタープライズ版とは異なります。
  • Microsoft Entra 側は署名アルゴリズム SHA-256 に対応しているため、PassLogic 側でも SHA-256 を指定します。(Microsoft Entra 側は最近まで SHA-1 のみ対応だったはず、、)

セキュリティを向上させるために SHA-1 アルゴリズムは非推奨です。 SHA-256 などのより安全なアルゴリズムを使用してください。 詳細については、こちらをご覧ください。

引用: シングルサインオンに SAML 2.0 ID プロバイダー (IdP) を使用する - 署名ブロック要件

※ SP のメタデータファイルをアップロードすることで、一部の値を自動的に入力できます。

証明書および秘密鍵の登録 (PassLogic)

SAML 認証連携用の証明書および秘密鍵を登録します。

今回は openssl コマンドで自己署名証明書を作成し使用しました。

参考: OpenSSL で SSL 自己証明書を発行する手順

以上で、PassLogic 側の設定は完了です。

Microsoft Entra フェデレーション設定

Microsoft 公式ドキュメント に従い、カスタムドメインを Microsoft 365 フェデレーションドメインとして構成します。

フェデレーションドメインは Powershell を用いて構成するため、Microsoft Graph PowerShell SDK をインストール してください。
(公式ドキュメントが最近更新され、MSOnline から Microsoft Graph PowerShell SDK に変更されています。)

MSOL / Azure AD PowerShell のライセンス割り当て関連「以外」のコマンドについて
ライセンス割り当てに関するコマンド以外(例: Connect-MsolService や Get-AzureADUser など)は、2024 年 3 月 30 日 に廃止が延期されました。

引用: MSOnline / AzureAD PowerShell から Graph PowerShell SDK への移行について 1_概要

# Microsoft 365 へ接続
Connect-MgGraph -Scopes "Domain.ReadWrite.All"

# 変数定義
$Domain = "pltest.***"
$LogOnUrl = "https://{PassLogic サーバの FQDN or IP Address}/ui/idp.php?target={SP登録で登録したプロバイダ}"
$LogOffUrl = "https://{PassLogic サーバの FQDN or IP Address}/ui/?mode=logout"
$IssueUri = "https://{PassLogic サーバの FQDN or IP Address}"
$Protocol = "saml"
$Cert = "{証明書の文字列}"
$FederatedIdpMfaBehavior = "enforceMfaByFederatedIdp"

# フェデレーションドメインの構成
New-MgDomainFederationConfiguration `
-DomainId $Domain `
-IssuerUri $IssueUri `
-PassiveSignInUri $LogOnUrl `
-PreferredAuthenticationProtocol $Protocol `
-SignOutUri $LogOffUrl `
-SigningCertificate $Cert `
-FederatedIdpMfaBehavior "enforceMfaByFederatedIdp"
注意点
  • クラウド版では、PassLogic サーバの URI がエンタープライズ版とは異なります。
  • PreferredAuthenticationProtocol オプションでは "saml" を指定する必要があります。("wsFed" では認証がうまくいきません。)
  • FederatedIdpMfaBehavior オプションを指定しないとエラーが出ます。("enforceMfaByFederatedIdp" である必要はありません。)

参考: federatedIdpMfaBehavior 値

以上で Microsoft Entra 側の設定も完了です。

動作確認

Microsoft 365 のログインページへアクセスします。
ユーザ名を入力すると PassLogic の認証画面に遷移します。

PassLogic 認証が成功すると Microsoft 365 のログインページに戻り Microsoft 365 へのログインが完了します。

以上で、PassLogic と Microsoft 365 の SAML 認証連携が完了しました。

まとめ

本記事では、Entra Connect による AD と Entra ID の同期と、SAML 認証連携による PassLogic 認証を介した Microsoft 365 へのログインを実装しました。

フェーズ 2 の要点は以下です。

  • Entra Connect で sourceAnchor に指定される属性値が Entra ID における ImmutableId となる。
  • フェデレーション構成のために ImmutableId 属性情報を PassLogic ユーザにマッピングする必要がある。
  • Microsoft Entra フェデレーション構成時のコマンドオプションを正しく指定する。

最後までお読みいただきありがとうございました。 次回の記事をお待ちください。

次回

  • PassLogic for Windows Desktop による Windows へのログオン
  • Microsoft 365 へのシームレスサインオン
  • PassClip

引用・参考

PassLogic Enterprise Edition Ver.5.0.0 運用管理ガイド (PassLogic 製品に同梱)

PassLogic

デバイスレス・ワンタイムパスワード

Office 365 と PassLogic を SAML 連携

Windows ログオン シームレスサインオン

Microsoft Entra Connect と Microsoft Entra Connect Health のインストール ロードマップ

Microsoft Entra Connect: 設計概念

ハードマッチによる Azure AD (Office 365) 上のユーザーをオンプレミス Active Directory ユーザーと紐付ける方法

Microsoft Entra Connect: 既存のテナントがある場合

シングル サインオンに SAML 2.0 ID プロバイダー (IdP) を使用する

Microsoft Graph PowerShell SDK をインストールする

MSOnline / AzureAD PowerShell から Graph PowerShell SDK への移行について 1_概要

federatedIdpMfaBehavior 値