Подтвердить что ты не робот

Как вы устанавливаете katana-project, чтобы разрешить токены в формате json?

Когда я устанавливаю сервер авторизации OAuth в asp.net webapi 2, как я могу установить конечную точку маркера, чтобы принять json, а не записять форму?

Используя образец http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api

Я попытался отправить приложение /json с

{
"grant_type":"password",
"username":"Alice",
"password":"password123"
}

Получаю ответ 400 Bad Request

{
  "error" : "unsupported_grant_type"
}

где в качестве типа содержимого приложения /x -www-form-urlencoded и тело grant_type=password&username=Alice&password=password123 работает как ожидалось.

200 OK

{
  "access_token" : "08cQ33ZG728AqBcj1PBsRSs4iBPc02lLCZfpaRRWLx2mH_wpQzMwGDKS7r7VgJiKUjUFaq6Xv0uguINoiB_evVbVOtvyWaqAYvc0HRjlgrbj12uQqFbUB7bgH-jiyfhumkwuTSTVHfKUhBjCuD_pbyxEbu2K5WSJpUVge_SGxnb-htm4ZNf1qKDmpEnP9IpZVeJa-KnV0m0gEmP04slMW_JrO390LzCNvXZwVk1yMNuvDakk8tWX7Y6WkFoh7vtW6xfhw3QMbmnvS6px70yMWcTksRNG2bdmi4SenhuRTJx8IsCMnz-4Co7KiCNJGF7KLeU4WzE-LSqXv3mQ30CIQ7faXoMn53p83wZ1NoXYyhsNrQD4POUns_Isb_Pax5gvpZEdyo8zr1r7wb0dS7UXvJb0PWzLHc57Pg3u0kmcizQ",
  "token_type" : "bearer",
  "expires_in" : 1209599,
  "userName" : "Alice",
  ".issued" : "Wed, 30 Oct 2013 15:16:33 GMT",
  ".expires" : "Wed, 13 Nov 2013 15:16:33 GMT"
}
4b9b3361

Ответ 1

На основе текущей реализации OAuthAuthorizationServerHandler вы не можете.

private async Task InvokeTokenEndpointAsync()
{
     DateTimeOffset currentUtc = Options.SystemClock.UtcNow;
     // remove milliseconds in case they don't round-trip
     currentUtc = currentUtc.Subtract(TimeSpan.FromMilliseconds(currentUtc.Millisecond));

     IFormCollection form = await Request.ReadFormAsync();
     var clientContext = new OAuthValidateClientAuthenticationContext(
                Context,
                Options,
                form);

     await Options.Provider.ValidateClientAuthentication(clientContext);

     if (!clientContext.IsValidated)
     {
          _logger.WriteError("clientID is not valid.");
          if (!clientContext.HasError)
          {
               clientContext.SetError(Constants.Errors.InvalidClient);
          }
          await SendErrorAsJsonAsync(clientContext);
          return;
      }

      var tokenEndpointRequest = new TokenEndpointRequest(form);
}

Итак, чтобы попытаться это сделать, вам необходимо предоставить собственную реализацию OAuthAuthorizationServerMiddleware, которая перегружает CreateHandler, чтобы вы могли предоставить свою собственную реализацию AuthenticationHandler<OAuthAuthorizationServerOptions>