Azure AD で フェデレーション未対応の Web アプリと SSO を構成する (Password-based Single Sign-On)


こんにちは。

これまで、この機能が好きになれず、あまり触れてこなかったのですが、ご質問をいただくので以下に記載しておきます。

 

Password-based Single Sign-On とは (おさらい)

Azure AD の Google Apps (SaaS) 連携」で解説したように、既存の SaaS アプリとの Single Sign-On (SSO) では、Password-based single sign-onFederation-based single sign-on が提供されています。

例えば、SAML を使って SaaS アプリと Azure AD をつなぐことで、Azure AD (Azure Active Directory) でログインをおこなって、そのアイデンティティで GMail (SaaS アプリ) を使用することが可能です。こうした、いわゆる SAML などの標準プロトコルを使った連携は後者です。

これに対し、本日解説する Password-based single sign-on では、Azure AD にログインした後で、Browser の Plug-in などを使って、SaaS アプリの Sign-In (Login) UI の username と password の入力欄に値を設定してログインします。
Salesforce、Google、Kintone などのように SAML による Custom IdP に対応している SaaS アプリでは、Federation-based SSO のほうが もちろんエレガントです。しかし、この Password-based SSO を使うと、未対応のアプリ (Facebook など) でも仮想的な Single Sign-On 体験が得られるというメリットがあります。(実際、主要な 50 以上の SaaS アプリケーションでは Federation-based SSO に対応していますが、その他はすべて Password-based SSO のみです。)
なお、後述するように、Custom Application でも この Password-based SSO が使えるようになりました ので、SAML や OpenID などの対応がむずかしい企業固有のレガシーアプリなどでも、この SSO の方式が使用可能です。(ただし、まだ Preview です。)

一方、Password-based SSO は、SAML や OpenID のように、Provider (IdP) と SaaS アプリの間の決められたプロトコルによる連携  (両想いな連携) ではなく、いわば Azure AD からの強引な連携 (片想いな連携) のため、いくつか "ほころび" も出てきます。

