请帮忙!! 想不通为什么通过MSDN给出的这个简单的代码不工作....
我正在使用的在给定的GetAccessToken()下面的代码这个MSDN文章 ,以获得访问令牌在Windows通知中使用,但它返回“错误的请求400”
PACKAGE_SECURITY_IDENTIFIER,CLIENT_SECRET是当应用程序与Windows应用商店仪表板注册获得的值
string urlEncodedSid = HttpUtility.UrlEncode(PACKAGE_SECURITY_IDENTIFIER);
string urlEncodedSecret = HttpUtility.UrlEncode(CLIENT_SECRET);
string body = String.Format("grant_type=client_credentials&client_id={0}&client_secret={1}&scope=notify.windows.com", urlEncodedSid, urlEncodedSecret);
string response;
using (WebClient client = new WebClient())
{
client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
response = client.UploadString("https://login.live.com/accesstoken.srf", body);
}
任何帮助,将不胜感激.......
我怀疑问题有任何一个不正确的包标识符,和/或不正确的客户端机密的事情。
从MSDN页面推送通知服务请求和响应头 :
RESPONSE DESCRIPTION
--------------- --------------------------
200 OK The request was successful.
400 Bad Request The authentication failed.
更新 -我跑了代码的问题,使用假证件。
这里是RAW HTTP请求:
POST https://login.live.com/accesstoken.srf HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: login.live.com
Content-Length: 88
Expect: 100-continue
Connection: Keep-Alive
grant_type=client_credentials&client_id=test&client_secret=test&scope=notify.windows.com
这里是服务器的原始响应:
HTTP/1.1 400 Bad Request
Cache-Control: no-store
Content-Length: 66
Content-Type: application/json
Server: Microsoft-IIS/7.5
X-WLID-Error: 0x80045A78
PPServer: PPV: 30 H: BAYIDSLGN2A055 V: 0
Date: Thu, 21 Mar 2013 12:34:19 GMT
Connection: close
{"error":"invalid_client","error_description":"Invalid client id"}
你会注意到,响应是400。 也有一些JSON表示错误类型。 在我的情况下 ,错误是Invalid client id
。 你可能想看一看你的反应 - 它会给你发生了什么事的指示。
我用的Fiddler调试请求/响应。
我发现了错误响应的原因。 其实,这是错误的PACKAGE_SECURITY_IDENTIFIER和CLIENT_SECRET。
不要输入值。 由于相关的ASCII值不同。 因此,它始终是更好地直接复制并粘贴。
你可能会得到与简单的代码片段的访问令牌。
干杯
如果您使用的是新的HttpClient API和你确定你复制和粘贴的SID /机密值正确,您可能会遇到,因为编码的这个问题,只要你正在使用的FormUrlEncodedContent
类的内容你POST操作。
相反对的例子MSDN文档 ,你不将它们添加到收藏KeyValuePair之前要URL编码的SID和秘密值。 这是因为编码由隐含FormUrlEncodedContent
类,但我没有看到任何文件针对此行为。 希望这可以节省别人一些时间,因为我一直在彻夜狂欢摔...