「Json」を含む日記 RSS

はてなキーワード: Jsonとは

2018-06-07

こににちは

私は.jsonドットジェイソン)と言います。皆んな事何でもシっテルよ。

Jsonがキミワルイって

アメリカ人共通なんだろうか。

日本人13日の金曜日連想しないか

別に気味悪くはないよな。

和訳するとすげー変。

そういえばxmlって廃れたね。

2018-05-07

フロントエンド不要論

なぜフロントエンド必要になるのか。

それはユーザたる人間目視で結果を確認/操作しなければならないからだ。

ゆえにどんな高速なシステムを作ったとしても、人間への伝達・入力待ちが最大のボトルネックとなる。これほど非効率的なことはない。

真にボトルネックを無くすため、人体のハックも辞さな姿勢エンジニアには求められるのではないか

脳髄に直差し出来るコネクタを取り付け、直接JSONを受送信出来るようにすればフロントエンド不要となり、真に快適なUXを実現できる。

ヘッドレスブラウザの次はヘッドレスユーザ時代がそこまで来ている。

2018-03-17

anond:20180317013435

これこそJSONExcelに取り込んでVLOOKUPって感じで比べてたんだろうか? 昨日一昨日やってた人たちは。

anond:20180316232605

Excelを持っているならはてブJSONデータをそのまま取り込めるそうだからそのデータを使ってブクマが付いた時間グラフが描けそう。

例えばこんな感じでJSONデータが取れる。 http://b.hatena.ne.jp/entry/jsonlite/https://anond.hatelabo.jp/20180315232737

Excel持ってないならスクリプトCSVにしてしまえばいい。

rubyスクリプトだとこんな感じ。(Mechanize無し版に差し替え。なぜMechanizeを使っていたかと言うとはてブUser-Agentが空だと値を返してくれないから。ちょっと長くなるが自前でUAを渡すようにした。)

#!/usr/bin/ruby

require 'uri'

require 'net/http'

require 'json'

require 'csv'

site = ARGV[0]

json_uri = URI.parse("http://b.hatena.ne.jp/entry/jsonlite/%s" % [site])

response = Net::HTTP.start(json_uri.host, json_uri.port) do |http|

http.get(json_uri.path, "User-Agent" => "Mozilla/5.0")

end

json_data = JSON.parse(response.body)

json_data['bookmarks'].each do |bookmark|

puts [bookmark['user'], bookmark['timestamp'], bookmark['comment'], bookmark['tags'].to_s].to_csv

end

引数に取得したいページのURLを入れる。hatebuapi-csv.rbという名前で保存したとしたらこんな感じで実行。

% hatebuapi-csv.rb https://anond.hatelabo.jp/20180315######## > 結果.csv

このケースでは朝の7時から爆発的にブクマが付き始める様子が分かる。

https://imgur.com/66FlJIB

2018-03-13

大企業って無駄システム多くない?

大企業クライアント案件を受注したらしく社内説明会でどんなものを作るのか聞いてきた

詳しいことはもちろん書けないんだが、大雑把にいえば、その社内でのやることに応じたシステムが10や20とある

それぞれ独自フォーマットデータを扱うからシステム間のフォーマットを変換するシステム必要のようでそれを作るらしい


こういうのは大きいところならよくある話だとか

そして今回作るようなシステム間のデータ相互変換のようなシステムはすでにクライアント社内にいくつもあるらしい

さらにはそれら変換するシステム同士をつなぐシステムというものもあるらしい


それぞれのフォーマットは別だが中身はおなじということが多いらしい

それってなんか無駄すぎない?


フォーマットXMLとかJSONとかTSVとかの汎用フォーマット統一して各システム必要な部分だけをみればいいんじゃないの?

お金もらえるわけだから無駄であろうと作るのだろうが、無駄ものがどんどん膨らんで行きそうな気がして仕方がない

なんかシステム作る側があとから変換システムも作ってお金もらうために独自フォーマット採用しているように思えてくる

日本ITダメとか言われるのも価値のある新しいものを作るのじゃなくてこんな無意味ものをいっぱい作ってるからなんじゃないかなーとも思った


クライアント側が過去のものをそのまま使いたいとか変な要望を無理に通したせいでこんなことになってきたということもあるのだろう

IT系は人じゃなくて機械にあわせるべきだと思うんだよなー


2018-03-12

どこまでがフロントエンドのやることなんだろう

