はてなキーワード: OAuth認証とは
はてブのホットエントリ(総合)で月内に数多く[あとで読む]タグを集めたエントリ
272あとで/1803users この本がスゴい!2020: わたしが知らないスゴ本は、きっとあなたが読んでいる
257あとで/1367users 鹿児島中央駅から新函館北斗駅まで新幹線の全駅に下車してきたので全力で紹介する_PR【駅メモ!】 | SPOT
247あとで/2110users ぼんくらITエンジニアでもYouTubeとスタサプでTOEIC 900点突破できたので勉強法をまとめていく - だいたいよくわからないブログ
235あとで/1299users 「イラストでわかるDockerとKubernetes」は完全に良書 - Cloud Penguins
222あとで/1463users 売れるアプリにするコツ100個書きます(吐血) - Crieit
203あとで/1011users JavaScriptの基礎知識をGIFアニメで分かりやすく解説 -総まとめ | コリス
192あとで/1373users もしあなたが急にAndroidアプリを業務で作るはめになった場合の選択肢(2021年初頭版) - Qiita
190あとで/959users OAuth認証とは何か?なぜダメなのか - 2020冬 - r-weblife
183あとで/1146users 一人前のプロマネってどんな人? プロジェクトマネジメントのスキルセットとは-誰も教えてくれないプロマネのコツ | Mammoth Project
180あとで/1008users Pythonで仕事をする人のための書籍まとめ2021 - 学習, 業務効率化, アプリ開発からデータサイエンスまで - Lean Baseball
173あとで/1647users 【練習内容公開】イラストを100日練習しました|都路 燕禅|note
170あとで/2469users 僕のしょうもない人生を紹介します - いまトピ
170あとで/1019users 「フリーランス・副業向けサービス カオスマップ2020年完全版」が公開 - Digital Shift Times(デジタル シフト タイムズ) その変革に勇気と希望を
163あとで/1186users 9割の人が知らない再現性の危機 - 本しゃぶり
157あとで/1019users Mac を買ったら必ずやっておきたい初期設定を、全て自動化してみた | ulwlu | Zenn
154あとで/751users CTOの頭の中:技術投資を最適化する|Shin Takeuchi|note
152あとで/1503users 僕らはいつまでUSB Type-Cケーブルを選ぶのに迷うのだろう…もう間違えないための覚え書き - Magnolia Tech
148あとで/2347users 全財産を使って外車買ったら、えらいことになった|岸田 奈美
141あとで/1040users 英語の発音について概説する - Amosapientiam
135あとで/648users 技術選定/アーキテクチャ設計で後悔しないためのガイドライン - Qiita
131あとで/2088users Amazonで「鬼滅の刃」のコミックを買ってしまったのに、どうしても読み始める気になれない。 | Books&Apps
131あとで/1089users ステーキをおいしく焼く理論。料理家・樋口直哉が教える、肉の焼き方「新常識」【保存版】 - ソレドコ
129あとで/855users Webディレクターのスキルツリー - NMY
129あとで/915users Kubernetes 1.20からDockerが非推奨になる理由 - inductor's blog
126あとで/745users Web制作の時短に!2020年の便利オンラインツール・ベスト100選 - PhotoshopVIP
121あとで/880users 【総まとめ】2020年公開のすごいPhotoshopチュートリアル、作り方厳選まとめ - PhotoshopVIP
121あとで/613users ドメイン駆動設計を導入するために転職して最初の3ヶ月でやったこと[DDD] - little hands' lab
121あとで/864users 家で筋トレを続けるための簡単な「仕掛け」を取り入れてみたら、筋トレが楽しくなって習慣化した話 | Fun Pay! | あたらしい自分、はじめよう。楽天カード
120あとで/614users Micro Frontends Architecture Patterns | okmttdhr | Zenn
会社の新事業(?)として、催し物関するまとめサイト的なもののDB〜デザインまでを1人でやっている。平たく言ってしまえば会員非会員制の wordpressを1から作る物で、ユーザーのログイン画面(Oauth認証含む)から記事一覧画面〜詳細画面まで計20ページ以上を回している。他社の事情は分からないにせよ、それにしても異常過ぎるページ量だ。Ruby On Railsで作った?とされる株式会社リスタなどと見比べてみてもざっと2倍はある。
案件としては地雷なのは分かっていたが、他に就職出来る所がないから仕方なく入社。転職するにもある程度形にしないと次の就職で響く。30過ぎてただでは行かないが、転職のタイミングがずれるのはかなり痛い。終わるに終わらせられず大変困っている内に、早8ヶ月の月日が経過しようとしていた。
社員数名の会社なのだが、上は上で怪しい物だ。意味不明に自信満々なのも気になる所。まあ、小規模な会社の上層部なんてそんなもん。うちは大手に無い何かを持っているだ、財務諸表に出て来る上場企業の売上高を見ずに良く言えたもんだ。「複雑になってきたか ら、良くはなってきている」等俺から見て意味不明な言葉の数々。一体この企画は何処に向かおうとしているのだろう か?このままでは半永久的にリリースが始まらない。以下、やる気などとうにない俺が辞めたい理由を延々と言うので付き合って欲しい。
理由1は俺の主観的な物であるが、この世の全ての催しをターゲットにしているからだ。結局ATNDとconpassのような集客数100人〜1,000人くらいの催し、会場のイスをみんなで準備するような催しに行く俺。やるならやるで地域を絞る、集客数を絞ると言ったものがあればもうちょい話に乗っただろう。
今やってる事は催しの存在を知ってもらう事に特化してるが、何処のサイトでもそれはまあ同じなんだよな。ただというか席数がどれだけか?って機能がないから、当日の集客状況の目処が立てにくい。だからあんま薦めにくいし、実際どれだけ反響あったかが調べにくい点で個人的にアウトだ。なもんで小規模な催しならばガンガンpeatix等を使って欲しいと思っている。俺が今の話のネガティブキャンペーンを展開するのも、仮にリリースしてもそこまでサポートができず、恐らく無駄な機能の追加に時間が割かれるからだ。これでは主催者に申し訳ないし、俺がどうしようもないのでこのような形を取らせて頂いた。
そもそも集客力の低い、集客目標数の低い催しは広告費をかけないしかけられないため、おおっぴろに告知したりはしないように見える。この為一般に知られていない催しの方がこの世には多いと推察する。さらに高年齢層で携帯電話を持っていない人がメインの場合など、Webサイトを使わず無駄な経費を使わなくとも、成り立ってる催しすら有りそうだ。「最初は大きい催しの広告を...」とまたまた意味不明な事を。催しの主催者や出展者の事を考えてないのに何ができようか?
以下蛇足ながら、大風呂敷を広げる事が良いとは限らないよと言う事例を延々と話す。最近イオンモールがばかばか立っている。しかしながら広過ぎて特定の店しかいかないし、商品探しにくいんだよねぶっちゃげ。時たま利益を回収できないテナントから撤退していくのを目にする。
さて2016年11月現在第2四半期報告書(第92期第2四半期(自 平成28年6月1日 至 平成28年8月31日)) P28を見るに、GMS事業は183億1800万円もの赤字を計上している。代わりに、スーパーマーケット事業は135億1500万円の黒字、小型店事業は営業利益22億9500万円。なんと巨大スーパーがイオン全体のお荷物になってしまっている。何年計画なのかは知らないが、数字の上では止めた方がよさそうである。
一方この手のスーパーで一番重要なのは食品だろう。自分の家計を見るに、毎月収入の20%以上を食費が占めている。ここで毎月各個人の収入の20%近辺をメシが占めていると仮定すれば、各コンビニ、スーパー、ドラッグストアなどはそこからどうしのぎを削るかの戦いなはずだ。自分の行きつけのドラッグストアなんぞは入ってからすぐの所に、在庫処分であろう新鮮味の欠けるジュースの冷蔵庫。専門外の店なのにカップラーメンに明るかったり、やっぱ食品と言うのは売る方からすりゃあ撒き餌なんだろうな。実際問題そんな広い店舗は要らないこともあるし、イオンの事例が当てはまるのかは別にせよ、大風呂敷を広げるのは考えものだと思っている。
2点目は資金面が怪しいからだ。さて今の企画は会員からお金を取る流れだ。つまり月々の売上(貸方)は、「売上高(円)=会費(円/人)×有料会員数(人)」分を見込む。一方で支出(借方)「人件費累計(円)=従業員数(人)×一人当たりの人件費(円/人)」の人件費がかかる。以下その様子をこのシートにまとめた。フェルミ推定の参考にでもして欲しい。
仮に事業開始までに12ヶ月かかり、会員登録が出来たとして、月々10人ペースで会員が増加したとする(退会者を考えてはみたが、これでも現実的でない数字)。月々の人件費190,000円、従業員数1人、会費を980[円/人]と仮定する。まず利益が発生するまでに必要な最低の金額が228万円、そして俺の人件費がペイされるのが60ヶ月かかり、利益率で+になるまで32ヶ月必要だ。月々20人ペースで会員が増加したとても、40ヶ月はかかりそれまでは少なくとも−となる。
一方で何となく俺が時期を伸ばしたら、作って終わりになる危険性もありそう。加え営業さんが居たとしたら、ただでさえ零細企業で後ろ盾ないはずなのに月10件は無理もありそうな話だ。と言うのはさておき、Webサービス言えど初期投資の人件費に少なくとも数百万かかるし、それまでの間利益は一切出ないと言うのは覚えて帰って欲しい。これはゲーム会社が販売を1ヶ月延期すると、売上を回収するのが1ヶ月遅れるため利益率が下がる事に似ている。
上は悪い人ではなさそうだったけど、負ける方が濃厚な気がするし、負けが込んでヤケになりそうな気もする。心苦しいが履歴書と職務経歴書を書く時間となったようだ。あんま名前を出したく無かったため、敢えてこのはてな匿名ダイヤリーに書かせて頂いた次第である。このような場を提供して頂いている、株式会社はてなには感謝の気持ちである。
「プロテクトかけたアルゴリズムを実装したバージョンに差し替え」たなんて言われると本当に「プロテクト」がかかっているのか確かめてみたくなるのが人情というもの。というわけで、プロテクト強化後のもふったー(v0.9.6b)からconsumer secretが抜けるか試してみた。結論から言うと、あっけなく取り出せた。以下に手順を記す。
動作がよくわかっていないアプリケーションを解析して仕様を明らかにすることをリバースエンジニアリングと呼ぶ。ソフトウェアのリバースエンジニアリングは基本的に対象を逆アセンブルしてひたすら読むことによって行う(その補助に1命令ずつ実行してレジスターやメモリーの様子を観察することもある)。しかし、よっぽど小規模なものでなければオブジェクトコード全体を逆アセンブルして最初から最後まで読むなんてのは不可能だ。人間の読速度には限界があるし、時間も有限だからだ。そして、詳しい動作を知りたい部分というのは全体のごく一部であることが多いので全逆アセンブリを読むのには非常に無駄が多い。
だから、リバースエンジニアリングではいかに詳らかにすべき動作を行っているコードを絞り込むか(=読むべき逆アセンブリを少なくするか)が重要になる。
この場合も同様だ。TwitterのGUIクライアントを頭から読むのは到底無理なので、どうやって解析すべきコードの範囲を狭めるかを考えた。それにはOAuth認証においてconsumer secretがどのような役割を果たすのかを知る必要がある。
OAuth認証で、consumer secretはそのままサーバーに送信されたりはしない。signatureの生成にHMAC-SHA1が使われ、その鍵にconsumer secretが使われる。HMACは次のように算出される。
HMAC (K,m) = H ((K ⊕ opad) ∥ H ((K ⊕ ipad) ∥ m))
ここで
である。
まずはこのあたりから攻めようと思った。SHA-1の計算にはいくつか特徴的な定数が使われるので、そこからSHA-1の計算に使われているであろう関数444190を特定する。この関数のエントリーポイントに中断点(ブレークポイント)を設定してOAuth認証をさせるべくもふったーの「ブラウザで認証」ボタンを押す。狙い通り中断するので関数を抜けるまで実行する。関数401100の4012DAに出た。少し下を見るとこのようになっている。
CPU Disasm Address Hex dump Command Comments 00401311 |. 33F6 xor esi, esi 00401313 | 8D8C24 A40000 /lea ecx, [local.54] 0040131A |. 394C24 14 |cmp dword ptr ss:[local.90], ecx 0040131E |. 75 0E |jne short 0040132E 00401320 |. 3BF5 |cmp esi, ebp 00401322 |. 73 29 |jae short 0040134D 00401324 |. 0FB68434 A400 |movzx eax, byte ptr ss:[esi+esp+0A4] 0040132C |. EB 21 |jmp short 0040134F 0040132E | 3BF5 |cmp esi, ebp 00401330 |. 73 1B |jae short 0040134D 00401332 |. 8B5424 18 |mov edx, dword ptr ss:[local.89] 00401336 |. 52 |push edx ; /Arg1 = [LOCAL.89] 00401337 |. 8D8C24 FC0000 |lea ecx, [local.33] ; | 0040133E |. 8BD6 |mov edx, esi ; | 00401340 |. E8 CB4D0000 |call 00406110 ; \mofooter.00406110 00401345 |. 83C4 04 |add esp, 4 00401348 |. 0FB6C0 |movzx eax, al 0040134B |. EB 02 |jmp short 0040134F 0040134D | 33C0 |xor eax, eax 0040134F | 34 5C |xor al, 5C 00401351 |. 888434 B80000 |mov byte ptr ss:[esi+esp+0B8], al 00401358 |. 83C6 01 |add esi, 1 0040135B |. 83FE 40 |cmp esi, 40 0040135E |.^ 72 B3 \jb short 00401313 00401360 |. 895C24 3C mov dword ptr ss:[local.80], ebx
0040134F | 34 5C |xor al, 5C
が注意を引く。もしかしてこれはopadとのxorではないか?
00401351 |. 888434 B80000 |mov byte ptr ss:[esi+esp+0B8], al
はxorした結果を格納している。
先ほどの中断点は無効化しこのループを抜けた地点である401360まで飛ばす。この時点でesp+0B8を見ると次のようになっている。
Hex dump 64 2E 16 64|37 04 32 6D|0F 0D 26 29|3A 37 1F 2F| 18 69 6E 6E|0D 25 29 33|11 34 29 69|12 36 24 1E| 05 16 33 6A|04 3B 0E 68|7A 5C 5C 5C|5C 5C 5C 5C| 5C 5C 5C 5C|5C 5C 5C 5C|5C 5C 5C 5C|5C 5C 5C 5C|
あとはこれと5Cとをxorすればconsumer secretが手に入る。終わり。
はてなは増田のスーパーpre記法で半角の<>が含まれていると投稿が出来ないのを早く直してください。
もふったーの作者から反応があった。「本気だったつもりのもふったーのデバッグ処理が残ってた」らしい(http://blog.livedoor.jp/blackwingcat/archives/1763951.html)。修正したとのことなので最新版(v0.9.6e)を見てみた。確かに若干変更されているが何の問題もない。SHA-1の呼び出しに中断点を設置して渡されているバイト列を見るだけ。
CPU Disasm Address Hex dump Command Comments 00401324 |. 8D4424 20 |lea eax, [local.102] 00401328 |. 50 |push eax ; /Arg1 = 00401329 |. E8 623A0400 |call 00444D90 ; \mofooter.00444D90
ここでeaxが指すメモリーを見ると以下のようになっている。
01 23 45 67|89 AB CD EF|FE DC BA 98|76 54 32 10| F0 E1 D2 C3|00 02 00 00|00 00 00 00|40 00 00 00| 40 4F 73 53|62 54 5C 7E|59 57 53 42|55 45 7A 57| 61 47 7A 5B|42 4F 7B 61|5D 66 5E 7A|42 7F 40 63| 79 66 05 55|79 4C 60 42|02 10 36 36|36 36 36 36| 36 36 36 36|36 36 36 36|36 36 36 36|36 36 36 36|
Rails + Twitter bootstrapでエロ動画ソーシャルブックマークWebサービス、ソーシャルオナニー=ソシャニーを作りました。
こちらです http://www.socianie.com
【なにこれ?】
かっこつけた言い方をすると、
「いっぱいエロ動画あるけど結局みんなどんなお宝動画で抜いてるの?という日常的な疑問への答え」
とかでしょうか。
実際どんな事が出来るサービスかというと、基本的には、はてなブックマークのようにエロいページをブックマークする(その時に、コメントを付記することができる)というものです。
サイト内の他のユーザーをフォローすることができ、TwitterのようにTimelineのようなものがあってそこにフォローしている人がブックマークしたページが表示されます(そのページが、xvideos,fc2などの有名サイトならば埋め込みプレーヤーですぐ再生出来ます。)
つまり、フォローしてる人の最新お気に入りエロ動画がチェックできます。
ブックマークされたページはそれぞれが固有のページを持っており、タグを付ける事ができます。
全ユーザーのブックマークしたものは動画一覧で横断的に見ることができ、並び替え・検索などが出来ます。
ブックマーク数で今日のランキング今週のランキングなどが見れます。
あと、累計ブックマーク数によってユーザーのランクが上がったりします。
TwitterのOAuth認証でログインが出来ます(Twitterにツイート投稿などはしません。また、サイト内の名前アイコンもTwitterのものを流用するかどうかも自分で決められます。)
①ソーシャルな機能。他にも世の中に色々素晴らしいエロサイトがありますがそれらはソーシャル機能を持つものが少ない。
②上記の話とちょっと被ってますが、他のサイトは基本コンテンツ自体を自動クローリングするけれどソシャニーはそこをユーザー自身に委譲しているため、集まってくる動画の質はそれに比べて上がるんじゃないかというのと、
③エロサイトにありがちな出来るだけごちゃっと感を無く広告も無しでTwitter bootstrap使って小綺麗な感じ
【作成後記】
Webサービス作るならRailsかな楽で便利らしいしというざっくりとしたイメージからRailsで作り始めましたが、
ネットの情報や入門書に取り組んでもサンプルと同じモノは作れても実際自分が作りたいモノになると、で、どうやるの?となりなかなか進みませんでした。
Railsは色々と勝手によろしくやってくれる機能が多すぎて実際何が起きてんの?というのがわかりづらいというのが第一印象でした。
色々試行錯誤した結果、一番参考になったのはRails tutorial( http://ruby.railstutorial.org/ruby-on-rails-tutorial-book )でした。
英語ですがバージョンは新しいしBootstrapの使い方もわかるしサンプルがTwitterクローンサービスを作ろうというなかなかおもしろいものなので途中で飽きること無く取り組めました。
何かを学ぶ時は、モチベーションが続く形の学び方が一番いいと思いました。
僕はエロ動画が大好きなので、エロサイトというのもモチベーションの1つです(ただ、作業中に脱線して気づいたらキーボードではなく下半身に手が伸びているという事もありました。)
また、上記のチュートリアルはテスト駆動開発なのでSpecのテストをモリモリ書いているのですが、とりあえずはテストに関しては何をやってるのかざっと眺める程度で精読しませんでした。
まずは全体像を把握して何が必要か把握したかったからです。結果的に最後までやりきれたので良かったと思います。
あとは、Rails固有の知識ではなくWebサービス全般の知識で足りないな、と思ったときはネット上や本屋の立ち読みで済ましました。
ネットで細切れにお勉強している場合、本屋で体系的にまとまっている本をざっと読むと意外に抜けてる知識が保管されたり脳内にインデックスが作れるのでいいと思いました。
理由はみんなが良い良いというので乗っておくかという安易なものです。
実際のところgitの良い所を使い倒せているのかというと全くそんな事ないですね。
せいぜいstash位でしょうか。あとbisectとか。
リポジトリは最初はDropBoxに作ってたのですが、途中からBitbucketを使いました。
GitHubを使わなかった理由はBitbucketはプライベートリポジトリが無料で持てるからです。
また、恥ずかしがり屋なのでGithubで公開は敷居が高いと感じたからです。
初のRailsプロジェクトというのもありソースがイケてないので恥ずかしいのです。
いつかイケメンなコードをGithubで公開してオレツエーしたいものです。
サーバーはエロOKのところを探すのがなかなか難しく結局海外のVPSを使いました。
Linodeというところですが、他との違いを挙げるとiPhoneアプリ経由で再起動などが出来たりします。あまりこの機能使ってないですが。
構成はpassenger+apacheで、DBはSQLiteで特にLBなどはないです。
諸々構築後に人気が出た時困らないように負荷分散のお勉強なんぞもやりかけましたがまずは不要かなということで辞めました。
ちなみにサーバーがUS西海岸なのでSSHで作業するとエディタがちょっともっさりすることがありました。
プロジェクト管理は、会社でも使ってるのでRedmineかなと思ったのですがどうせ一人だしRedmineのUIすきじゃないのでTrello( https://trello.com/ )を使いました。
TODO,Doing,Done,Bug,Suspendのリストを作ってやること忘れないように管理しました。
ふと出先で思いついた機能とかをiPhoneでスイっと追加など出来て便利でした。
正月に公開してお友達界隈で見てもらったんですが、よかれと思って作ったChrome拡張にCSRFの対策が不備あり結局ブックマークレットにしたり、
ソースを見てもらったら設計がRestfulじゃないとかControllerがfat過ぎるModelに押しこめなどアドバイスをもらえたり無知な僕には色々とお勉強になりました。
出来たものはしょぼいものですが、「Webサービス作ったことないコンプ」は少し解消出来た気がします。
以上、月19ドルも払ってるのにお友達だけで使われてるのも寂しいので増田でまとめついでに宣伝してみました。
叩かれるんでしょうか。怖いです。いじめないで。
Twitterの@logoutははまちちゃん(ぼくはまちちゃん!)なのではないかと思われる。なぜかというと、このアカウントで「こんにちはこんにちは!」と発言しており(以下のURLから確認できる)、名前が「Hamachiya2」となっているからである。
https://twitter.com/logout/status/85500046010884096
このアカウントで呟かれている内容の全貌が気になるかもしれないが、それを確認するために以下のURLにアクセスしても無駄である。
普通のPCから普通のWebブラウザを使って上のURLにアクセスしても、@logoutの発言内容は表示されず、代わりに「Twitterからログアウトしますか?」と表示される。これではダメだ。
@logoutの発言内容を確認するには、例えばTogetterを介せばいい。
どうしてこのアカウントのお話をしているのかというと、iPadのSafariの場合は上に示した挙動にならないからである。http://twitter.com/logout にアクセスすると、ログアウト確認ではなく、@logoutの発言内容が表示される。
これが問題になるのは、TwitterのOAuth認証に依存しており、頻繁にユーザを変更するWebサービスを開発した時である。
ご存知の通り、TwitterのOAuthを認証の代わりに使用するWebサービスにログインする場合、まずTwitterそのものにログインしなければならない。OAuthは「このWebサービスに、あなた名義でTwitterのAPIを叩く権利を与えますか?」と訊きにくるのが肝であるから、当然ながら「あなた」名義で予めログインし、OAuthに訊かれる前にTwitter(と自分のWebブラウザ)に「あなた」とは誰かを教えておく必要がある。
残念なことに、この認証方法を採用すると、ユーザ切り替えのたびにユーザは「Webサービスからのログアウト」と「Twitterからのログアウト」の二度手間を強いられることになる。Webサービスからのログアウトだけでは不十分で、次に別のユーザでログインしようとした際に「どのユーザでログインしますか?」と訊いてこなくなってしまう(ついさっきログアウトしたユーザで再度ログインしてしまう)。何故ならTwitterは、既に誰かの名義でログインしている状態だと、「あなたが誰か、私は既に知っていますよ」と言わんばかりにユーザ認証をスキップするからである。
ユーザのストレスを減らす方法は、せいぜいWebサービスからログアウトした直後の画面に「このページからTwitterログアウトできます」というリンクを張っておくくらいのものである。ここでいよいよ、先ほどのURLが登場する。 http://twitter.com/logout へのリンクを張っておけば、ユーザは「ログアウトしますか?Yes/No」に答えるだけで済むはずだ。
この方法はうまくいった…iPadのSafariを除いては。iPadで http://twitter.com/logout を押すと、@logout(はまちちゃんのアカウント)のTweet一覧に飛ばされる。ログアウトはできない。
どうしてこのような仕様になっているのか、私にはよくわからない。また、どこにリンクを張れば、どのようなデバイスでもお手軽にTwitterからログアウトできるのか、わからない。ご存知の方がいらしたら、是非とも教えていただきたい。