2

Yammer からデータを読み取る ASP.NET Web アプリケーションに取り組んでいます。「ホーム」ネットワークからの認証とメッセージの取得に成功しました。

ここで、別のネットワークに切り替えて、そこからメッセージを取得したいと考えています。私はすべてのドキュメントを読みましたが、具体的には次のようなネットワークセクションを読みました。

異なる Yammer ネットワーク間でのユーザーの切り替えを容易にします。すべての Yammer Web 要求には、ネットワーク コンテキストを示すために、URL ( https://www.yammer.com/network_permalink/resource_path ) にネットワーク パーマリンクが含まれています。API リクエストは、ユーザーとネットワークの組み合わせごとに異なる OAuth トークンを使用します。

エンドポイント: 現在のユーザーがアクセスできるネットワークのリストを返します。included_suspended パラメーターをサポートします。

GET https://www.yammer.com/api/v1/networks/current.json

では、ユーザーとネットワークの組み合わせに対応するトークンを取得する必要があります。完全。そのエンドポイントにGETリクエストを送信するとnetworks/current.json、現在のユーザーがアクセスできるすべてのネットワークが取得されます。偉大な。さて、トークンはどこにありますか?それらはjson応答にはありません。

そう...

  • サーバー側コード経由で Yammer REST API を使用して外部ネットワークからメッセージを取得するにはどうすればよいですか?
  • 外部ネットワークのトークンを取得するにはどうすればよいですか?

アップデート

ブライアンの提案に従って:

  1. 認証ヘッダーで現在のトークンをGET https://www.yammer.com/api/v1/oauth/tokens.json渡します ( Bearer: xxxxxxxxx)
  2. これは、私が使用しているユーザーがいる 2 つのネットワークを返します。ホームと外部です。私が気づいたことの 1 つは、user_idネットワークごとに異なることです。user_idそれが別のユーザーなのか、同じユーザーがネットワークごとに異なるのかはわかりません。
  3. 今、他のネットワークからメッセージを取得したいので、

GET https://www.yammer.com/api/v1/messages.json

しかし、今はtokens.jsonエンドポイントから取得した外部ネットワークのトークンを使用しています。しかし、次の応答が得られます。

{
  "response":
     {
      "stat":"fail",
      "code":17,
      "message":"Attempt to access a protected resource failed."
     }
 }

繰り返しになりますが、ドキュメントによると、エンドポイントは偽装用であり、有料の Yammer ネットワークで確認済みの管理者ユーザーに制限されています。

私は本当に手がかりがありません。

更新 2

上記の更新プログラムで説明されているプロセスは、Yammer アプリを作成したユーザー (私) に対して機能します。使っています。私がそのネットワークにいない限り、他のユーザーは外部ネットワークからメッセージを取得できません。どうやら私のトークンを使用しているようですが、API にバグがない限り、それは不可能です。

4

3 に答える 3

2

これまでのところ、私が発見したことは次のとおりです。いくつかのクロスドメイン制限により、SDK はページ上に非表示の iframe を作成し、ユーザーのプライマリ ネットワーク資格情報を使用して外部ネットワーク リソースにアクセスするためのプロキシ ブリッジとして機能します。ネットワーク パラメータがパズルの鍵です。

取得したトークンは、ページがリロードされるたびに、以降のリクエスト用に手動で設定できるため、ログイン ウィンドウが再び表示されるのを回避できます。

yam.platform.login({ network: '{your-permalink-goes-here}' }, function (data) {

    console.log('login-status: ',data)
    if(data.status ==='connected')
        yam.platform.request({
            url: "oauth/tokens.json"     
            , method: "GET"
            , success: function (tokens) { console.log('user-tokens:',tokens); }
            , error: function (err) { alert("There was an error with the request."); }
        });
})

次に、次のリクエストでは、setAuthToken がトリックを行います。

yam.platform.setAuthToken('{the-token-goes-here}'))
于 2014-09-13T04:40:41.017 に答える
0

アプリを SSO 対応ネットワークで動作させたい場合は、アプリをグローバル化する必要があります。このためには、yammer ヘルプデスクにチケットを提出する必要があります。

参照: 403 クライアント エラーを返す yammer oauth2 : 許可されていません

于 2015-05-29T07:35:53.517 に答える