Unicorn ID Manager クラウドサービスの利用について
***************************************************

ここでは Unicorn ID Manager で Google Apps 等のクラウドサービスを
利用するために必要な情報を記載します。

Unicorn ID Manager では現在以下のクラウドサービスをバックエンドとして
設定できますが、それらを利用するためには各クラウドサービスで事前に
設定を行う必要があります。

* Google Apps
* Azure Active Directory (Office365)

以下では、各クラウドサービスで必要な事前準備の説明をいたします。

Google Apps
============

Google Apps をバックエンドにするためには、
以下に示す手順をすべて実施してください。

なお、ここではすでに Google Apps の 管理者アカウントが設定済みで、
かつ Google Apps の言語設定が英語であることを前提とします。

API プロジェクトの作成
-----------------------

1. https://console.developers.google.com/permissions/serviceaccounts にアクセス

2. **Project Name** に任意のプロジェクト名を入力し **Create** をクリック

   - すでにプロジェクトがある場合は、 **Create a project** をクリックして
     プロジェクトを作成

3. **Create service account** をクリック

4. **Service account name** に任意の名前を入力し、
   **Furnish a new private key** と
   **Enable Google Apps Domain-wide Delegation** をクリック。
   **Key type** に **JSON** が選択されていることを確認して、
   **Product name for the consent screen** に任意の名前を入力して、
   **Create** をクリック

   - **Service account name** と **Product name for the consent screen**
     は同一で構いません。

5. **Close** をクリック。JSON 形式のファイルがダウンロードされるので、このファイルを
   Unicorn ID Manager がインストールされたサーバーの任意のディレクトリに配置

   - このファイルには Google Apps の API を利用するための秘密鍵が
     格納されているため、 Unicorn ID Manager を実行するプロセス以外
     から参照できないようにしてください。

   - 具体的には、パーミッションを **0400** にし、所有者を Unicorn ID Manager
     実行ユーザーにしてください。

6. 作成したサービスアカウントの **View Client ID**  をクリックし、
   **Client ID** の内容を控える

API の有効化
-----------------

1. https://code.google.com/apis/console にアクセス

2. `API プロジェクトの作成`_ で設定したプロジェクトを選択

3. **Admin SDK** をクリックし、 **Enable** をクリック

   - **Admin SDK** が見つからない場合は、検索ボックスから検索

Google Apps ドメインの権限を API に委譲
-----------------------------------------

1. http://admin.google.com/ にアクセス

2. トップ画面から **Security -> API Reference** をクリックし、
   **Enable API access** のチェックボックス有効化して **Save** をクリック

   - トップ画面に **Security** がない場合、 **More controls** をクリック

3. トップ画面から **Security -> Show more -> Advanced settings -> Manage API client access** をクリック

4. **Client Name** に `API プロジェクトの作成`_ で控えた **Client ID** を入力し、
   **One or More API Scopes** に以下を入力

   ::

       https://www.googleapis.com/auth/admin.directory.user,https://www.googleapis.com/auth/admin.directory.group,https://www.googleapis.com/auth/admin.directory.orgunit

5. **Authorize** を入力


Azure Active Directory (Office365)
====================================

Azure Active Directory (Azure AD) をバックエンドにするためには、
以下に示す手順を `SKU の名前を取得`_ 以外をすべて実施してください。

`SKU の名前を取得`_ はユーザーにライセンスを付与する際に必要な情報を取得する
ために必要です。

なお、ここではすでに Azure AD の 管理者アカウントが設定済みで、
かつ Azure AD の言語設定が日本語であることを前提とします。

アプリケーション ID の作成
---------------------------

1. https://manage.windowsazure.com/ にアクセス

2. **Active Directory -> <自組織> -> アプリケーション** をクリックして、 **追加** をクリック

3. **組織で開発中のアプリケーションを追加** をクリックし、 **名前** に任意の名前を入力。
   **WEB アプリケーションや WEB API** がチェックされていることを確認し、 次へ (右矢印 をクリック)

4. Unicorn ID Manager はシングルサインオンを利用しないため、 **サインオン URL** と
   **アプリケーション ID/URI** は URL 形式の任意の一意な文字列を入力して終了 (チェックマークをクリック)

   - 例えば、 **https://uidm.example.com/** を入力

5. **構成** をクリックし、 **キー -> 時間の選択** から **1 年** か **2 年** を選択し、 **保存** をクリック

6. 表示されたキー値を控える

   -  以降、この値は表示されなくなります

   - キー値は流出しないように厳重に保管してください

7. **クライアント ID** の値を控える

アプリケーション ID にロールを割り当て
----------------------------------------

1. Windows 端末にて PowerShell 用の Azure AD モジュールをインストール
   (http://msdn.microsoft.com/library/azure/jj151815.aspx からダウンロード)

2. PowerShell を開き、以下のコマンドを実行
   (*<APPNAME>* は `アプリケーション ID の作成`_ の 3. で作成した名前)

   ::

       $APPNAME = "<APPNAME>"
       Import-Module MSOnline
       Connect-MsolService
       Add-MsolRoleMember -RoleName "User Account Administrator" -RoleMemberType ServicePrincipal -RoleMemberObjectId (Get-MsolServicePrincipal -SearchString $APPNAME).ObjectId

SKU の名前を取得
------------------

1. Windows 端末にて PowerShell 用の Azure AD モジュールをインストール
   (http://msdn.microsoft.com/library/azure/jj151815.aspx からダウンロード)

2. PowerShell を開きサブスクリプションごとに割り当てられている SKU の名前 を取得

   ::

       Import-Module MSOnline
       Connect-MsolService
       Get-MsolAccountSku | Select-Object -Property SkuPartNumber

3. 出力された情報のうち SkuPartNumber の列以下の情報を控える
   (たとえば、以下のような出力が得られます)

   ::

       SkuPartNumber
       -------------
       STANDARDPACK

