Как получить подробную ошибку в сценарии сбоя проверки подлинности веб-API вместо «Сообщение»: «Авторизация была отклонена для этого запроса».? - PullRequest
0 голосов
/ 14 апреля 2020

Я создал веб-API из шаблона VS с контроллером ценностей, украшенным [Authorize]. Я добавил Owin Startup, как показано ниже:

[assembly: OwinStartup(typeof(WebAPIDotNet.Startup))]
namespace WebAPIDotNet
{
    public class Startup
    {
        private static string clientId = "xxxxxxxxx"; // my actual client id from azure ad.

        public void Configuration(IAppBuilder app)
        {


            app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
            {
                AccessTokenFormat = new JwtFormat(
                    new TokenValidationParameters
                    {
                        // Check if the audience is intended to be this application
                        ValidAudiences = new[] { clientId, $"api://{clientId}" },

                        // Change below to 'true' if you want this Web API to accept tokens issued to one Azure AD tenant only (single-tenant)
                        // Note that this is a simplification for the quickstart here. You should validate the issuer. For details, 
                        // see https://github.com/Azure-Samples/active-directory-dotnet-native-aspnetcore
                        ValidateIssuer = false,

                    }

                    //new OpenIdConnectSecurityTokenProvider("https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration")
                    ),
                AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,
// Below Provider is just so that I can capture detailed errors while debugging, but no success
                    Provider = new OAuthBearerAuthenticationProvider
                    {
                        OnRequestToken = Onrequesttoken,
                        OnApplyChallenge = applyuingChallenge,
                        OnValidateIdentity = validatingidentiity

                    },
                });

            }

            private Task validatingidentiity(OAuthValidateIdentityContext arg)
            {
                return Task.FromResult(0);
            }

            private Task applyuingChallenge(OAuthChallengeContext arg)
            {
                return Task.FromResult(0);
            }

            private Task Onrequesttoken(OAuthRequestTokenContext arg)
            {
                return Task.FromResult(0);
            }
        }
    }

У меня уже есть токен доступа, и я подтвердил, что у него правильная аудитория, et c. Но выполнение запроса GET с помощью Postman продолжает выдавать сообщение: «Сообщение»: «Для этого запроса отказано в авторизации».

При отладке я вижу маркер как часть авторизации, есть ли способ, которым я могу регистрировать / видеть фактическую ошибку, а не «Сообщение»: «Авторизация была отклонена для этого запроса». ?

Запрос почтальона: enter image description here

1 Ответ

0 голосов
/ 15 апреля 2020

На всякий случай, если кто-то еще столкнется с этим, я нашел ответ в документах Оуэна Катана. По сути, размещение ниже config в вашем web.config включит журналы в окне вывода с подробностями, и я смог увидеть основную причину неудачной авторизации, так как я использую промежуточное ПО для аутентификации Owin.

<system.diagnostics>
    <switches>
      <add name="Microsoft.Owin" value="Verbose" />
    </switches>
  </system.diagnostics>
...