Squeak.ru - шаблоны программирования

Доступ к API через токен от Auth0

Я внедряю Auth0 для использования в своем приложении ASP.NET Core 2.1 с интерфейсом React и не могу выполнять вызовы API, используя токен, полученный от Auth0. Я продолжаю получать несанкционированную ошибку.

Вот код метода ConfigureServices() в моем Startup.cs:

services.AddAuthentication(options => {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            })
  .AddJwtBearer(jwtOptions => {
      jwtOptions.Authority = "https://myapp.auth0.com/";
      jwtOptions.Audience = "https://myapp.com/api/";
   });

   string domain = $"https://myapp.auth0.com/";
   services.AddAuthorization(options =>
   {
      options.AddPolicy("read:data", policy => policy.Requirements.Add(new HasScopeRequirement("read:data", domain)));
   });

services.AddSingleton<IAuthorizationHandler, HasScopeHandler>();

У меня есть следующее для обработки области:

public class HasScopeRequirement : IAuthorizationRequirement
{
   public string Issuer { get; }
   public string Scope { get; }

   public HasScopeRequirement(string scope, string issuer)
   {
       Scope = scope ?? throw new ArgumentNullException(nameof(scope));
       Issuer = issuer ?? throw new ArgumentNullException(nameof(issuer));
   }
}

public class HasScopeHandler : AuthorizationHandler<HasScopeRequirement>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, HasScopeRequirement requirement)
    {
        // If user does not have the scope claim, get out of here
        if (!context.User.HasClaim(c => c.Type == "scope" && c.Issuer == requirement.Issuer))
           return Task.CompletedTask;

        // Split the scopes string into an array
        var scopes = context.User.FindFirst(c => c.Type == "scope" && c.Issuer == requirement.Issuer).Value.Split(' ');

        // Succeed if the scope array contains the required scope
        if (scopes.Any(s => s == requirement.Scope))
            context.Succeed(requirement);

        return Task.CompletedTask;
    }
}

Также в методе Configure() у меня есть app.UseAuthentication();

Вот код в моем сервисе auth0.js:

auth0 = new auth0.WebAuth({
        domain: 'myapp.auth0.com',
        clientID: 'client_id_copied_from_application_settings_on_auth0',
        redirectUri: 'http://localhost:49065/member/callback',
        audience: 'https://myapp.com/api/',
        responseType: 'token id_token',
        scope: 'openid'
    });

Мой интерфейс успешно получает access_token, expires_at и id_token. Используя Postman, я делаю вызов API к одному из моих методов API, но продолжаю получать ошибку 401 Unauthorized. Ниже я публикую скриншот того, что я вижу в Postman. Похоже, это не нравится публике.

введите здесь описание изображения

Любая идея, что я делаю неправильно?

03.09.2018

  • Пожалуйста, включите простой текст HTTP-запроса, который вы отправляете. Было бы полезно взглянуть на ваши заголовки. 04.09.2018

Ответы:


1

Мы в Auth0 составили серию руководств по этому вопросу, используя .Net Core 2.0, которые могут быть полезны для отслеживания.

https://auth0.com/blog/developing-web-apps-with-asp-dot-net-core-2-dot-0-and-react-part-1/

04.09.2018
  • Спасибо за ссылку на статью, но я не вижу там ничего, что отличалось бы от того, что есть в моем коде. Один вопрос: нужно ли мне https:// перед моим доменом? В настоящее время мой домен mycompanyname.auth0.com. Может ли это быть проблемой? 05.09.2018
  • Хорошей практикой было бы использование https:// - кроме того, вы хотите убедиться, что включен полный URL-адрес обратного вызова. 05.09.2018
  • Как обновить? Нужно ли мне удалять свою учетную запись и создавать ее заново, чтобы изменить ее? 05.09.2018
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...