2016-03-17 8 views
0

Я всегда получаю Bad Request 400 от IdentityServer3. Я пытаюсь в течение 3 дней, но не повезло :(Любой мог бы рассказать мне, что я делаю неправильно?IdentityServer3 Код состояния ответа не указывает на успех: 400 (неудачный запрос)

Я пытаюсь получить доступ к IdentityServer3, размещенному другим поставщиком, и что у меня нет контроля. Внедрить аутентификацию OAuth2 с маркером-носителем. Поставщик предоставил нам идентификатор клиента, секрет клиента и URL-адрес, который будет использоваться, - http://www.xxxxxx.com/identity/connect/token

Поставщик сказал нам использовать для запроса токена-носителя и использовать его в заголовках запроса. Авторизация: Носитель

Я могу успешно получить токен-носитель от поставщика. Но когда я звоню GET /api/profiles/[email protected] ом я получаю Bad Request 400

Вот что я сделал:

TokenClient client = new TokenClient("http://www.xxxxxx.com/identity/connect/token", "myclientid", "myclientsecret", AuthenticationStyle.PostValues); 
var response = await client.RequestResourceOwnerPasswordAsync("[email protected]", "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/[email protected]"); // error Bad Request 400 

Дополнительная Информация: "scopes_supported": [ "профиль", "offline_access"], "claims_supported": []

enter image description here

спасибо.

ответ

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/[email protected]").Result; 
     string tokenresponse = callApiResponse.StatusCode.ToString(); 
     string clientresult = callApiResponse.Content.ReadAsStringAsync().Result; 

tokenresponse: "Bad Request 400"

clientresult: "Missing CompanyID в заголовке"

Тогда я знал что они также ожидают companyid в заголовке, поэтому я добавил его. тогда все было хорошо.

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