IdentityServer3 响应状态码不表示成功:400(Bad Request)
IdentityServer3 Response status code does not indicate success: 400 (Bad Request)
我总是从 IdentityServer3 收到 Bad Request 400。我现在尝试了 3 天,但没有成功:( 谁能告诉我我做错了什么?
我正在尝试访问由我无法控制的另一家供应商托管的 IdentityServer3。供应商要求我们使用 Bearer 令牌实施 Implement OAuth2 身份验证。供应商向我们提供了 Client ID、Client Secret,要使用的 URL 是 http://www.xxxxxx.com/identity/connect/token
供应商告诉我们使用请求不记名令牌并在请求中使用它headers授权:不记名
我可以成功地从供应商那里获得不记名令牌。但是当我打电话给
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":["profile","offline_access"],
"claims_supported":[]
谢谢。
供应商期望在 header 中获得额外价值。由于我的请求缺少该附加值,他们返回了 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;
令牌响应:"Bad Request 400"
客户结果:"Missing CompanyID in the header"
然后我知道他们也希望 header 中有 companyid,所以我添加了它。然后一切都很好。
client.DefaultRequestHeaders.Add("CompID", "xxxxxx");
对于不同的资源而不是身份服务器,我有一个类似的错误(响应状态代码不表示成功:400(错误请求))。我设法使用 FormUrlEncodedContent
解决了这个问题
参考以下代码
using (HttpClient client = new HttpClient())
{
string baseUrl = "https://*******.com/****"
Dictionary<string, string> jsonValues = new Dictionary<string, string>();
jsonValues.Add("username", "******");
jsonValues.Add("password", "******");
var contenta = new FormUrlEncodedContent(jsonValues);
var response = await client.PostAsync(baseUrl, contenta);
using (HttpContent content = response.Content)
{
string data = await content.ReadAsStringAsync();
if (data != null)
{
Console.WriteLine(data);
}
}
}
我总是从 IdentityServer3 收到 Bad Request 400。我现在尝试了 3 天,但没有成功:( 谁能告诉我我做错了什么?
我正在尝试访问由我无法控制的另一家供应商托管的 IdentityServer3。供应商要求我们使用 Bearer 令牌实施 Implement OAuth2 身份验证。供应商向我们提供了 Client ID、Client Secret,要使用的 URL 是 http://www.xxxxxx.com/identity/connect/token
供应商告诉我们使用请求不记名令牌并在请求中使用它headers授权:不记名
我可以成功地从供应商那里获得不记名令牌。但是当我打电话给 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":["profile","offline_access"], "claims_supported":[]
谢谢。
供应商期望在 header 中获得额外价值。由于我的请求缺少该附加值,他们返回了 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;
令牌响应:"Bad Request 400"
客户结果:"Missing CompanyID in the header"
然后我知道他们也希望 header 中有 companyid,所以我添加了它。然后一切都很好。
client.DefaultRequestHeaders.Add("CompID", "xxxxxx");
对于不同的资源而不是身份服务器,我有一个类似的错误(响应状态代码不表示成功:400(错误请求))。我设法使用 FormUrlEncodedContent
解决了这个问题参考以下代码
using (HttpClient client = new HttpClient())
{
string baseUrl = "https://*******.com/****"
Dictionary<string, string> jsonValues = new Dictionary<string, string>();
jsonValues.Add("username", "******");
jsonValues.Add("password", "******");
var contenta = new FormUrlEncodedContent(jsonValues);
var response = await client.PostAsync(baseUrl, contenta);
using (HttpContent content = response.Content)
{
string data = await content.ReadAsStringAsync();
if (data != null)
{
Console.WriteLine(data);
}
}
}