Декодирование access_token в Hangfire IDashboardAuthorizationFilter

Я использовал ссылки это и тот для защиты моего WebApi2 с помощью токенов. Когда я аутентифицируюсь, он отвечает примерно так:

{
    ".expires": "Wed, 30 Jan 2019 14:14:44 GMT",
    ".issued": "Wed, 30 Jan 2019 13:44:44 GMT",
    "access_token": "ZYQm9txvb_fVqYo8Be-NQzC1o3DQM3HYwIdi_2aDNazXW3x9BlYwXqGLBf_Ptqv3azR6uSzhp3_CIjPGGDuolmC0Z1PaHOZJKHn7DJHVnJlMN4FYlE_oCAA1HgM1sWYY97-a21gUNsGLdVCA1UNVo_u2E52ef-sl9-2aOTMJcrJli--waNBBKVok5aP_H4ufdAdxkGTGYrvdTU9Tm2zduadsGeeifI522QY8EwwDNQ2T-6A9_yBuI0yRT-B-TzayUevKvITkZZBKbMAMJNDNQC_dvqiZeaVlKiaxLZsnZ6V1t49nEDQ58pXmDqfdWIF88sbcQXFR_zt5Rly7znL8bWCY1OEuLcF_wH-NHnuyd7PCTT0cxUNu75Vz0wlM5SidxqoJ1KBi2I64IqPvXEObf5NXJb9QP3ZKOGWKtHqaanj9dOS2URGfY8VxfQDpkaMc",
    "as:client_id": "5F6617AD-3364-41EB-B0F1-F538C950FA09",
    "expires_in": 1799,
    "refresh_token": "4d7e77c8c0cf4cc2bc417a6166c07d4d,
    "token_type: "bearer"
}

Когда я вызываю авторизованные методы API, мне нужно прикрепить access_token в качестве токена Bearer к моим запросам, чтобы он работал как положено. Теперь я хочу использовать этот токен для авторизации доступа к панели управления Hangfire. После получения токена с сервера я сохраняю его в файле cookie как token_cookie. Затем на стороне сервера я пытаюсь прочитать это так:

public class CustomAuthorizationFilter : IDashboardAuthorizationFilter
{
    public bool Authorize(DashboardContext context)
    {
        var cookies = HttpContext.Current.Request.Cookies;

        if (cookies["token_cookie"] != null)
        {
            var jwtCookie = cookies["token_cookie"];
            var jwtToken = jwtCookie.Value;
            var handler = new JwtSecurityTokenHandler();
            var token = handler.ReadToken(jwtToken);
            // check if user is in admin role etc.
        }
        return false;
    }
}

Маркер доступа имеет то же значение, что и на клиенте. Тем не менее, метод ReadToken выдает ошибку:

IDX12741: JWT: '[PII is hidden]' must have three segments (JWS) or five segments (JWE).

Как я могу прочитать этот токен для доступа к утверждениям пользователей? Поскольку атрибут Authorize работает на моих контроллерах, казалось бы, промежуточное ПО jwt каким-то образом может его прочитать. Я что-то упускаю?

Моя конфигурация авторизации выглядит так:

private static void AddJwtAuthentication(IAppBuilder app)
{
    var OAuthServerOptions = new OAuthAuthorizationServerOptions
    {
        AllowInsecureHttp = false,
        TokenEndpointPath = new PathString("/token"),
        AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30),
        Provider = new SimpleAuthorizationServerProvider(),
        RefreshTokenProvider = new SimpleRefreshTokenProvider(),
    };

    // Token Generation
    app.UseOAuthAuthorizationServer(OAuthServerOptions);
    app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}

токен носителя OAuth — это не то же самое, что JWT, и он также не предназначен для самостоятельного декодирования.

jps 30.01.2019 15:38

Итак, что вы говорите - я не могу защитить панель управления HF с помощью токенов носителя OAuth?

Krzysztof 30.01.2019 15:49

Я не знаком с хангфайром. Я просто вижу, что вы создаете токен носителя OAuth, который вы показали выше, а затем пытаетесь интерпретировать его как JWT (что, что неудивительно, терпит неудачу). Вам нужно либо создать JWT для вашего WebApi2 (у того же автора есть несколько хороших руководств по JWT), либо реализовать токены носителя OAuth для Hangfire, если это возможно.

jps 30.01.2019 15:54

Я использовал реализацию JWT - теперь она работает. Спасибо.

Krzysztof 30.01.2019 17:35

пожалуйста :)

jps 30.01.2019 20:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
2 862
0

Другие вопросы по теме