私がいるところは、プログラマ/システムエンジニアフロントエンドエンジニア/バックエンドエンジニアとかの区分がなくひとりでなんでもやるところです

一応フロントエンドが好きで得意だと自称はしているもの一般的フロントエンドってどこまでするのでしょうか


デザイナがするような部分

ここは当然でしょう


最近では SPA のページも多いので単純な HTMLJS ではなくフレームワーク必要とされることもあります

ここもブラウザ側の話なので必要でしょう


SEOの都合などでJSレンダリングじゃなくサーバサイドレンダリングで、サーバから受け取るHTMLの時点で表示できる状態になってることを依頼される場合もあります

その場合サーバサイド言語に応じたテンプレートエンジンも使います

PHP なら BladePython なら jinja、 Node.js なら ejs という感じ


JSコードテストしたり gulp などのタスクランナーwebpack などバンドルツールを使うので OSコマンドラインツールも使える必要があると思います


サーバサイドの言語は別の人が作るにしても自分環境でそれを動かすためにサーバ構築は出来たほうがいいでしょう

VMOSインストールしてウェブサーバインストールしたり

Vagrant, Ansible 等で管理されているなら、設定ファイルを書くことはないにしろ実行する方法エラーが起きたとき簡単対象方法くらいは知っていないと不便かと思います

ウチの場合各自LinuxVMインストールして Ansible でという使い方なので気づきませんでしたが、考えてみたら全部設定済みの VM データを配布してくれるということもあるのかもしれません


データによって画面表示を変えるときに、それに応じたデータを作って画面を確認したいことがあるので、mysql や postgres などなどデータベースの知識必要になることがあります

SQL 書けなくても pgadmin みたいな GUI ツールで表を書き換えればいいのですが最低限の仕組みは知っていないと苦労しそうです

完全にフロント/バックが切り離されてるところなら、フロントエンド開発者向けにデータベースは使わずテンプレートエンジンに渡ってくるデータを好きに設定できる機能が用意されてるのかも?とも思います

サーバサイドの処理は不要クライアントサイドの動きのみを作るわけですから、決まった場所JSON ファイルデータがそのまま使われるならデータベースの存在を知らなくてもいいですし


ここまでできたらバックエンドよりフロントエンドのほうが何でも出来る人みたいに思えます

あとはサーバサイド言語を書ければもうサービスが作れてしまます

でもこれぐらいできないとすごく不便で、すぐに他の人に頼らないといけなくなるように思います

サーバ冗長化とかそういった部分はかかわらなくてもいいと思いますけど、Linuxデータベースなんかは自分でどうにかできないと周り誰もいないときに動かなくなったら作業進められななんてことがありそうですし

2018-02-26

32歳の土日

Unityで作られてるらしい3D同人エロゲを藻無しにしたくてUnity構造から学ぼうと色々やってたけど

そんな知識とか全然いらなくてセーブデータjson弄れば藻無しに出来る事が解りました

まあでもせっかくインストールしたんだからUnity始めてみようかな思いました

しかったです

2017-12-09

anond:20171206201618

もう一つの方法としては、javascript版だ。

https://gist.github.com/bellbind/d9dc9ccdd4a8735a9990

2倍固定だけど。

デモページで試してみたら、javascripticabやらsafariでは動かない。

かろうじてFifefoxやchromeで動く。

最初ダウンロードして、OSXweb共有で試してみようと思った。

→動かない。単純拡大の方はスパッと表示されるが、その下の表示が "Progress: initialize worker..." のままで停止。

 Apacheの設定を変えるといいのかもしれないが、あくま仕事機械だしね。

結論としてはダウンロードしたHTML書類を、Finderから右クリックしてFifefoxで開くとなぜか動くというのが確認できた。

へーってなった。

chromeは直接開いたのではダメだった。

