OAuth2.0 Authorization code flow を使用したリフレッシュトークン取得
OAuth2.0 Authorization code flow を使用したリフレッシュトークン取得のシーケンスを、Salesforceとservicenowで確認する。
(1)以下のシーケンスで、認可コードを取得する。(クリックで拡大)
(2)上記(1)で取得した認可コードを使って、以下のシーケンスでリフレッシュトークンを取得する。(クリックで拡大)
■その他関連リンク
OAuth2.0 Authorization code flow を使用したリフレッシュトークン取得のシーケンスを、Salesforceとservicenowで確認する。
(1)以下のシーケンスで、認可コードを取得する。(クリックで拡大)
(2)上記(1)で取得した認可コードを使って、以下のシーケンスでリフレッシュトークンを取得する。(クリックで拡大)
■その他関連リンク
Salefoorceで、365日に設定したリフレッシュトークンを取得する例
(1)Salesforceにログイン
(2)Classc UIに変更(Lightningでも可能と思われるがわからないので)
(3)「設定」→画面左ペインで「ビルド-作成-アプリケーション」→右ペインで接続アプリケーションの「新規」を押す
(4)以下の画面の例のように設定する。
(4.1)接続アプリケーション名は “abc”
(4.2)API参照名は”abc”
(4.3)取引責任者は自分のメールアドレス
(4.4)OAuth設定の有効化にチェック
(4.5)選択したOAuthの範囲:テスト時はフルアクセス+いつでも要求を実行(refresh_token…)
注意!! これはサンプルです。実際に利用する際は権限の範囲は検討してください。
(4.6)WEBサーバフローの秘密が必要にチェック
(4.7)開始URLに、自分のSalesforceのURL
以上で保存し、以下の画面の「コンシューマ鍵」「コンシューマの秘密」をコピーする
(5)設定→画面左ペインの「アプリケーションを管理する – 接続アプリケーション」で”abc”を選択
(5.1)ポリシーを編集ボタンを押す
(5.2)更新トークンポリシーで「次の時間が経過したら更新トークンを有効期限切れにする」を365日を設定する。
(6)Salesforceにアクセスしているブラウザ(セッションがあるブラウザ)で以下のURLを入力
https://****.my.salesforce.com/services/oauth2/authorize?response_type=code&client_id=****&redirect_uri=http%3A%2F%2Flocalhost
サーバ名は自分のSalesforceのサーバ
client_idは自分のクライアントID(コンシューマ鍵)
(6.1)以下のように確認画面がでるので「許可」を押す。
(7)以下のようにリダイレクトされるので、code=****の部分を保存
http://localhost/?code=*****
(8)以下のシェルを書いて実行する。
#!/bin/sh CLIENT_ID="コンシューマ鍵" CLIENT_SECRET="コンシューマの秘密" SERVER="自サーバ.my.salesforce.com" CODE="上記 (7)で取得したコード" #GET REFRESH TOKEN curl -X POST https://$SERVER/services/oauth2/token -d "grant_type=authorization_code" -d "client_id=$CLIENT_ID" -d "client_secret=$CLIENT_SECRET" -d "code=$CODE" -d "redirect_uri=http%3A%2F%2Flocalhost"
上記シェルを実行すると以下の結果が取得できる。
{"access_token":"***","refresh_token":"***","signature":"****","scope":"refresh_token full","id_token":"","instance_url":"https://***.my.salesforce.com","id":"https://login.salesforce.com/id/******","token_type":"Bearer","issued_at":"*****"}
上記jsonの、refresh_tokenが取得しようとしたリフレッシュトークンとなる。
SalesforceからREST-APIでデータ取得するサンプル
Userオブジェクトから、最終更新日が 2022/3/5 15:03:00(JST)以降のデータのNameを取得する例。
以下の例の中の$ACCESSはアクセストークン。この取得方法は “Salseforceのデータをcurlで取得” を参照。
DATE="2020-03-05T15%3A03%3A00%2B09%3A00" curl -H "Authorization: Bearer $ACCESS" "https://$SERVER/services/data/v50.0/query/?q=SELECT+Name+from+User+where+LastModifiedDate%3E$DATE"
Name,Fax,Division,SIgnatureを取得する。
DATE="2020-03-05T15%3A03%3A00%2B09%3A00" curl -H "Authorization: Bearer $ACCESS" "https://$SERVER/services/data/v50.0/query/?q=SELECT+NAME%2CFax%2CDivision%2CSignature+from+User+where+LastModifiedDate%3E$DATE"
1.Using refreshtoken
#!/bin/sh MY_INSTANCE="miura2-dev-ed" CLIENT_ID="*** your client id ***" CLIENT_SECRET="*** your client secret ***" REFRESH_TOKEN="*** your refresh token ***" #---------------------------------------------- # Get Access token from Refresh token. #---------------------------------------------- RESULT=`curl -X POST https://$MY_INSTANCE.my.salesforce.com/services/oauth2/token -d "grant_type=refresh_token" -d "client_id=$CLIENT_ID" -d "client_secret=$CLIENT_SECRET" -d "refresh_token=$REFRESH_TOKEN"` ACCESS=`echo $RESULT | awk 'BEGIN{FS="access_token\":"}{print $2}' |awk 'BEGIN{FS=","}{print $1}' | sed -s 's/\"//g'` #---------------------------------------------- #Get data using Access token #---------------------------------------------- curl -s https://$MY_INSTANCE.my.salesforce.com/services/data/v52.0/sobjects/Account -H "Authorization: Bearer $ACCESS" -H "Content-type: application/json"
リフレッシュトークン自体を取得するには、Salesforceでリフレッシュトークを取得する を参照のこと。