LoginSignup
11
12

More than 1 year has passed since last update.

Azure AD を IdP として利用する

Posted at

はじめに

  • 本記事では、Microsoft 社の「Azure Active Directory」(以後、Azure AD) を SAML の IdP として利用する際の簡易な設定方法を記載します。

SAML とは

  • 「SAML (Security Assertion Markup Language) 」は、異なるドメイン間で認証情報を連携することで、「フェデレーション」方式の「シングルサインオン」(以後、SSO) を実現する標準仕様です。
  • OASIS が制定し、2.0 が最新バージョンです。
  • また、SAML では「Assertion(アサーション)」と呼ばれる、XML 形式のメッセージを扱います。
    • Assertion では、ユーザの認証情報、属性、認可されたユーザの権限といった情報を含みます。

シングルサインオンとは

  • 1度のユーザ認証で複数サービスを利用できるようにする仕組みを「シングルサインオン」(以後、SSO) と呼びます。
  • 近年は、異なるドメイン間の複数クラウドサービスに対して SSO をするために、ユーザの認証情報を連携する「フェデレーション」方式が利用されています。
    • なお、フェデレーション方式では、SAML 以外に「Open ID Connect」といった標準仕様が利用されています。

SP、IdP とは

  • SAML では、認証情報を要求するサービスを「Service Provider」(以後、SP)、認証を行うプロバイダーを「Identity Provider」(以後、IdP) と呼びます。
  • SAML の認証フローでは、IdP のユーザ認証情報を、各 SP に連携することでシングルサインオンを実現します。
  • また、以下の2種類のフローがあります。

    • 「Idp-Initiated」
      • ユーザが 最初に Idp に接続するフロー
        • IdP でユーザを認証し、SP への接続時に認証情報を連携する。
    • 「SP-Initiated」
      • ユーザが 最初に SP に接続するフロー
        • ユーザが SP に接続後、リダイレクト先の IdP でユーザを認証する。その後、認証情報を SP に連携する。

IdP-initiated.JPG
SP-initiated.JPG

metadata とは

  • SAML 認証を行う上で、各パーティー(IdP、SP)の情報を XML ベースの スキーマファイルに定義します。このスキーマファイルを「metadata」と呼びます。
  • また、各パーティーの「metadata」を交換することで、信頼関係を構築します。
  • なお、「metadata」では、以下の情報等が定義されます。
    • 各パーティーのエンドポイント
    • Binding
      • HTTP 通信時にメッセージをどのように送信するかの定義。代表例として以下がある。
        • HTTP Redirect Binding
        • HTTP POST Binding
    • entity ID
      • 各パーティの識別子。
    • Name ID Format
      • 認証ユーザの識別子(Name ID)に対するデータフォーマット。

Azure AD を IdP として利用する

以下では、Azure AD を IdP として利用し、SAML 認証する際の設定イメージを記載します。

Azure AD 上の設定

SP の構成例

例として、SP が以下の構成とします。

種類 URL 備考
ログイン URL https://saml.ex.com/sp ユーザが SP にアクセスする際の URL
応答 URL(Assertion Consumer Service URL) https://saml.ex.com/sp/response IdP の認証情報を連携する、SP のリクエスト先 URL を指定します。

アプリケーションの作成

Azure AD の「エンタープライズアプリケーション」で以下メニューより、アプリケーションを作成します。なお、SP は、ギャラリーにないアプリケーションを想定しています。

  • 「新しいアプリケーション」
    • 「独自のアプリケーションの作成」

ユーザの割り当て

作成したアプリケーションで、以下メニューから SAML 認証する、Azure AD ユーザを割り当てます。なお、利用している Azure AD のプラン次第では、グループ単位での割り当ても可能です。

  • ユーザーとグループ

SAML 構成の設定

SAML の構成情報を設定します。

  1. 対象メニューを開きます。
    • 「シングルサインオン」
      • シングル サインオン方式の選択
        • SAML
  2. 「基本的な SAML 構成」を設定します。今回は必須項目のみを対象とします。
    • 識別子 (エンティティ ID)
      • SP の識別子を設定します。例えば、SP の ログイン URL とします。
    • 応答 URL
      • IdP のユーザ認証情報を連携する、SP の応答 URL を指定します。
  3. 「ユーザー属性とクレーム」で、対象ユーザの識別子(NameID)等を必要に応じて設定します。今回は、デフォルトのままとします。

    • デフォルトでは、Name ID Format では「電子メールアドレス(emailAddress)」が指定されています。
    • また、Name ID として、Azure AD ユーザの「userPrincipalName」の属性値を参照します。
  4. 「SAML 署名証明書」から SP 側に配置する証明書を取得できます。

    • SP で、IdP から送信される SAML Assertion(SAML Response)の署名を検証するための証明書を取得できます。
  5. 「【アプリケーション名】のセットアップ」を参照し、SP 側で信頼関係を構築する IdP の情報を登録する際に利用します。

    • IdP のログイン URL、識別子(entity ID)、ログアウト URL が表示されます。
  6. 「【アプリケーション名】でシングル サインオンをTest」では、SAML 認証時の動作をテストできます。

SAML 認証の実行例(SP-initiated)

以下では、SP-initiated による SAML 認証の動作イメージを記載しています。
また、SAML Response のイメージは、ブラウザの拡張機能「SAML-tracer」の参照結果をもとにしています。

  1. SP の ログイン URL(例. https://saml.ex.com )にアクセスします。
  2. IdP である Azure AD にリダイレクトされ、ユーザ認証画面が表示されます。
    IdP.JPG

  3. ユーザ認証後は、IdP から SP の 応答 URL (例. https://saml.ex.com/sp/response )に転送されます。また、以下のような SAML Reponse を送信しています。

SAML Reponse(イメージ)
<samlp:Response ID="..." Version="2.0" IssueInstant="..." Destination="【SP の応答 URL】" InResponseTo="..." xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
  <Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">【IdP の entity ID】</Issuer>
  <samlp:Status>
    <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
  </samlp:Status>
  <Assertion ID="..." IssueInstant="..." Version="2.0" xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
    <Issuer>【IdP の entity ID】</Issuer>
    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
    ...
    </Signature>
    <Subject>
      <NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">【ユーザの Name ID (例.userPrincipalName)】</NameID>
      <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
        <SubjectConfirmationData InResponseTo="..." NotOnOrAfter="..." Recipient="【SP の応答 URL】" />
      </SubjectConfirmation>
    </Subject>
    ...
    <AttributeStatement>
    ...
    </AttributeStatement>
    ...
  </Assertion>
</samlp:Response>


4. SP で SAML Response の検証後に、ユーザがサービスを利用できます。

参考情報

11
12
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
11
12