Декодирование access_token в IDashboard HangfireAuthorizationFilter - PullRequest
0 голосов
/ 30 января 2019

Я использовал эту и эту ссылку для защиты моего 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 скрыт]» должен иметь три сегмента (JWS) или пять сегментов (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());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...