2

AndroidにOpenIdを実装しようとしていますが、400エラーが発生し続けます。パラメータのフォーマットが間違っていると思います。

私はこのブラウザ行に基づいてパラメータを設定しているので、サーバーに正しくアクセスできます。

https://www.google.com/accounts/o8/ud
?openid.ns=http://specs.openid.net/auth/2.0
&openid.claimed_id=http://specs.openid.net/auth/2.0/identifier_select
&openid.identity=http://specs.openid.net/auth/2.0/identifier_select
&openid.return_to=http://www.example.com/checkauth
&openid.realm=http://www.example.com/
&openid.assoc_handle=ABSmpf6DNMw
&openid.mode=checkid_setup

これがコードです

            try {

         HttpsURLConnection con; 

         URL url2 = new URL("https://www.google.com/accounts/o8/ud");
         con = (HttpsURLConnection) url2.openConnection();
         con.setDoInput(true);
         con.setDoOutput(true);

         con.setRequestMethod("GET");

         List<NameValuePair> params = new ArrayList<NameValuePair>();
         params.add(new BasicNameValuePair("openid.ns", "http://specs.openid.net/auth/2.0"));
         params.add(new BasicNameValuePair("openid.claimed_id", "http://specs.openid.net/auth/2.0/identifier_select"));
         params.add(new BasicNameValuePair("openid.identity", "http://specs.openid.net/auth/2.0/identifier_select"));
         params.add(new BasicNameValuePair("openid.return_to", "http://www.example.com/checkauth"));
         params.add(new BasicNameValuePair("openid.realm", "http://www.example.com/"));
         params.add(new BasicNameValuePair("openid.assoc_handle", "ABSmpf6DNMw"));
         params.add(new BasicNameValuePair("openid.mode", "checkid_setup"));

         String content = AuthUtils.getRequestParams(params);
         con.setFixedLengthStreamingMode(content.getBytes("UTF-8").length);

         OutputStream out = con.getOutputStream();
         BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));
         writer.write(content);
         writer.close();
         out.close();            

         Log.d(TAG, "response code = " + con.getResponseCode());

         BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));

         String input;

         while ((input = br.readLine()) != null){
             System.out.println(input);
         }
         br.close();             


        } catch (MalformedURLException e) {
             Log.e(TAG, e.toString());
            e.printStackTrace();
        } catch (IOException e) {
             Log.e(TAG, e.toString());
         e.printStackTrace();
        } catch (Exception e) {
             Log.e(TAG, e.toString());
             e.printStackTrace();
        }
4

1 に答える 1

0

グーグルのドキュメントから:

提供されたドメインが Google によってホストされていない場合、 Google のエンドポイントはエンドポイント (2) で 400 を返します。したがって、Google Apps の顧客に対応したい RP にとって考えられる戦略の 1 つは、最初にエンドポイント (2) を試し、それが 400 を返した場合はエンドポイント (1) を試し、何も得られない場合はあきらめることです。他の戦略 (両方のエンドポイントを並行してフェッチするなど) も可能です。

詳細はこちら

于 2014-01-06T12:30:56.973 に答える