的accessToken的Windows推送通知返回错误的请求400(AccessToken for

2019-07-22 02:18发布

请帮忙!! 想不通为什么通过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);
}

任何帮助,将不胜感激.......

Answer 1:

我怀疑问题有任何一个不正确的包标识符,和/或不正确的客户端机密的事情。

从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调试请求/响应。



Answer 2:

我发现了错误响应的原因。 其实,这是错误的PACKAGE_SECURITY_IDENTIFIER和CLIENT_SECRET。

不要输入值。 由于相关的ASCII值不同。 因此,它始终是更好地直接复制并粘贴。

你可能会得到与简单的代码片段的访问令牌。

干杯



Answer 3:

如果您使用的是新的HttpClient API和你确定你复制和粘贴的SID /机密值正确,您可能会遇到,因为编码的这个问题,只要你正在使用的FormUrlEncodedContent类的内容你POST操作。

相反对的例子MSDN文档 ,你不将它们添加到收藏KeyValuePair之前要URL编码的SID和秘密值。 这是因为编码由隐含FormUrlEncodedContent类,但我没有看到任何文件针对此行为。 希望这可以节省别人一些时间,因为我一直在彻夜狂欢摔...



文章来源: AccessToken for Windows Push Notifications returns Bad Request 400