mrubyでOAuth2
IoTでOAuth2の実践編で蟹さんのmrubyからDropboxにファイルを放り込んでみます。
まず準備にmruby VMにmruby-base64とmruby-jsonをつっこみます。mruby-jsonにはfileアクセスがありリンクできなかったので、fileアクセスをとるprを出してマージしてもらいました。
次はDropboxのdeveloperのサイトでアプリを作ります。Full accessにしておきます。これでApp keyとApp secretが入手できました。
次はブラウザーで以下のURLを叩いて、アクセス許可のcodeを手に入れます。
忘れていたのですが、Dropboxの認証コードという記事を書いてました。
App keyとApp secretはmrubyのスクリプトにハードコードしますが、codeはスクリプトがリダイレクトやフォームで受け取るようにするがいいです。まだHTTPやHTTPSのLISTENの実装がないので、とりあえずハードコードします。
APPKEY = ""
APPSEC = ""
CODE = ""
yabm = YABM.new
yabm.netstartdhcp
ntpaddr = "10.0.1.18"
yabm.sntp(ntpaddr)
header = Hash.new
header.store('User-Agent', "test-agent")
header.store('Authorization', "Basic " + Base64.encode(APPKEY + ":" + APPSEC))
ustr = "/1/oauth2/token?grant_type=authorization_code&code=" + CODE
res = SimpleHttp.new("https", "api.dropbox.com", 443).post(ustr, header)
これでAccess Tokenがjsonでもらえるのでjsonのパーサーに食わせます。
data = JSON::parse(res.body)
accesstoken = data["access_token"]
この操作は一回だけで、Access TokenはFlashなどに保存しておく必要があります。
Access Tokenを使ってファイルをuploadします。
path = "yabm"
name = "morimori.txt"
body = "Hello mruby on YABM !"
header = Hash.new
header.store('User-Agent', "test-agent")
header.store('Authorization', "Bearer " + accesstoken)
header.store('Content-Type', "application/octet-stream")
header.store('Dropbox-API-Arg', "{¥"path¥": ¥"/" + path + "/" + name + "¥",¥"mode¥": ¥"add¥",¥"autorename¥": true,¥"mute¥": false}")
header.store('Body', body)
res = SimpleHttp.new("https", "content.dropboxapi.com", 443).post("/2/files/upload", header)
yabmというディレクトリにmorimori.txtというファイルが出来ているはずです。
OAuth2はOAuthのようにHASH関数が必要ないので良いです。
もしAccess Tokenが入ったモジュールを盗まれた場合には自分のDropboxにFull accessされる可能性があるので、「設定」の「リンク済みのアプリ」から削除するのが良いです。
Author And Source
この問題について(mrubyでOAuth2), 我々は、より多くの情報をここで見つけました https://qiita.com/yamori813/items/8f81bed0e0a3d975d51f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .