IdentityServer3响应状态代码不表示成功:400(错误请求)

时间:2016-03-17 14:35:19

标签: asp.net-mvc bad-request identityserver3

我总是从IdentityServer3获得Bad Request 400。我现在正在尝试3天,但没有运气:(任何人都可以告诉我,我做错了什么?

我正在尝试访问由我无法控制的其他供应商托管的IdentityServer3。供应商要求我们使用Bearer令牌实施实施OAuth2身份验证。供应商向我们提供了客户端ID,客户端密钥和要使用的URL为http://www.xxxxxx.com/identity/connect/token

供应商告诉我们使用请求承载令牌并在请求标头中使用它授权:承载

我可以从供应商处成功获取持有人令牌。但是,当我打电话给 GET /api/profiles/myemailaddress@gmail.com我收到错误请求400

这就是我所做的:

TokenClient client = new TokenClient("http://www.xxxxxx.com/identity/connect/token", "myclientid", "myclientsecret", AuthenticationStyle.PostValues);
var response = await client.RequestResourceOwnerPasswordAsync("myemailaddress@gmail.com", "mypassword", "profile"); // successfully gives me the token

我获得了访问令牌,现在我想使用令牌来请求用户配置文件:

var clienthttp = new HttpClient();
clienthttp.BaseAddress = new Uri("http://www.xxxxxx.com");
clienthttp.SetBearerToken(response.AccessToken);
var json = await clienthttp.GetStringAsync("http://www.xxxxxx.com/api/profiles/myemailaddress@gmail.com"); // error Bad Request 400

其他信息: “scopes_supported”:[ “轮廓”, “offline_access”], “claims_supported”:[]

enter image description here

谢谢。

2 个答案:

答案 0 :(得分:0)

供应商期望标题中有额外的价值。由于我的请求缺少额外的值,他们返回了Bad Request。我不得不修改我的代码以找出错误请求的确切原因。

以下是更新的代码,可能对某人有用:

        var client = new HttpClient();
        client.BaseAddress = new Uri("http://www.xxxxx.com");
        client.SetBearerToken(response.AccessToken);
        var callApiResponse = client.GetAsync("api/profiles/myemailaddress@gmail.com").Result;
        string tokenresponse = callApiResponse.StatusCode.ToString();
        string clientresult = callApiResponse.Content.ReadAsStringAsync().Result;

tokenresponse:" Bad Request 400"

clientresult:"标题中缺少CompanyID"

然后我知道他们也希望在标题中使用companyid,所以我添加了它。然后一切都很好。

client.DefaultRequestHeaders.Add("CompID", "xxxxxx");

答案 1 :(得分:0)

对于不同的资源而非身份服务器,我遇到了类似的错误(响应状态代码未指示成功:400(错误请求))。我设法使用FormUrlEncodedContent

解决了该问题

请参考以下代码

.col-md-6
  span#clock.clock 
.col-md-6
  p= mensaje