質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

2回答

5664閲覧

Google Apps Script(GAS)でDigest認証を通過するには?

Kenichiro_Yama

総合スコア8

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2016/08/03 06:58

編集2022/01/12 10:55

###実現したいこと

Redmine APIを利用して、チケットの情報をGoogleスプレッドシートで一覧化したい。
そのために、Google Apps Script(GAS)でRedmineのDigest認証を通過して
json形式のデータを取得する必要がある。
どうすればいいか?

###前提

  • Redmine API(REST API)を利用
  • Googleスプレッドシート(Google Apps Script)を利用

###ソースコード
途中まで作ってみました。
最後のリクエスト時に、やはり失敗します。

Google

1function redmineToGoogleSpreadsheet() { 2 3 // RedmineのURLを指定 4 var redmineUrl = "https://hogehoge.com/projects/hogehoge/"; 5 var redmineApiKey = "tekitou6T6nbGu5RUjYe3iN5NqrRL3twXtKB8"; 6 var redmineLimit = 100; 7 var url = redmineUrl + "issues.json?key=" + redmineApiKey + "&limit=" + redmineLimit; 8 9 // optionsを指定 10 var options = { 11 "validateHttpsCertificates":false, 12 "followRedirects":false, 13 "muteHttpExceptions":true, 14 "escaping":false 15 }; 16 17 // 最初のリクエスト 18 var response = UrlFetchApp.fetch(url,options); 19 20 // header情報を格納し、nonceを取得する 21 var headers = response.getAllHeaders(); 22 var key = "WWW-Authenticate"; 23 var arr = headers[key]; 24 var arr = arr.split(","); 25 var nonce = arr[1].replace('nonce="','').replace('"',''); 26 27 // 値を設定 28 var username = "username"; 29 var realm = "realm"; 30 var uri = "/projects/hogehoge/issues.json?key=tekitou6T6nbGu5RUjYe3iN5NqrRL3twXtKB8&limit=100"; 31 var algorithm = "MD5"; 32 var qop = "auth"; 33 var nc = "00000001"; 34 var cnonce = "f16367eeab5979c4"; 35 var pass = "pass"; 36 37 // 再度リクエストを投げる 38 var a1 = username + ":" + realm + ":" + pass; 39 var a2 = "GET:" + uri; 40 41 var da1 = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, a1); 42 var da2 = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, a2); 43 var da3 = da1 + ":" + nonce + ":" + nc + ":" + cnonce + ":" + qop + ":" + da2; 44 var response2 = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, da3); 45 46 var options2 = { 47 'headers' : {'Authorization' : 'Digest username="' + username + '" , realm="' + realm + '" , nonce="' + nonce + '" , uri="' + uri + '" , algorithm="' + algorithm + '" , response="' + response2 + '" , qop="' + qop + '" , nc="' + nc + '" , cnonce="' + cnonce + '"' }, 48 "validateHttpsCertificates":false, 49 "followRedirects":false, 50 "muteHttpExceptions":true, 51 "escaping":false 52 }; 53 54 // 最後のリクエスト 55 var response3 = UrlFetchApp.fetch(url,options2); 56 57}

###備考
散々調べましたが、やり方がわからずで、こちらで質問させていただきました。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

直接の回答ではありませんが、javascript でダイジェスト認証を通過するための方法をみると、MD5の生成以外は通常のPOSTで値のやり取りをしているようです。

【JavaScriptを使ってセキュアなログインを実現する MD5(Digest)認証 - 知らないことがあってもへっちゃらさ】
http://blog.mukairiku.net/2012/03/javascriptを使ってセキュアなログインを実現する-md5digest認証.html

【javascriptのMD5を用いたダイジェスト認証 | 悠雀堂ブログ】
http://www.yujakudo.com/blogs/develop/hash-on-js/digest-auth-by-javascript/

Google Apps ScriptでMD5を利用する方法まではありました。検証環境が無いためテストできませんが、このあたりの情報を組み合わせれば出来るような気がします。

【Google Apps Script で Mixpanel の解析データを取得する | hacknote】
http://hacknote.jp/archives/2043/

【今日もどっこい生きている: Google Apps Scriptでサービスを監視する】
http://blog.ayakix.com/2012/11/google-apps-script.html

投稿2016/08/03 17:38

kei344

総合スコア69364

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kenichiro_Yama

2016/08/04 01:17

ありがとうございます! 確認します!
guest

0

http://project-p.jp/halt/2011/05/27/195611/

こちらを確認してみてはいかがでしょうか。
あと「Google App Script」ではなく「Google Apps Script」でした。
sが無かったですね。

投稿2016/08/03 07:50

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kenichiro_Yama

2016/08/03 08:21

回答ありがとうございます。 上記のページには行きついたのですが、Basic認証ではなくてDigest認証なので、ちょっと内容が違うんです。 でも、ありがとうございました。
退会済みユーザー

退会済みユーザー

2016/08/04 05:05

違う内容でしたか…お力になれず申し訳ないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問