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

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

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

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

OAuth 2.0

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

Q&A

0回答

1815閲覧

OAuth認証の際に、OAuth認証許可設定を行った後、OAuth認証許可設定直前のページを表示したい

退会済みユーザー

退会済みユーザー

総合スコア0

OAuth

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

OAuth 2.0

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

0グッド

0クリップ

投稿2016/09/24 20:03

###実現したいこと
表題の件です。

javaで作られた帳票出力するAPIがあるのですが

(1)あるユーザがリンクを踏むと、上記java帳票出力APIにアクセスします。

(2)java帳票出力アプリは、帳票出力の元となるデータを、SalesfoceにOAuth認証して取得しにいきます。

(3)(2)で、まだSalesforceよりアクセストークンが取得していない場合は、SalesforceのOAUTH認証画面が表示され、許可をすると、その後、Salesfoce側に事前に設定したcallbackURLをSalesfoceが参照して、java帳票出力APIのcallbackURLに戻ってきます。

(4)(3)で受けっとったjava帳票出力APIのcallbackURLの処理で、
アクセストークンを取得を試しみて、取得が終わったら、
本来の(1)でリクエストされた、帳票出力ページへリダイレクトをかけます。

ここで問題なのが、
(1)の時に、cookieにリクエストされたURLの情報を保存しておいて、
(4)のリダイレクトをかける時、その情報を復元してと考えたのですが、

(1)の時点では、キックするのはそのユーザで、java帳票出力APIのドメインでcookieが吐き出されるかと思いますが、
一方、(4)では、キックするのはsalesfoceになるので、
(1)でcookieした情報が取得できません。

どのような方針で実装すれば、(1)のURLへOAUTH認証後に戻れるのでしょうか。
何卒よろしくお願い致します。。

###該当のソースコード

(1)部分

java

1 2// セッション取得 3HttpSession session = request.getSession(); 4 5// アクセストークン取得 6String accessToken = (String) session.getAttribute("accessToken"); 7 8// アクエストークン保持状態で分岐 9if (accessToken == null || accessToken.length() == 0) { 10 // リクエスト帳票URLをCookieに保持しておいて、認証画面へリダイレクト 11 try { 12 // ############ リクエスト帳票URLをCookieに格納 ################## 13 Cookie reqCookie = new Cookie("requestUrl", request.getRequestURI() + "," + request.getQueryString()); 14 response.addCookie(reqCookie); 15 16 // Salesforceログインページへリダイレクト 17 response.sendRedirect(config.get("authUrl")); 18 return false; 19 } catch (IOException e) { 20 e.printStackTrace(); 21 } 22} else { 23 // アクセストークンの有効期限切れチェック 24 Boolean result = OAuth.accessTokenAuth(accessToken, config, session); 25 if (!result) { 26 // error 27 } 28}

(4)のcallback受け取り部分

java

1 2// 認証コード取得 3String code = request.getParameter("code"); 4 5// 認証コードを元にアクセストークン取得する 6Boolean result = OAuth.doAuthorizeByAuthCode(code, config, request.getSession()); 7if (!result) { 8 //error 9} 10 11// cookieにある帳票リクエスト先へリダイレクト ######## ここでは(1)でセットしたcookieが取得できない ######## 12String reqUrl = null; 13Cookie[] reqCookie = request.getCookies(); 14if (reqCookie != null) { 15 for (int i=0; i<reqCookie.length; i++) { 16 System.out.print("name" + reqCookie[i].getName()); 17 System.out.print("name" + reqCookie[i].getValue()); 18 reqUrl = reqCookie[i].getValue(); 19 } 20} else { 21 // error 22} 23String[] req = reqUrl.split(",", 0); 24response.sendRedirect(request.getContextPath() + req[0] + "?" + req[1]);

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問