さとみ飯店の日記

2017-10-24

[]SharePoint Onlineについて調査検討


 ・目的

  Cordova等のモバイルクライアントから対話ベースSharePointログインし、

  SharePointリストへのRead/Writeを行う


 ・着手、調査

  https://blogs.msdn.microsoft.com/tsmatsuz/2013/07/11/native-application-mobile-app-azure-active-directory-login-authentication/

  oauth2手順でaccess_tokenを取得し、それを元にREST APIを実行する。

  grant_type = password認証を行うことで可能だということは分かった。

  ただしこの手順は非推奨であり、二段階認証が不可となるなど考慮すべき点がある。


  この手順を行う前に、予め認証を行うための口としてのアプリ登録する必要がある。

  https://blogs.msdn.microsoft.com/tsmatsuz/2014/06/02/office-365-api/


  以下の手順でアプリ権限スコープ定義する

  https://buchizo.wordpress.com/2017/01/25/sharepoint-online-%E3%81%AB%E3%82%A2%E3%83%97%E3%83%AA%E3%81%8B%E3%82%89%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%99%E3%82%8B/


 ・実行(Postman)


  ・認証を実行する

   URLhttps://login.microsoftonline.com/common/oauth2/token


   POST:

   { grant_type:'password'

    , client_id:{上記アプリ登録で得たclient_id}

    , client_secret:{上記同client_secret}

    , username:{Office365ユーザ名}

    , password:{パスワード}

    , redirect_uri: {認証リダイレクトするURL}

    , resource:{上記アプリ登録で得たclient_id}


   resourceは何を指定する必要があるのか意味不明だったが、上記で調べた通りに入れると

   「client_idと同じものを入れてください」的な英語エラーが出るのでこうしている。

   色々調べたが設定すべきパラメータバラバラで参考にならない。


  ・実行結果

   →OK。access_token取得できる。


  ・REST API(例)

   https://{テナント名}.sharepoint.com/sites/Monaca/_api/web/lists/getbytitle('List')/items

   

   GET

   Authorization:Bearer + " " + 認証で得たaccess_token

   Acceptapplication/json;odata=verbose


  ・実行結果

   →エラー。401。主旨不明。詳細不明


   {"error_description":"Exception of type 'Microsoft.IdentityModel.Tokens.AudienceUriValidationFailedException' was thrown."}

   

   www-authenticate →Bearer realm="d6ab9302-8c72-4f6b-b728-96ba9a7642e8",client_id="00000003-0000-0ff1-ce00-000000000000",

   trusted_issuers="00000001-0000-0000-c000-000000000000@*,https://sts.windows.net/*/,00000003-0000-0ff1-ce00-000000000000@90140122-8516-11e1-8eff-49304924019b",

   authorization_uri="https://login.windows.net/common/oauth2/authorize"

   x-content-type-options →nosniff

   x-frame-options →SAMEORIGIN

   x-ms-diagnostics →3000003;reason="Invalid audience Uri 'e5cfc728-cb6b-4736-ba65-dd563042d5de'.";category="invalid_client"


 ・原因切り分け

  Postmanを使用しているからではないか、という切り分けのためにブラウザ検証


 ・実行(ブラウザ、通常のajax)

  基本的にやることは同じ。


  ・認証を実行する


   $.ajax({

    url: 'https://login.microsoftonline.com/common/oauth2/token’,

    type: 'POST',

    dataType: 'json',

    data: data,

    headers: {

      'Accept': 'application/json;odata=verbose',

      'Content-Type': 'application/x-www-form-urlencoded',

    },

   }).done(function(data){

     alert("ok");

   }).fail(function(XMLHttpRequest, textStatus, errorThrown) {

     alert("error");

   })


  ・実行結果

   → エラー

   No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null'

   内容としては表示された通りなのですが、サーバサイド(SharePoint Online)でカスタムヘッダを

   追加する手段は無いので、クロスドメイン問題クリアしなければならない様子。

   (同一要求元ではないため、モダンブラウザはすべてこうなる)


  ・結論

   この時点で、一般的モダンブラウザから対話での認証REST API実行は不可との認識

   ブラウザでなくネイティブコード記述する分には回避可能と思われる。


 ・他の手順で実行(SP.js) ※MS謹製Javascriptライブラリ


  ・認証を実行する

   MSサイト記述、各サンプルに「認証」用の関数は明示されておらず認証自体は通常の

   Office認証画面をiframe等で表示し、セッション確立する必要があると思われる

   ※未確認。それらしい記述ははっきりと明示されていない。


  ・REST API

   基本的には下記の手順

   https://msdn.microsoft.com/ja-jp/library/office/fp179927.aspx?f=255&MSPPError=-2147217396


   コア部

   executor.executeAsync(

   {

     url:

       appweburl +

         "/_api/web/lists/getbytitle('List')/items",

     method: "GET",

     headers: { "Accept": "application/json; odata=verbose" },

     success: onQuerySucceeded,

     error: onQueryFailed

   });


  ・実行結果

   → エラー

   SP.RequestExecutor.js?_=1508838788373:2 Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('https://{テナントID}.sharepoint.com') does not match the recipient window's origin ('null').

   クロスドメイン回避手順になっているはずなのに、エラーとしてはクロスドメインである旨の表示になっている。


 ・総括

  ・非対話認証REST API実行が可能なのか確証が取れない。

   PowerShellで同様のことを行っている例はあり、不可能ではないハズなのだが、原因を特定できない。


  ・access_token + REST API実行でのエラー('Invalid_Client')について

   額面通りに受け取ると色々な原因が考えられるが、文献が少ない・曖昧オンプレ用語が混在しており調査が難航。


   ・考えうる理由

    ・client_idが不正

     → アプリ登録手順は他になく、これを疑っても他に試すことが無い

    ・アプリ登録不正

     → そもそもアプリ」という名前で「登録」しているコレが何なのか意味不明である

       昔は「アドイン」に相当したらしいがそれそのものが処理を行うわけでもないのに「アプリ」?

       「アドイン」?

       一応疑うべき項目としてredirect_urlが意味をなさないことぐらいだが、非対話ベースなので

       これに意味があるなら成立しない

    ・アプリ権限付与不正

     → SharePoint Onlineリソースフルコントロールを与えてもダメなので手詰まり

    ・やはりresource_idに意味がある

     → そもそも文献がバラバラで試す余地も少ないが現状で回避できた例が上記の=client_idのみなので、

       これもここで手詰まり


   ・この手順については凍結


  ・sp.jsでの実行エラーについて


   ・考えうる理由

    → 「認証手順を踏んでいないため」というパターンは当然考えられるが「非対話で」を

      満たさなくなるため調査する意味なし


      サンプルの通り実装しているので正直どうしろと。


  ・テクニカルサポートを利用し、そもそも目的は「可能なのか」「非推奨のリスクは」

   は確認しようと思ったのだが、SharePoint 「Online」のテクニカルサポートを受けるには

   MSDNプレミアサポートが必要ですぐにそれをクリアできない状況。


 ・私的感想

  ・オンプレSharePointでは行えていた.asmx実装も不可であったり、SharePoint Online上の

   パブリックサイト作成も不可になったり、MSとしては「枠にはまった使い方」以外は

   あまりしてほしく無いのだろうと思う。

   実際、Flowを駆使すると割と色々出来ることは調査のついでで分かった。が今回は技術検証

   側面が強いので手段目的が異なってしまうためFlow採用することは無い。

  ・各所に英語直訳と思われる表現が見られたり、オンプレ版の表現が混ざったり著しく過渡期感がある。

   サポートもSharePoint Onlineは一段上の扱いとなるため、オンプレ版でないならこのような実装

   それらのリスクを加味して開始すべきである

2017-02-06

[][]スマホコンテンツしかないやつ

 GearVR処分しちゃって用になんか適当スマホ用VRヘッドセットいかなと

 思っていたのですがちょうどimpressにこんなんあったんで注文してみたんですわ

 http://k-tai.watch.impress.co.jp/docs/news/1040992.html


 GearVRとHTC Viveっつーいわゆる業界標準のVRヘッドセットを使ってた/る身としては

 ちょっとどうにもならないなという評価になります。

 何がダメって頭固定出来ないんですよ。これ、直販オンリー(マケプレ等はありますが)で

 実際に試せないので一発勝負だったのですが失敗でした。


 Viveがそうなんですけどいわゆる3点式ベルト+αじゃないと固定出来ないんですよこの重さ。

 GearVRはまだマシだったんですけど現状500gレベルヘッドセットになる以上、最低3点式じゃないと

 固定出来ないんですよ。


 ヘッドホンが一体型になってる奴が欲しかったのですがあきばおーとかで売ってる奴で

 誤魔化しといた方がまだマシだったかもしんない。


 頭が固定出来ない以外は普通に使えるのですが、逆にいうと頭が固定できないので普通に使えない、という

 評価になります。

 んー。失敗した。もう今後は何でもかんでもViveで動かせる努力をした方がまだマシだな。

2017-01-30

[][]サンコーの左右独立イヤホン買いました

 これ。

 http://av.watch.impress.co.jp/docs/news/1041170.html


 意外と聞ける音質でBT固有ノイズもそんなに気になりませんし、これが5000円なら

 15〜20kする他社品買うほどじゃないだろーなーとは思う。

 私の耳としてのフィット感は普通カナル型とそれほど変わらないので

 外で使おうという気にはならないなぁ。

 (何かの弾みで落とすことはある)


 スポーツ用に買ったbackbeat Go 2と同じくらい・・・かな。

 http://www.plantronics.com/jp/product/backbeat-go-2

 これは練習場で老人のおしゃべりが煩い時に使ってます

 ちょくちょく落とします

 ゴルフスイング中と通常用途(通勤時とか)では違うとは思います

 人とぶつかったらまぁ落とすこともあるだろうなと。


 BTイヤホンも色々使ってはきましたが結局のところイヤホンをつなぎ変えられる

 小型軽量レシーバが一番無難なのかなと今回の結論

 MW600相当の大きさ、軽さでaptX HDなりLDAC対応の新製品出してくれれば

 ポンと買うのにな。あ、あのクソ音量キー直したうえでね。

2016-12-19

[][]プライム登録したしKindle Fire買いました。

 3480円とか流石にオーナーライブラリで元取れるじゃんということで

 買ってみたんだけどNexus7 2012を思わせる(今としては)野暮ったいデザイン、

 今更600ライン解像度2012年ぐらいのデバイスを思わせる超太幅ベゼル

 Androidアプリ同様クッソ分かり辛い操作感、やっぱりダメなもんはダメだなぁ、

 これ8980円だったら絶対買わんわという感想


 オーナーライブラリも「端末からじゃないと登録不可」という恐ろしい仕様で、

 且つ端末からオーナーライブラリ対象」で絞るとそこからジャンル絞り込みも

 不可という相変わらずKindleらしい一切ユーザーのことを考えていない仕様

 Webで調べてみましたが、いったんWebから検索して対象を絞り込んだ後、

 端末からオーナーライブラリ」の絞り込み後、キーワード検索でひっかけろとのこと。

 前々からKindle/Amazon電子書籍の非特化はクソだクソだと言い続けてきましたが、

 やっぱりクソでした。


 ME176も長く使ってるし、部屋用の「SIM刺さらない雑に使っていい7インチ端末」の代替にならないか

 と思いましたが無いかな。

2016-12-02

[][]なんか3日限定1000円引きとか言われたので

 頑なに拒んでたAmazonプライム登録してみました。

 実際、用途としては「指定日配達」だけなので金払うのは癪だなぁと思ってたのです。

 たいていの場合メール便固定「も」できるヨドバシのほうが良いし結果的に早いし、値引き率もたいてい誤差だし。

 (BDは発売日買いだとだいたいAmazonのほうが安いけど)


 コンテンツもこちとら固定コンテンツ(買い切り電子書籍普通のゲーム、BDなど)すら消化しきれないので

 全然恩恵ないんですよね。

[]艦これ秋?イベ

 ちんたらやっておりますが全然保有艦が落ちないのでテンションが上がりません

1327085