【问题标题】:Microsoft Live Connect, REST Access IssueMicrosoft Live Connect,REST 访问问题
【发布时间】:2013-04-23 12:39:07
【问题描述】:

我正在尝试从 Java 网络应用程序访问 Microsoft LiveConnect。而且我在获取令牌时遇到了问题。

问题如下:我按照http://msdn.microsoft.com/en-us/library/live/hh243647.aspx#authcodegrant中指示的授权码授予流程进行

LiveConnect 使用以下格式的 URL 将用户代理(浏览器)重定向到我的服务器

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

然后我的网络应用程序使用以下格式向 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));

【问题讨论】:

    标签: liveconnect


    【解决方案1】:

    包含您的 duff 内容的页面的 Url 可能更有意义。我的有这个:

    https://login.live.com/err.srf?lc=2057#error=invalid_request&error_description=The%20provided%20value%20for%20the%20input%20parameter%20%27redirect_uri%27%20is%20not%20valid.%20The%20expected%20value%20is%20%27https://login.live.com/oauth20_desktop.srf%27%20or%20a%20URL%20which%20matches%20the%20redirect%20URI%20registered%20for%20this%20client%20application.&state=redirect_type%3dauth%26display%3dpage%26request_ts%3d1412608929255%26response_method%3dcookie%26secure_cookie%3dfalse
    

    确保您的应用和 OneDrive 开发中心重定向 URL 都具有完全相同的 url,即:

    http://contoso.com/Callback.htm

    其中包括页面。

    当我在 OneDrive 开发中心的 URL 不包含该页面时,我得到了与上面的 URL 相同的乏味错误页面。 设置重定向网址:

    https://account.live.com/developers/applications
    

    登录并进入仪表板 > 我的应用程序 > YourAppName > API 设置

    在开发时,您还需要将域 (contoso.com) 重定向到您的本地 IIS IP 地址 (127.0.0.1),如下所述: "http://msdn.microsoft.com/en-us/library/live/hh826547.aspx"

    希望这对某人有所帮助(我知道现在已经很晚了)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      • 2017-03-15
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多