2

Java Web アプリケーションから Microsoft LiveConnect にアクセスしようとしています。そして、トークンの取得に問題があります。

問題は次のとおりです。 http://msdn.microsoft.com/en-us/library/live/hh243647.aspx#authcodegrantに示されている認証コード付与フローに従いました。

LiveConnect は、次の形式の URL を使用して、ユーザー エージェント (ブラウザー) をサーバーにリダイレクトします

http://contoso.com/Callback.htm?code=AUTHORIZATION_CODE

次に、私の Web アプリは、次の形式で LiveConnect に REST (POST 要求) を発行します。

POST https://login.live.com/oauth20_token.srf

Content-type: application/x-www-form-urlencoded

client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&client_secret=CLIENT_SECRET&code=AUTHORIZATION_CODE&grant_type=authorization_code

意味のあるデータを返す代わりに、LiveConnect は次のような無関係な情報を含む HTML ページを返します。

<html>
...
<body class="modern" onLoad="BodyLoad()">
<div class="header" id="i0272"><span>Microsoft account</span></div>
<div class="content">
<div style="padding:15px 0 0 0;font-size:1px;">&nbsp;</div>
<h1 class="css0046">We're unable to complete your request</h1>

<p class="css0005">Microsoft account is experiencing technical problems. Please try again later.</p></div>

REST API に関連する Java コードもここに投稿します。

    URL urlConnection = new URL(this.url);
    HttpURLConnection connection = (HttpURLConnection) urlConnection.openConnection();
    OutputStream outputStream = null;
    try {
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.setRequestMethod("POST");
        connection.setReadTimeout(DEFAULT_READ_TIMEOUT_IN_MS);
        connection.setUseCaches(false);
        connection.setRequestProperty("charset", "utf-8");
        connection.setRequestProperty("Content-Length", "" + data.getBytes("UTF-8").length);

        for(String key : params.keySet()){
            connection.setRequestProperty(key, params.get(key));
        }

        executed.set(true);

        connection.connect();

        outputStream = connection.getOutputStream();

        //outputStream.write("\r\n".getBytes("UTF-8"));

        outputStream.write(data.getBytes("UTF-8"));
        outputStream.flush();

        httpInputStream = connection.getResponseCode() != HTTP_OK ?
                connection.getErrorStream() :
                connection.getInputStream();

        return new Response(connection.getResponseCode(),    Utils.fromInputStream(httpInputStream));
4

1 に答える 1