Как сохранить токен JWT в cookie в приложении ASP.NET Core 3 SPA - PullRequest
0 голосов
/ 31 октября 2019

У меня есть приложение ASP.NET Core 3 по умолчанию, которое я создал с использованием новейшего шаблона "create-реагировать-приложение". то есть в файле startup.cs у меня есть следующий код, который создает экземпляр генератора токенов JWT, который, как я полагаю, использует OpenID. Я создал шаблон React, но я не думаю, что это имеет значение в этом случае.,

        services.AddDefaultIdentity<ApplicationUser>()
            .AddEntityFrameworkStores<ApplicationDbContext>();

        services.AddIdentityServer()
            .AddApiAuthorization<ApplicationUser, ApplicationDbContext>();

        services.AddAuthentication()
            .AddIdentityServerJwt();

После входа в систему я вижу сохраненный файл cookie, который не является моим токеном JWT (которыйэто то, что я хочу). Файл cookie сбрасывает свойство .AspNetCore.Identity.Application, которое, как я полагаю, каким-то образом связано с токеном JWT, но я не знаю, как.

Я хочу сохранить токен JWT в качестве параметра cookie, чтобы он был отправлен обратнона сервер со следующим запросом. Как я могу сохранить этот подписанный токен JWT в виде файла cookie в моем приложении asp.net core 3?

1 Ответ

0 голосов
/ 31 октября 2019

Для JWT Authenticaiton проверяет запрос по заголовку authorization: Bearer. Нет необходимости хранить токен в куки.

Если вы хотите получить токен для пользовательской аутентификации, вы можете попытаться получить его из заголовка.

Для прохождения аутентификации через jwt вам нужно передать токен с заголовком authorizaion вместоcookies.

Обновление:

Для библиотеки React и Identity аутентификация осуществляется через AuthorizeService.js, и вы можете получить доступ к токену с помощью User ниже:

async signIn(state) {
    await this.ensureUserManagerInitialized();
    try {
        const silentUser = await this.userManager.signinSilent(this.createArguments());
        this.updateState(silentUser);
        return this.success(state);
    } catch (silentError) {
        // User might not be authenticated, fallback to popup authentication
        console.log("Silent authentication error: ", silentError);

        try {
            if (this._popUpDisabled) {
                throw new Error('Popup disabled. Change \'AuthorizeService.js:AuthorizeService._popupDisabled\' to false to enable it.')
            }

            const popUpUser = await this.userManager.signinPopup(this.createArguments());
            this.updateState(popUpUser);
            return this.success(state);
        } catch (popUpError) {
            if (popUpError.message === "Popup window closed") {
                // The user explicitly cancelled the login action by closing an opened popup.
                return this.error("The user closed the window.");
            } else if (!this._popUpDisabled) {
                console.log("Popup authentication error: ", popUpError);
            }

            // PopUps might be blocked by the user, fallback to redirect
            try {
                await this.userManager.signinRedirect(this.createArguments(state));
                return this.redirect();
            } catch (redirectError) {
                console.log("Redirect authentication error: ", redirectError);
                return this.error(redirectError);
            }
        }
    }
}
...