web api 2 - доступ к токену Oauth2 Bearer запрещен - PullRequest
0 голосов
/ 20 мая 2018

У меня есть приложение mvc 5 с веб-интерфейсом 2. (.NET 4.6) Я реализовал конфигурацию oauth2 рядом с аутентификацией для моего приложения mvc (app.UseCookieAuthentication):

    OAuthAuthorizationServerOptions OAuthServerOptions = new 
    OAuthAuthorizationServerOptions()
    {
        AllowInsecureHttp = true,
        TokenEndpointPath = new PathString("/oauth/token"),
        Provider = new AspNetIdentityOAuthAuthorizationServerProvider(),
        AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(1000), 
    };

    app.UseOAuthBearerTokens(OAuthServerOptions);

Мои apisзащищены атрибутом Authorize (глобальный фильтр).

Я использую грант учетных данных клиента

Я следовал этим двум статьям (которые совпадают) https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/individual-accounts-in-web-api https://mitchelsellers.com/blogs/2017/05/10/adding-webapi-oauth-authentication-to-an-existing-project

Я могу получить токен для своего пользователя, но когда я хочу использовать токен для доступа к моему API, я получаю запрещенную ошибку 403

        HttpClient client = new HttpClient();
        Dictionary<string, string> parameters = new Dictionary<string, string>();
        parameters.Add("grant_type", "client_credentials");
        parameters.Add("client_id", "4rclFahG7gho8erzbsmTbw==");
        parameters.Add("client_secret", "IBSqiYb0kT/lzV0gpQsPxkUDI9ztu0dhHWDe4VQDzKGYm2pl+75sMVfEsoGo4FAxFm0qZUFcDrVMrfqYhn2bzw==");

        var content = new FormUrlEncodedContent(parameters);
        try
        {
            HttpResponseMessage result = client.PostAsync("http://localhost:49594/oauth/token", content).Result;
            string jsonResult = result.Content.ReadAsStringAsync().Result;

            var resultObject = JsonConvert.DeserializeObject<TokenResult>(jsonResult);
            var accessToken = resultObject.access_token;


            client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
            result = client.GetAsync("http://localhost:49594/api/v1/echo?id=myt

estvalue").Result;

// RESULT  is 403 - Forbidden

Я тестировал с почтальоном какхорошо, и результат тот же.

кто-нибудь испытывал такую ​​же проблему?

знаете, что мне не хватает?

Обновление: работает, если я развертываю свое приложение на сервере (службы приложений Azure), но все еще не на моей машине

1 Ответ

0 голосов
/ 22 мая 2018

Я нашел причину своей проблемы!

Я использую каскадера (https://rimdev.io/stuntman/) для моего разработчика, и я забыл настроить его для oauth ...

Этопропущена строка:

StuntmanOptions.AllowBearerTokenPassthrough = true;

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