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

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

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

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

OAuth 2.0

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

Q&A

0回答

1699閲覧

OAuth認証 FacebookのURLエラー

yuiti926

総合スコア26

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

OAuth 2.0

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

0グッド

1クリップ

投稿2016/04/08 03:54

現在練習用サイトをオープンサーバーに上げてOAuth認証を試しているんですが、Twitter,Google+でのリダイレクトは確認出来たのですがFacebookだけ画像のようなエラーが出てしまいます
https://gyazo.com/977dbfff189828f6d84cb854358a2eb2
OKを押すと↓が出る
https://gyazo.com/3e19cf7273f6c64f76bb77232cf09d64

ソースコードと見比べながらfbのURI設定等を確認したのですがどこを直せばいいのか全く分かりません!
下記に自分のfacebookoathのコードを載せるので、エラーの原因と直し方を教えてください!

java

1コード 2package com.internousdev.uesto.util; 3 4import java.io.BufferedReader; 5import java.io.IOException; 6import java.io.InputStreamReader; 7import java.io.UnsupportedEncodingException; 8import java.net.HttpURLConnection; 9import java.net.MalformedURLException; 10import java.net.URL; 11import java.net.URLEncoder; 12import java.util.Map; 13 14import javax.servlet.http.HttpServletRequest; 15import javax.servlet.http.HttpServletResponse; 16 17import org.json.simple.JSONValue; 18 19import com.opensymphony.xwork2.ActionSupport; 20 21import facebook4j.Facebook; 22import facebook4j.FacebookFactory; 23import facebook4j.auth.AccessToken; 24 /** 25 * FacebookOAuthでトークンを取得する為のクラス 26 * @author 27 * @since 2016/04/06 28 * @version 1.0 29 */ 30public class FacebookOauth extends ActionSupport { 31 32 /** 33 * 生成されたシリアルナンバー 34 */ 35 private static final long serialVersionUID = -4010623960566292617L; 36 37 /** 38 * APP ID 39 */ 40 private static final String APP_ID = "1708904312731410"; 41 42 /** 43 * レスポンスURL 44 */ 45 private static final String APP_SECRET = "f1c899d652d8b0bfd4f5cd5967d11134"; 46 47 /** 48 * コールバックパス 49 */ 50 private static final String CALLBACK_PATH = "/login-facebook-action"; 51 52 /** 53 * リクエストトークンを取得する為のメソッド 54 * @param request リクエスト 55 * @param response レスポンス 56 * @return true/false <p>リクエストトークンが取得できた場合はtrueをそうでない場合はfalseを返します。</p> 57 */ 58 public boolean getRequestToken(HttpServletRequest request, HttpServletResponse response) { 59 Facebook facebook = new FacebookFactory().getInstance(); 60 request.getSession().setAttribute("facebook", facebook); 61 facebook.setOAuthAppId(APP_ID, APP_SECRET); 62 String accessTokenString = APP_ID + "|" + APP_SECRET; 63 AccessToken at = new AccessToken(accessTokenString); 64 facebook.setOAuthAccessToken(at); 65 StringBuffer callbackURL = request.getRequestURL(); 66 int index = callbackURL.lastIndexOf("/"); 67 callbackURL.replace(index, callbackURL.length(), "").append(CALLBACK_PATH); 68 try { 69 response.sendRedirect(facebook.getOAuthAuthorizationURL(callbackURL.toString())); 70 } catch (IOException e) { 71 e.printStackTrace(); 72 return false; 73 } 74 return true; 75 } 76 77 /** 78 * アクセストークンを取得する為のメソッド 79 * @param request リクエスト 80 * @param response レスポスト 81 * @return userMap ユーザー情報 82 * @return userMap <p>ユーザー情報の値をuserMapに返します。</p> 83 */ 84 public Map<String, String> getAccessToken(HttpServletRequest request, HttpServletResponse response){ 85 final String callbackURL = request.getRequestURL().toString(); 86 final String code = request.getParameter("code"); 87 if(code == null){ 88 try { 89 response.sendRedirect(request.getContextPath()+ "/login"); 90 } catch (IOException e) { 91 e.printStackTrace(); 92 } 93 } 94 String accessTokenURL = null; 95 try { 96 accessTokenURL = "https://graph.facebook.com/oauth/access_token?client_id=" 97 + APP_ID //結合 98 + "&redirect_uri=" 99 + URLEncoder.encode(callbackURL, "UTF-8") 100 + "&client_secret=" 101 + APP_SECRET + "&code=" + URLEncoder.encode(code, "UTF-8"); 102 } catch (UnsupportedEncodingException e) { 103 e.printStackTrace(); 104 } 105 String accessTokenResult = null; 106 try { 107 accessTokenResult = httpRequest(new URL(accessTokenURL)); 108 } catch (MalformedURLException e1) { 109 e1.printStackTrace(); 110 } 111 112 String accessToken = null; 113 String[] pairs = accessTokenResult.split("&"); 114 for (String pair : pairs) { 115 String[] kv = pair.split("="); 116 if (kv.length != 2) { 117 throw new RuntimeException("Unexpected auth response"); 118 } else { 119 if (kv[0].equals("access_token")) { 120 accessToken = kv[1]; 121 } 122 } 123 } 124 String apiURL = null; 125 try { 126 apiURL = "https://graph.facebook.com/me?access_token=" 127 + URLEncoder.encode(accessToken, "UTF-8"); 128 } catch (UnsupportedEncodingException e) { 129 e.printStackTrace(); 130 } 131 String apiResult = null; 132 try { 133 apiResult = httpRequest(new URL(apiURL)); 134 } catch (MalformedURLException e) { 135 e.printStackTrace(); 136 } 137 @SuppressWarnings("unchecked") 138 Map<String, String> userMap = (Map<String, String>) JSONValue.parse(apiResult); 139 return userMap; 140 } 141 142 /** 143 * APIURL(apiURL)を読み込む為のメソッド 144 * @param url URL 145 * @return response <p>読み込んだURLの値をresponseに返します。</p> 146 */ 147 private String httpRequest(URL url) { 148 HttpURLConnection conn = null; 149 String response = ""; 150 try { 151 conn = (HttpURLConnection) url.openConnection(); 152 conn.setDoOutput(true); 153 conn.setUseCaches(false); 154 conn.setRequestMethod("GET"); 155 BufferedReader reader = new BufferedReader(new InputStreamReader( 156 conn.getInputStream())); 157 String line = null; 158 159 while ((line = reader.readLine()) != null) { 160 response += line; 161 } 162 reader.close(); 163 } catch (IOException e) { 164 e.printStackTrace(); 165 } finally { 166 conn.disconnect(); 167 } 168 return response; 169 } 170 171}

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問