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

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

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

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

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

1247閲覧

GASでOneLoginというサービスのAPIのauth2トークンが取得できない

shisakan

総合スコア1

Google Apps Script

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

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/08/14 15:17

前提・実現したいこと

GAS(Google Apps Script)でOneLoginというシステムのAPiを叩くべく、そのための最初の一歩としてtokenを取得したいと考えています。

APIリファレンスのページ
https://developers.onelogin.com/api-docs/1/oauth20-tokens/generate-tokens-2

curlのソースサンプルを基にGASを書いてみたのですが、実行したら以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

Exception: https://api.us.onelogin.com のリクエストに失敗しました(エラー: 400)。サーバー応答の一部: {"status":{"error":true,"code":400,"type":"bad request","message":"The authorization information is missing"}}(応答の全文を見るには muteHttpExceptions オプションを使用してください)

ページのエラーメッセージのところを見るとclient_idとclient_secretがおかしいそうという事で書いてありましたが、公式のDeveloperページにはGASのサンプルコードがなく、近しそうなNode.jsのコードの変数にしてみましたが、結果は同じでした。
こちらのエラー解消に必要な修正についてご教示いただけますと幸いです。

GASのソースコード

Google

1 2function getOneLoginToken() { 3 4 var ONELOGIN_CLIENT_ID = 'XXXXXXXXXXXXXXXXXXXXXXX'; 5 var ONELOGIN_CLIENT_SECRET = 'XXXXXXXXXXXXXXXXXXXXXXX'; 6 7 var url = 'https://api.us.onelogin.com/auth/oauth2/v2/token'; 8 9 var headers = { 10 'Authorization': { 11 'client_id': ONELOGIN_CLIENT_ID, 12 'client_secret': ONELOGIN_CLIENT_SECRET 13 }, 14 'Content-type': 'application/json' 15 }; 16 17 var data = { 18 'grant_type': 'client_credentials' 19 }; 20 21 var options = { 22 'method': 'post', 23 'payload': JSON.stringify(data), 24 'headers': headers 25 }; 26 27 return token = UrlFetchApp.fetch(url, options); 28}

試したこと

GASではなくcurlで書くと以下で、これは問題なくレスポンス帰ってきます。
(サンプル通りなので通って当たり前ですが・・すみません)

curl 'https://api.us.onelogin.com/auth/oauth2/v2/token' \ -X POST \ -H "Authorization: client_id:XXXXXXXXXXXXXXXXXXXXX, client_secret:XXXXXXXXXXXXXXXXXXXXX" \ -H "Content-Type: application/json" \ -d '{   "grant_type":"client_credentials" }'

GASのコードで試した事は、以下です。
(1)muteHttpExceptionsオプションを指定してより詳細なログを見ようとしたが、オプションを指定してもより詳細なエラーメッセージは得られませんでした。
(2)「'」を「"」に全部置換してやっても同じでした。
(3)同じjs?のNode.jsのように変数名をAuthorization→authに、client_id→userに、client_secret→passに変更しても同じでした。

補足情報(FW/ツールのバージョンなど)

特にありません。

よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

単純にGASで

'Authorization': { 'client_id': ONELOGIN_CLIENT_ID, 'client_secret': ONELOGIN_CLIENT_SECRET },

"Authorization: client_id:XXXXXXXXXXXXXXXXXXXXX, client_secret:XXXXXXXXXXXXXXXXXXXXX"

に変換できてないだけだと思いますが、、

こんな感じでいけませんか?

'Authorization': 'client_id:${ONELOGIN_CLIENT_ID}, client_secret:${ONELOGIN_CLIENT_SECRET}',

投稿2020/08/15 06:41

szk.

総合スコア1400

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

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

shisakan

2020/08/15 15:56

ありがとうございます! いただいた内容に沿って形を変えて、変数のところを+で区切る形にしたところうまく通るようになりました! ハマっていたので本当に助かりました!!神
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問