例えば、SAML (Federation-based SSO) を使用した場合は、SaaS アプリの URL に直接アクセスした際 (または、ログイン画面でフェデレーションされているユーザー ID を入力した際) に、アプリが判断して自動的に Azure AD にリダイレクトしてくれます。しかし、Password-based SSO では SaaS アプリ側は Azure AD の事はいっさい知らず、リダイレクトもおこなわれません。
このため、Azure AD の Password-based SSO では、通常は、Access Panel (https://account.activedirectory.windowsazure.com/applications)  という画面を経由して SaaS アプリにログインする仕様になっています。
なお、最新の Azure AD では、この点を解決するため、直接アプリにログインできる独自の URL も提供しています。(この Azure AD が提供する URL をブラウザーの [お気に入り] に登録することで、ログイン画面が表示され、SaaS アプリに直接リダイレクトされます。)

また、iOS や Android などの Mobile からの利用でも同じような問題が生じます。このため、Azure AD では「My Apps」という専用のモバイル アプリ (iOS 版, Android 版) を提供し、この点を解決しています。

さらに、Plug-in を使っているため、利用ブラウザーの制限も生じます。(現在、Internet Explorer 8 以上か、Chrome、Firefox のみで使用可能です。企業内のポリシーでプラグインのインストールが許可されていない場合なども使用できません。)

加えて、SaaS アプリのログイン画面の UI が予告なしに変わった場合にも動作しなくなる危険があるでしょう。

このように、いくつかデメリットがある点も理解した上で、Password-based SSO を使用してください。

 

Custom Application を使った構成

先日のアップデートで、カスタム アプリについても Password-based SSO が使用できるようになりました。そこで、今回は簡単なアプリを使って、実際の動きを見てみたいと思います。

まず、Azure AD と Web SSO を構成する SaaS アプリを構築しますが、今回は以下のような簡単な PHP アプリのサンプルと仮定します。(なお、下記で、username や password などの id は必ず設定しておいてください。このあと、ここで設定された id を元に、入力の自動化を構成します。)

<?php
$username = $_POST['username'];
$password = $_POST['password'];
$test = $_POST['test'];
?>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>SSO Test Page</title>
</head>
<body>
<? if($username) { ?>
  <table border="1">
    <tr>
      <td>Username</td>
      <td><?=$username;?></td>
    </tr>
    <tr>
      <td>Password</td>
      <td><?=$password;?></td>
    </tr>
  </table>
<?} else {?>
  <form name="login_form" id="login_form" action="login.php" method="POST" role="form">
    <div>
    <label>E-Mail</label>
    <input type="text" id="username" name="username">
    </div>
    <div>
    <label>Password</label>
    <input type="password" id="password" name="password">
    </div>
    <div>
    <label>Test</label>
    <input type="text" id="test" name="test">
    </div>
    <button type="submit" id="submit" name="submit">Login</button>
  </form>
<?}?>
</body>
</html>

このサンプルは、下図のような簡単な UI を持つログイン画面で、E-Mail (username) と Password を入力してログインをおこなうと、下図の通り入力された結果を表示する最小限のテスト用アプリです。

 

つぎに、このアプリを Azure AD (Azure Active Directory) に登録します。

Azure Management Portal (https://manage.windowsazure.com) で、Active Directory の [Applications] タブを選択して [Add] ボタンを押します。
今回、カスタム アプリですが、最初のウィザードでは [Add an applicatoin from gallery] を選択します。(下図)

つぎに表示されるウィザード (下図) で、左のカテゴリーから [CUSTOM] を選択し、[Add an unlisted application my organization is using] を選択して、アプリの名前 (任意) を右に入力します。

追加されたアプリケーションの [Dashboard] を選択すると下図の通り表示されますので、まず、[Configure single sign-on] をクリックして構成を開始します。

表示されるウィザードで、[Password Single Sign-On] を選択して次に進みます。

つぎに表示されるウィザードで、[SIGN ON URL] に、上記のカスタム アプリ (今回の場合は PHP アプリ) の URL を入力します。

注意 : 現時点では、Azure Web App の https (SSL) で接続すると NG みたいなので、http (Non-SSL) を使ってお試しください。

すると、上記の HTML の id 要素を元に、入力内容の一覧が表示されます (下図参照)。そこで、今回は、username、password のみを選択して完了します。

なお、上記 PHP アプリで、もし username と password の入力欄しかない場合には (test の入力欄がない場合は)、この一覧は表示されず、自動的に username と password が選択されます。(今回はテスト目的で、test という入力欄を追加しています。)

以上で構成は完了です。
さいごに、[Assign users] をクリックして、このアプリを使えるユーザーを選択します。(Azure Portal のログインで使用している Microsoft Account は不可です。***.onmicrosoft.com などの組織アカウントを選択してください。)

User の Assign の際、下図のように [I want to enter <app name> credentials on behalf of the user] を選択して username、password を入力すると、このユーザーが、Access Panel から この SaaS アプリ (今回の場合、上記の PHP アプリ) にアクセスする際に、ここで入力した username と password を使ってログインします。(このあと、動作を確認してみましょう。)

また、上図の [I want to enter <app name> credentials on behalf of the user] を選択せずに User を Assign した場合、ユーザーがはじめて Sign-In をおこなった際に下図のような画面が表示されます。ここに、ユーザー自身が SaaS アプリ (PHP アプリ) の username / password を入力することで、以降、設定した username / password でログインされます。

 

動作の確認

では、動作を確認してみましょう。

下記の Access Panel に接続し、上記で Assign した User で (Azure AD に) Login をおこなってください。

https://account.activedirectory.windowsazure.com/applications

Login すると、下図の通り、Access Panel に上記アプリ (PHP アプリ) のリンクが表示されます。

アプリをクリックすると、PHP アプリの username, password の入力欄 (input タグ) に、上記の User Assign 時に入力した username, password が自動入力されて Login ボタン (submit ボタン) が押され、下図の通り、結果が表示されるはずです。

なお、初回アクセス時には、Password-based SSO の Plug-in (Extension) のインストールを促されるので、指示に従ってインストールしてください。

 

前述の通り あまりエレガントな SSO ではありませんが、レガシーアプリや、フェデレーションを提供していない 3rd party の Web アプリなど、必要に応じ活用を検討してみてください。

Comments (0)

Skip to main content