Я завжди отримую Bad Request 400 від IdentityServer3. Я намагаюся протягом 3 днів, але не пощастило :( Будь-хто може, будь ласка, скажіть мені, що я роблю неправильно?
Я намагаюся отримати доступ до IdentityServer3, розміщеного наіншого виробника, якого я не контролюю. Постачальник попросив нас реалізувати аутентифікацію OAuth2 з токеном Bearer. Постачальник надав нам ідентифікатор клієнта, секрет клієнта, а URL-адреса, яку слід використовувати, - це http://www.xxxxxx.com/identity/connect/token
Постачальник повідомив нам про те, щоб використовувати запит на токене пред'явника і використовувати його в заголовках запитів
Я можу успішно отримати маркер на пред'явника від постачальника. Але коли я називаю GET /api/profiles/myemailaddress@gmail.com Я отримую Bad Request 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": []
Дякую.
Відповіді:
0 для відповіді № 1Продавець очікував додаткового значення в заголовку. Оскільки у моєму запиті відсутнє таке додаткове значення, вони повернули неправильний запит. Мені довелося змінити код, щоб знайти точну причину поганого запиту.
Оновлений код може бути корисним для когось:
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: "Поганий запит 400"
clientresult: "Відсутній ідентифікатор компанії в заголовку"
Тоді я знав, що вони також чекають на компанію в заголовку, тому я додав її. тоді все було добре.
client.DefaultRequestHeaders.Add("CompID", "xxxxxx");