(ちなみにHTMLエディタで開いてjsongithubURLにしたらweb共有からでも動くのは確認した。

 ただし外部サイト側に迷惑をかけないためという主旨なんで元に戻している。それでいいなら公式ブラウザアクセスするので

 ちなみに個人サイトjsonを置くことも考えたが、それもなんだかなと、たいていリンクだけの目的ファイル置くの禁止

2017-10-21

何でもかんでも揃えようとしないでほしい

プログラマなんだけど、なんでも揃えようとしてる人がうざい

よくあるのが、JSON とかオブジェクト系の記述するところで、 「:」とか「=>」みたいなのの位置

揃えられると一見すると見やすいが、金額みたいに揃ったみやすさが必要ないところでされると面倒

10行並んでたら1つ変えたのが原因で10行とも変えないといけなかったりする

面倒だけどツール使えば揃えること自体は楽にできるからこれはまぁいい

だが、バージョン管理ソフトでの変更行数が無駄に増えるのでパット見たとき結構大きな変更してるように見えたりするからちょっとイヤ

さらgrep かけようにも空白数が不定だから正規表現にしないといけない

正規表現書くの面倒だしそもそも遅い

大規模プロジェクトだと待ち時間が大きく変わってくる

んだけど、まあここまでは別にいい

他でも十分ある宗派の違いだし、まだ理解できる

この揃えるとき

aaa      : {
    bbbb : 100
    ccccc: 200
},
dddd     : {
    e:   : 300
}

みたいに(フォントによっては揃ってなく見えるかも)、ネストが違うのに全部を揃えようとするの、ホントやめろ

わかりづらい

上の例みたいなシンプルだと困らないが複雑な構造になってるとかなり見づらい

せめて揃えるのは連続する行で同じ階層のものだけにしてほしい

上でいう aaa と dddd の行が10行程度離れていたら、ここを揃えても全くきれいに見えないし無駄

bbbb と ccccc みたいなときだけならまあ許せる



仏の顔も三度まで、

ここからは許せないレベルもの


(1) 文字数を合わせようとする

上で書いたみたいなのは文字数が違うから合わせるためにスペースを入れる必要がでる

しか文字数が揃ってたらそんな必要はなく見た目も綺麗だ

きれいなのはわかる、だが無理やり合わせようと単語を探し始めるとかありえない

5つ項目があって、4つが6文字単語で残りの1つが4文字だったとする

6文字にしたいからそれっぽい意味単語いか探そうとしてる

無駄な上に、本来のそれに適した単語じゃないのを無理やり使うのでわかりづらい

理解できない自己満足しか思えない

揃ってることはパット見綺麗でもプログラムみたいのだと、単語まで似てると気づかないミスが出て来る

beer と bear、 form と from、 fall と fail みたいな見た目が似てる単語と、見た目が全く違う単語比較ではミスの数が明らかに変わると思う

なのに、 enum みたいな選ぶタイプのもので、数文字違うだけの似た見た目の単語を探してきて選ぶとか、ミスを誘発しようとしてるのかと言いたい



(2) 単語の語尾とか

(1)のように大半が揃ってると残りも無理やりそうしたいということで、単語勝手に変化させたものがある

例えばだが、語尾が1つを除き全部 -ly になってたとする

そうすると残り一つに無理やり ly をつける

なんなの?イン踏みたいの?ラッパーなの??

経緯を知らない人が見たら意味不明単語である

そもそも名前みたいな固有名詞にすらそんなことしてるから意味不明にもほどがある



(3) 変化形無視

上の時点で英語を完全無視英語力のなさはわかっただろうが、さらにこういうのもある

過去形には ed複数形には s のようなルールには単語によっては特殊な形をするものがあるのはもちろん知ってると思う

それを完全無視変数名を定義するから見ててすごく気持ち悪い

プレフィックスis つけるみたいな単語の組み合わせ部分なら気にしないけど単語としておかしいから、自分で書くとき本来の形で書くとエラーでるからさらイライラする

例えばこういうこと

readed, catched, taked, companys, boxs, mans, childs, fishs, classs

見てるとムズムズする

英語得意でない自分ですら違和感を感じるのに、これに何も感じないとか英語力ひどすぎると思う

まあエラーメッセージdon't have ~ とすべきところを has not ~ とか書いてたくらいだからなぁ

これが部下とか下の立場の人なら 「使う前にググってみて。おかしかったら『もしかして、~~』みたいの出るから」と言って直させるけど、上だからどうしようもない

間違ってますよー、と遠回しに言ってみたことはあるものの、直す気は全くないようだし、それどころか無邪気に揃えてやったぜみたいなこと言ってドヤ顔してるからホントどうしようもない

2017-09-27

読解力テスト

https://www.nasnem.xyz/entry/incorrect-comprehension-test

http://mubou.seesaa.net/article/453754579.html

どっちもとちんかんなことを言っているので、この問題について解説

かいことは説明しないのでリンクを読んだ上でとうぞ。

1「輸出が伸び悩む中でも、和牛が人気の牛肉や、和食ブームを反映した緑茶日本酒などは好調だ。」

2「輸出が伸び悩む中でも、和食ブームを反映した日本酒緑茶和牛が人気の牛肉などは好調だ。」

1と2を同じ意味解釈することはできますか。と問われればイエスだが、全く同じですか。と問われればノーだ。

同じ意味解釈したとき文章構造JSON風に表記するとこうなる

輸出が伸び悩む中でも好調だ : [
  {
    和牛が人気の : ["牛肉"]
  },
  {
    和食ブームを反映した  : ["緑茶","日本酒"]
  },
  "など",
  "など",
  "など",
  //以下任意のなどが続く。"など"の中身はなんでも良い
]

しかし1は以下のように解釈することもできる。

輸出が伸び悩む中でも好調だ : [
  {
    和牛が人気の : ["牛肉"]
  },
  {
    和食ブームを反映した  : ["緑茶","日本酒","など","など","など",] //以下和食ブームを反映した"など"が続く
  },
]

結論としては、解釈複数できる文章1は、悪文。

2の文と同じ意味の文はどれですか、と問われれば1を選ぶが、

1の文と2の文は同じですか、異なりますか、と問われれば「わからない」が正解である

2017-08-03

https://anond.hatelabo.jp/20170803123853

パーサーから作るみたいな話ならともかく、普通ライブラリを使うからjsonでもcsvでも大差ないのでは。

https://anond.hatelabo.jp/20170803123853

ジェイソンは、階層構造が持てるので、表形式CSVより複雑なデータ構造定義やすい特徴があると思います

形式で表せるデータを入れたいなら、べたな配列を1行ずつ書いたようなJSON にすればよいのでは・・・

https://anond.hatelabo.jp/20170803123853

JSONは主に通信のために用いられる形式

保存にも使われることがあるが、表形式にはそんなに向いていない(入れ子構造データに向いている)

形式で保存したいなら、RDBに保存した方がいい

RDBは、CSVをそのまま取り込めて、SQL検索できる

RDBにも色々種類があるが、インストール簡単さでは、SQLiteがいいか

JSONって、ジェイソンジェーソン? Jさん?

JSONが良く分からない。すべてにおいて。

ソフトを作るために、データ保持をJSONにしようと思うのだけれど、

形式で保存したいのに何がなんだか良く分からない。

CSVみたいに分かりやすくできたりしないのかな?

基礎データ作りで詰まってるんですけどこれはどうしたら良いのか。

追記:

コメントありがとう。ただ、皆が言ってることが呪文のようにしか見えない。

形式JSONデータサンプルを見たが、何がどうなっているのかサッパリだった。

私には合わないのかもしれない……誰か分かりやす説明してくれないかな…。

2017-07-17

https://anond.hatelabo.jp/20170717033554

https://anond.hatelabo.jp/20170716183457ブクマページの作成時間が2017/07/16 18:36

同ページで最初の公開ブックマークをしているdeath6coinのタイムスタンプJSONデータを見ると2017/07/16 19:12:44

death6coinはブコメでこれを使った何か面白いメタネタ披露しようとしたがスルーされた

ということなのかな

https://anond.hatelabo.jp/20170717031301

それJSONからデータ見ないと時刻までは比較できないのでは?

たとえば http://b.hatena.ne.jp/entry/json/https://anond.hatelabo.jp/20170716183457

そこまでする人いないだろうから実質判別不能。

そもそもファーストブックマーカーって執筆者なんだろうか?

糞尿関連ブックマーカーだけはセルフブックマークなんじゃないかと思ってはいるが。

2017-03-09

http://anond.hatelabo.jp/20170309042831

この話は、途中で「危ない」の意味がすり替わっているので混乱してるんじゃないかな?

1. クロスドメイン制約で他ドメインサーバリクエスト投げられません ← わかる

これが許可された場合攻撃危険性にさらされるのは「リクエストを受ける側」のサーバだ。

この場合攻撃である可能性を持つ「リクエストを投げる側」は不特定多数である

2. <script src="">なら他ドメインも取れるよ ← まあわかる

3. じゃあここを動的に変えて、実体スクリプトファイル(JSONP)で関数呼んでデータ貰おう ←!?

ただのJSONだったころよりもっとあぶねーじゃん?

関数実行しちゃってんだぜ?

これが許可された場合攻撃危険性にさらされるのは「リクエストを投げる側」であり、先ほどとは攻撃者と被攻撃者が逆転している。

この場合攻撃である可能性を持つ「リクエストを受ける側」は、「リクエストを投げる側」が明示的に指定したサーバだ。

この問題は信用できないドメインに対して自分からリクエストを送らないようにする、という明確な対策可能である

JSONPは、「リクエストを受ける側」にとってXMLHttpRequestWebAPIを叩かれるよりも安全からドメインを超えた通信が出来るわけ。

まりこういうことね。

XMLHttpRequest危険性 (実際にはこの動作禁止されている)】
ブラウザ←ーーー「攻撃WEBサーバ」(悪意あるリクエストを投げるコードブラウザに渡す)
    ーーー→「被攻撃WEBサーバ」
        (悪意あるリクエストに答えてしまう)

【JSONP危険性】
ブラウザ←ーーー「WEBサーバ」(攻撃WEBサーバリクエストを投げるコードブラウザに渡す。※このサーバは、攻撃WEBサーバに悪意があることを知らない)
    ーーー→「攻撃WEBサーバ」(レスポンスとして悪意あるコードブラウザに渡す)
ブラウザ←ーーー
(悪意あるコードを実行してしまう)

JSONPなんて考えてるやつは頭おかし

1. クロスドメイン制約で他ドメインサーバリクエスト投げられません ← わかる

2. <script src="">なら他ドメインも取れるよ ← まあわかる

3. じゃあここを動的に変えて、実体スクリプトファイル(JSONP)で関数呼んでデータ貰おう ←!?

なんでそうなるの?

ただのJSONだったころよりもっとあぶねーじゃん?

関数実行しちゃってんだぜ?

リクエストだってドメインに飛んじゃってるし、クロスドメイン制約とかなんだったの?って話なんだけど・・・大丈夫か?

2017-02-24

祝日csv文句言ってる奴は間違いなく三流プログラマー

祝日の日付が毎年変わることは当たり前だし、春分秋分の日みたいに発表されて初めて確定する日もある。

祝日名称が変わることは容易に想像できるし、例のcsvはそういった事情を鑑みて優れてるとは言えないが妥当ものといえる。

そもそも仮に特定の日付について祝日かどうか判定して名称を取得するだけならいわゆる連想配列作るわけで

あのcsvからそれを作ることの何が大変かさっぱり理解できん。

2要素ずつ取り出してkeyとvalueに突っ込むだけだろうが。

そりゃjsonになってたら楽かもしれんけど言語によっては逆に面倒だわ。

2017-02-23

.iniファイル

このまえSIerPHPプロジェクトで、パラメーターを設定ファイルに外だししようって話になって「.iniファイルの読込ルーチンはどうする? だれか作れる? ○○さんがもってるかも」って話になってたから、PHPなら標準でxmljsonの読込関数がありますよって言ってみたけど「あ、こいつまた小難しいこと言ってる」みたいな空気になって流されたな。

ホットエントリ内閣府CSVやばいって記事で思い出した。

2017-02-18

[]続・ブクマ1000超えしている11記事の内どれだけ重複するIDがあるか(JSON

エントリー: http://anond.hatelabo.jp/20170216041052

遊びでJSONブックマークデータを取れるようにしたので2日後のデータを。

7,604個の公開されたID11,986回のブックマークを行い、3,714回の非公開ブックマークと合わせて15,700回のブックマークにより11個の1000ブクマ超え記事を生み出していた。

前回より高頻度重複IDが減っているのは[あとで読む]タグブクマが消化されたのか、手作業で数えた私が間違えていたのか、スパマーにそういう習性があるのか、ちょっとからない。

エントリーでチェックした1000ブックマーク以上されている11記事中n記事ブックマークしているID

11, 5 ID

10, 4 ID

9, 10 ID

8, 15 ID

7, 31 ID

6, 52 ID

5, 99 ID

4, 226 ID

3, 555 ID

2, 1481 ID

重複なし, 5126 ID

(注: n重複のID数の中にn+1重複のID数は含まれていない。つまり10重複のID数の中に11重複のID数は含まれていない。)

ブクマ公開非公開url
25941860734(28%)ttp://www.nakahara-lab.net/blog/archive/7308
19721485487(25%)ttps://togetter.com/li/1079883
17331367366(21%)ttp://omocoro.jp/kiji/101534/
13851019366(26%)ttp://qiita.com/shu223/items/9e3a50e092c2997fe6d2
12751026249(20%)ttp://ironna.jp/article/5686
1231999232(19%)ttp://blog.tinect.jp/?p=36441
1163915248(21%)ttps://togetter.com/li/1078513
1135790345(30%)ttp://www.lifehacker.jp/2017/02/170205_free_alternatives.html
1130839291(26%)ttp://careersupli.jp/lifehack/eiga/
1053827226(21%)ttp://anond.hatelabo.jp/20170206102543
1029859170(17%)ttp://appmarketinglabo.net/staba-sns/

2016-07-18

Vimフィルタコマンドで使うUNIXコマンド

http://vim-jp.org/vimdoc-ja/change.html#filter

Vimにはフィルタコマンドといって、テキスト任意UNIXコマンドで処理するExコマンドが用意されている。

用意されていて、実際強力なんだけど、Vim組み込み機能で間に合うことも多くて、下記以外はあまり使っていない気がする。

以前はVim正規表現に慣れないからとPerlを使ってたりもしたけれど、Vim正規表現も悪くないかなとなって。こう。

何かおすすめUNIXコマンドがあったら教えてください。

bc

簡単計算をするときに使う。1行に計算式を書いて「:.!bc<CR>」あるいは「!!bc<CR>」とすると計算ができる。

(小数を扱いたいときは-lオプション指定する)

「<C-r>=」で代用できる。

sh

長めのコマンドを実行するときに使う。「:%!sh<CR>」とすると書いたシェルスクリプトを実行できる。

最近Bashの<C-x><C-e>で良い気がしてる。こちらだとヒストリで戻って<C-x><C-e>として再編集することもできるので。

column

簡単な整列をするのに使う。ビジュアルモード選択して「!column -t<CR>」とすると整列ができる。

(デフォルトのセパレータがスペース二つなので、一つにしたければ-oオプション指定して「!column -to' '<CR>」という風にする)

vim-easy-alignやvim-aligntaが入っているならそれでいいかも。

jq, xmllint, pup

それぞれJSONXMLHTMLを整形するのに使う。JSONは「:%!jq .<CR>」、XMLは「:%!xmllint --format -<CR>」、HTMLは「:%!pup<CR>」。

ただ「jq . <JSONファイル> | vim -」としていたりして、直接Vimの中で使ってない場合が多いかも。

awk

連番を振る時、重複行を削除する時、指定した列を抜き出す時、などなど、色々なことに使える。

それぞれ「:%!awk '{printf"\%-6d \%s\n",NR,$0}'<CR>」、「:%!awk '\!a[$0]++'<CR>」、「:%!awk '{print$2}'<CR>」といった風にする。

tee

保存するために管理者権限必要場合sudoと一緒に使う。「:%!sudo tee %<CR>」とすると保存できる。

編集中のテキストを何処かに残すため……と思ったけど:wで事足りる。

2016-04-26

anond:20160426145507 の続き

anond:20160426124418anond:20160426145507 の続きだゾ。てか長えよ

(略: トークンが定期的に期限切れになるので可用性が下がる。たとえばビデオカメラから複数動画アップロードしている途中で切れたらムキーってなる。再認証して途中からできるのもそれはそれで CSRF の温床。AFCP のような場合は期限切れがあってはならないので、パスワード等を預かる認証プロキシSaaS アプリを筆者は作った。好評だったが、これはもちろん本来あるべきでない欠陥のexploitのはず。)

(略: 個人ユーザ向けのAPI設計ばかりで、雇用者上司アカウント管理するという観点がない。SAMLでは普通にできるのに、OAuthとなるとセキュリティ的に云々と言って拒むサービスばかり。別のUIで既にできてることをAPIにしても意味がない。これまでできなかったことをAPIで可能にするのではなく、単なるシングルサインオンでよければ他にある。実際Googleは個人向けにはOAuth活用しているが、Google Apps for BusinessはOAuth以外のシステムを使っている。)

(略: 主要な設計ミスは、外部サービスすべてを同等に疑うところ。管理者が各サービスの信用性を判断して権限を調節できるようにしないところ。これまでどれほど多くの製品OAuthの面倒さのために失敗してきたことか。)

普通実装における」OAuth代替

適切な OAuth ベース設計とはどのようなもの

ここまでで「普通実装における」OAuth がまったくおかしいということはわかりましたが、OAuth が実際うまくいくのはどういうときでしょうか。

初期の OAuth 規格および概念におおよそ付き従っているシステム一般的に言って、新しい規格ベースのよりもセキュアで、マシです。OAuth 1.0 の実装がすべてセキュアだというのではありませんが、たいてい問題は少ないです。こうしたシステムは通常、次のふたつのアプローチのどちらかに従っています:

はいえ、このように設計されている OAuth ベースシステムはごくごく希少で、しか一般的にこうしたシステムは、他のところで使われている OAuth とは似ても似つかぬものです。OAuth 1.0 規格の方に寄って頑張っていますが、公式には 1.0 は非推奨ですから、こうしたアプローチを使っているシステムはそのうち「アップデート」されて OAuth 2.0概念や追加機能すべてを加えて再構築され、セキュリティユーザビリティをだめにしてしまうことになります。これこそ筆者があらゆる OAuth ベースのものを見逃したくない理由です。もっと古く、もっと機能的な形式OAuth を使っていても、システムに「改善」が必要だという素敵な考えを管理者のだれかが閃いて台無しにしてしまうからです。ご迷惑をおかけしてすみませんと言うぐらいなら、まったく別のものを使うほうが良いですよね。

他の選択肢

他に手はないかと探すとき、人々はよく他の「フレームワーク」にはどんなものがあるかを知ろうとします。しかし、考え抜かれたセキュアな設計を実現するためには必ずしもフレームワーク必要というわけではありません。現状、OAuth とはどのようなものかについての意見サービスごとに異なっていますので、承認の具体的な動作の仕組みもまったく一定ではありません。そんな中でフレームワークを探しまわるのは、簡単にできることをいたずらに複雑化しているだけのことが多いです。唯一ほんとうに難しい要素、しっかりした規格の必要な要素は、使用する鍵パラメータ改竄を防ぐため変数署名する方法だけであり、この点に関して、ほとんどの OAuth ベース実装は一切何もしてくれません。

ウェブサービスの最大手である Amazon は、世界中企業サービス提供する一流プロバイダで、合計 30% 以上という途方もない市場シェア他者を圧倒していますAmazonアプローチは、自分アプリ認証情報を生成できるコントロールパネルへのアクセスを、すべてのアカウントおよびアカウント管理者提供することです。この認証情報で、どの Amazon サービス作業できるか、そのサービスでどの操作を実行できるか、どの権限作業しなければいけないかを指定できます。この認証情報必要に応じて「アカウントホルダ」の人が破棄することもできます

AmazonAPI における認証承認技術には、本質的制限が多く潜在的危険性のあるリダイレクトを一切必要しません。Amazonプロトコル認証情報は、直接送ることは一切なく、データ署名に使うのであって、これでブラウザを通してパラメータを送る必要のあるときにも改竄不可能にすることができるのです。

Amazon設計アカウントの利用状況を API の利用まで適切に把握できますし、API認証承認もすべて Amazonからスタートし、その際のアプリ認証情報も「Amazon の」コントロールパネルから生成されます。この認証情報はその後、いかなるトークン交換システムも使わず直接 API プロセスで使われます。この設計なら「普通実装における」OAuth が達成している真のセキュリティ目標をすべて達成し、かつ前述したセキュリティ上およびユーザビリティ上の問題をすべて回避しています

ひとつ言及せざるをえない短所は、Amazon権限システムが幾分わかりにくく、あまりユーザに優しくないということです。ただし、このことは何故かほとんどのコントロールパネルにも言えることで、いずれにせよ UI 設計問題であって、承認プロセス自体の失点ではありません。さらに、Amazonコントロールパネルはかなりキビキビ使えて、それ自体API でも使えます。この点たとえば Google場合のように、筆者の知る限りメタ API もなく、何をするにも何十もの手順が必要なのとは大違いです。

Amazon認証および承認メソッドは他のサービスプロバイダにも幾つかコピーされていますGoogle 自身企業向け製品の一部でこれを利用できるようにしていますGoogle 自身純粋OAuth 設計企業サービスに向いていないことを認めており、企業サービスには JSON Web Tokens (JWT) の利用を推奨しています

JWT はサービス間の SSOAPI 利用を可能にする規格です。多くの点で JWT は SAML に似ていますが、SAML はややこしくて、XML Security (名前と違って、まったくセキュアではない) の上に構築され、API 利用に向いていないのに比べ、JWT は SAML の主要な目標を、単純かつ使いやす方法で一切の面倒なく達成しています。HMAC 実装ひとつ用意し、JSON の構築と解析の方法を知っておけば JWT は使えます既製品をお求めでしたら、膨大な JWT ライブラリが既に存在していますよ。

ただ Google場合典型的な JWT 利用法よりも高度で、HMAC のかわりに、もっと高度ですがこの分野では人気の低い RSA デジタル署名を利用するよう要求していますGoogleコントロールパネルではアカウント管理者自分企業サービス用に新しい鍵ペアを生成でき、API ログイン署名するために使う秘密鍵ダウンロードできます。こちらのほうが HMAC よりセキュリティは高いですが、Googleプロセス全体を本当に無駄に複雑化していますコントロールパネルしょっちゅう完全に再設計して、前と同じことをしたいのに使い方が違っていて混乱する点は言うまでもありません。JWT 利用の実例必要なら他をあたるようお勧めします。

他に使われている技術は、サードパーティがどんな権限必要としているかをある種の XMLJSON ファイル定義してウェブサイト送信できるようにするサービスのものです。ユーザがあるページを自分アカウント訪問し、ファイルURL (あるいは中身) をそこに貼り付けると、その外部サービスあるいはアプリが求めている権限の一覧やそこに含まれ説明などが表示されるようになっています。それを見て認可したいと思うユーザは、認証情報を生成してそのサードパーティアプリあるいはサービスに貼り付けますユーザは後で無効にしたくなったら認証情報を破棄することができます。これも、開発者おかし負担を強いることなく、すべてのアカウントAPI サービスがあり、権限管理を備え、サービス自体からフローが始まる、実にセキュアな設計です。

承認管理のためにサービスから提供してもらう必要が本当にあるのは、適切な役職 (管理者アカウント所有者など) を持つユーザ自分に割り当てられた権限や (望むなら) 期限を持つ認証情報API 利用のために生成できる何らかのパネルだけです。こうした認証情報はその後、お好みのセキュアな認証システムを通して利用することができます。たとえば HTTP Basic Authentication over HTTPS のような単純なもの、これは事実上どの HTTP ライブラリにも入っていますし、HTTP Digest Authentication、これはもっとセキュアでありながらほとんどの良質なライブラリサポートされていますし、その他 HMAC, RSA, 楕円関数など認証情報ネットに通す必要のない暗号学的テクノロジー活用した認証プログラムに基づくものなら何でも使えます特に HMAC は、承認認証実装するほとんどすべての人 (Amazon や、一部の OAuth 実装も含む) によって既に使われています

こういった種々の実績あるテクニックは、セキュアなプラットフォームを作るために CSRF 対策など複数フレームワーク同士の相性を勉強する必要があるという重荷を軽くしてくれますし、一般的に、既存アーキテクチャワンタッチで装着できるようなモジュール化の実装が可能です。ユーザアプリ認証情報が盗まれる可能性をなくしてくれます。ややこしい CSPRNG を常に使用する必要もありません。このようなシステムOAuth の生まれるずっと前から存在しており、現在でも一般的です。OAuth は、ユーザ認証情報要求したり他に弱点があったりするような一部の劣悪な設計システムよりはセキュリティが良いかもしれませんが、既にある真の設計を置き換えるものではありません。OAuth が解決すると主張する問題点は実のところ、既存の良く設計されたシステムには存在していませんし、「普通実装における」OAuth は実のところ、解決すると主張する問題の多くを招き入れるばかりか、最初存在していなかった問題まで生じさせています宣伝文句と違って、OAuth にすれば自然と驚くほどセキュアになるというわけではなく、むしろ数々の短所実装の困難さを考えれば、他の考え抜かれた選択肢のほうがはるかに優れています

これからサービス設計をして API アクセス提供することになっている方はどうか、ご自分が実現しようとなさっているのが何なのかを本当に考えてください。他の人がやっていることをコピーするだけで済ませたり宣伝を丸呑みしたりしないでください。どうしてもコピーしなければいけないなら、Amazon (これが最善です) や Rackspace, IBM SoftLayer, Linode, VULTR, Zoho, Zoom ほか、API の素直で健全認証システムを構築する方法について現時点で多少なりとも理解のあるところをコピーするようにしてください。

2016 年 4月 Insane Coder

http://no-oauth.insanecoding.org/

ログイン ユーザー登録
ようこそ ゲスト さん