Jun's blog

仕事や趣味について綴ります

yammer REST APIのユーザー偽装について

前回はアプリの登録からアクセストークンを取得してAPIを実行するところまで書きました。
通常のREST API利用方法は確かにその通りなのですが、特にSharePointや外部システムと連携してyammerのREST APIを実行する場合は以下のようなニーズもあることでしょう。

  • ユーザー毎にアプリの認可をさせたくない
  • yammerの画面を操作するのは管理者だけで一般ユーザーにはなるべくyammerを意識させたくない

そのような場合、Verified Adminという権限を使えばユーザーを偽装できます。

Verified Adminとは

日本語では「認証管理者」と言い、以下の特徴を持つ特別な権限です。

  • データのエクスポート、プライベートグループのメッセージ読み取りやセキュリティ設定の構成が可能であるなどネットワーク管理者よりも強い権限
  • 有償版Yammerのみに存在
  • Office365全体管理者は自動的にVerifiedAdminの権限が与えられる

ネットワーク管理者との比較については下記公式管理ガイドをご覧ください。
管理アクセス特権 - Yammer Success Center

ユーザー偽装手順

ではこのVerified Adminを使用してユーザーを偽装してみましょう。
ここでは偽装対象ユーザーのメールアドレスがわかっている前提でユーザーを偽装してのグループ作成を行ってみたいと思います。

  1. まず、前回のアクセストークン取得と同じ手順でVerified Admin権限を持つユーザーのアクセストークンを取得します。ここでは最低でも1回はアプリの認可が必要になります。
  2. 次に以下のリクエストを実行して偽装対象ユーザーのIDを取得します。

    GET https://www.yammer.com/api/v1/users/by_email.json?email=<追加対象ユーザーのメールアドレス>

  3. [
        {
            "type": "user",
            "id": xxxxxxxxxx,
            "network_id": xxxxxxx,
            以下省略・・・
      }
    ]
    

  4. 次に以下のリクエストを実行して偽装対象ユーザーのアクセストークンを取得します。

    GET https://www.yammer.com/api/v1/oauth/tokens.json?user_id=<偽装対象ユーザーのID>&consumer_key=<クライアントID>

    このリクエストはVerified Adminで行う必要があるため、HTTPのAuthorizationヘッダにVerified Adminのトークンを指定してください。
    ※consumer_keyは登録したアプリのクライアントIDです。

  5. [
        {
            "user_id": ユーザーID,
            "network_id": ネットワークID,
            途中省略・・・
            "token": "xxxxxxxxxxxxxxxxxxxxx",
            以下省略・・・
        }
    ]
    

  6. 最後に偽装対象ユーザーのトークンをAuthorizationヘッダに指定してグループ作成リクエストを実行します。

    POST https://www.yammer.com/api/v1/groups.json?name=<グループ名>

    正常に処理が終了すれば以下のような作成したグループの情報が返ります。

    {
        "type": "group",
        "id": グループID,
        "full_name": グループフルネーム,
        "network_id": ネットワークID,
      以下省略・・・
    }

    ユーザーを偽装してグループを作成したのでグループ管理者が偽装したユーザーになっていると思います。

まとめ

今回はVerified Adminを使用してユーザー偽装を行いました。
アプリ認可がVerified Adminの1回だけで偽装対象ユーザーのアプリ認可をスキップできていることがお分かりいただけたかと思います。
Verified Adminはユーザーに割り当てることができる管理用制御の最高レベルなので他にもいろいろできそうです。
有償版Yammerをご利用の方は試してみてはいかがでしょうか。