Авторизация и последующее использование токена JWT с ядром Auth0 React & ASP. net - PullRequest
3 голосов
/ 11 января 2020

Я создаю реагирующее приложение, используя Auth0 в качестве oauth-аутентификации и поддерживаю его ASP. NET core api.

Из React я перенаправляю пользователя на Auth0, который у меня есть настроить одностраничное приложение.

Когда вход успешен, он перенаправляет пользователя обратно в мое приложение React с кодом.

Затем я хочу перевести этот код в токен JWT для авторизовать доступ к API бэкэнда. Вот где он не работает.

После входа в систему я использую предоставленную библиотеку примеров Auth0 и вызываю:

   const { getTokenSilently } = useAuth0();
   ...
   var token = await getTokenSilently();
   ...
   axios({
            url: `/api/Folder`,
            method: 'GET',
            headers: {
                Authorization: `Bearer ${token}`
            }
   })

он предоставляет токен, но токен кажется слишком мал для токена JWT, в заголовке он выглядит примерно так:

Authorization: Bearer 7hExNvsOM14TpY0qUnPbVqpizwLLxynw

Ответ от моего C# asp. net core api: 1017 *

www-authenticate: Bearer error="invalid_token"

Мой C# Код выглядит следующим образом: startup.cs

    services.AddAuthentication(options =>
    {
        options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
    }).AddJwtBearer(options =>
    {
        options.Authority = Configuration["Auth0:Authority"];
        options.Audience = Configuration["Auth0:Audience"];
        options.RequireHttpsMetadata = false;
        options.TokenValidationParameters = new TokenValidationParameters
        {
            NameClaimType = ClaimTypes.NameIdentifier
        };
    });

    IdentityModelEventSource.ShowPII = true; //for debug purposes
    ....
    app.UseAuthentication();
    app.UseAuthorization();

folderController.cs

[Authorize]
[Route("api/[controller]")]
[ApiController]
public class FolderController : ControllerBase
{
 ....
}

Ответы [ 2 ]

2 голосов
/ 10 февраля 2020

Этот токен, который вы упоминаете в своем вопросе, является непрозрачным токеном доступа .

JSON Web Token (JWT) : токены, соответствующие стандарт JSON Web Token и содержит информацию о сущности в форме претензий. Они самодостаточны тем, что получателю не нужно вызывать сервер для проверки токена. Токены доступа, выпущенные для API управления Auth0, и токены доступа, выпущенные для любого пользовательского API, зарегистрированного в Auth0, будут соответствовать стандарту JSON Web Token (JWT), что означает, что их структура basi c соответствует типичной структуре JWT и они содержат стандартные утверждения JWT, заявленные о самом токене.

Непрозрачные токены: Токены в проприетарном формате, которые обычно содержат некоторый идентификатор для информации в постоянном хранилище сервера. Чтобы проверить непрозрачный токен, получатель токена должен вызвать сервер, выдавший токен. Токены непрозрачного доступа - это токены, в формате которых вы не можете получить доступ. Токены непрозрачного доступа, выданные Auth0, могут использоваться с конечной точкой / userinfo для возврата профиля пользователя.

Дополнительная информация здесь .

Чтобы преодолеть его. .. вам нужно настроить свой проект API @ Auth0.

При вызове Auth0 для аутентификации вашего пользователя передайте audience и scope соответственно.

audience - это понятное вам имя дал ваш ASP. NET Web Core API во время его установки на панели мониторинга Auth0.

Вот полное пошаговое руководство для. NET Core 3.

0 голосов
/ 13 января 2020

Ниже приведена статья, в которой подробно описываются процедуры аутентификации пользователя и получения токена доступа для доступа к asp. net core web api:

Разработка веб-приложений с ASP. NET Core 2.0 и React - часть 1

Разработка веб-приложений с ASP. NET Core 2.0 и React - часть 2

Разработка веб-приложений с ASP. NET Core 2.0 и React - часть 3

В общем, вы должны получить токен доступа при аутентификации пользователя с Auth0 в приложении реакции - установите правильно audience значение, которое содержит уникальный идентификатор вашего зарегистрированного API в конфигурации реакции аутентификации.

Так что во время аутентификации пользователю будет предложено предоставить разрешение на доступ к веб-API, если пользователь согласен, реагирует SDK получит токен доступа и сохранит его в локальном хранилище в приложении.

...