Microsoft.Owin.Security.OAuth.OAuthAuthorizationServerProvider - значения clientId и clientSecret обнуляются при попытке создания токена из Postman - PullRequest
1 голос
/ 28 апреля 2020

Я использую OWIN-безопасность для своего asp. net приложения web api 2, и вот моя настройка класса запуска для аутентификации.

 public void ConfigureOAuth(IAppBuilder app)
    {

        var oAuthServerOptions = new OAuthAuthorizationServerOptions
        {
            AllowInsecureHttp = true,
            TokenEndpointPath = new PathString("/token"),
            AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
            Provider = new CustomAuthorizationServerProvider()
        };

        // Token Generation
        app.UseOAuthAuthorizationServer(oAuthServerOptions);
        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
    }

А вот CustomAuthorizationServerProvider реализация класса,

public class CustomAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
    public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
    {
        context.TryGetFormCredentials(out var clientId, out var clientSecret);

        if (clientId == "987459827985" && clientSecret == "lkfjldsfjkld")
        {
            context.Validated(clientId);
        }

        return base.ValidateClientAuthentication(context);
    }

    public override Task GrantClientCredentials(OAuthGrantClientCredentialsContext context)
    {
        var oAuthIdentity = new ClaimsIdentity(context.Options.AuthenticationType);
        oAuthIdentity.AddClaim(new Claim(ClaimTypes.Name, "TestClient"));
        var ticket = new AuthenticationTicket(oAuthIdentity, new AuthenticationProperties());
        context.Validated(ticket);
        return base.GrantClientCredentials(context);
    }
}

Теперь, пытаясь сгенерировать токен с использованием конечной точки http://localhost:8080/token, я получаю NULL для clientId и clientSecret, и, следовательно, я получаю "error": "invalid_client". Что мне здесь не хватает?

enter image description here

enter image description here

Редактировать: РЕДАКТИРОВАТЬ

Когда я использую raw в качестве тела, я вижу, что генерация токенов работает, и клиент и секрет имеют значение. Почему не работает form-data?

enter image description here

1 Ответ

1 голос
/ 28 апреля 2020

Проверьте документацию почтальона: Отправка запросов API

Самое главное это:

Формы веб-сайта часто отправляют данные в API в виде multipart / form-data. Вы можете повторить это в Postman, используя вкладку Body-data-body. Данные формы позволяют отправлять пары ключ-значение и указывать тип содержимого.

При быстром поиске в Интернете необходим специальный тип обработки для API-интерфейсов для связывания multipart/form-data

т.е. Как настроить контроллер веб-API для multipart / form-data

Для этого есть даже плагин

Тип контента важен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...