Я использовал ссылки это и тот для защиты моего 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());
}
Итак, что вы говорите - я не могу защитить панель управления HF с помощью токенов носителя OAuth?
Я не знаком с хангфайром. Я просто вижу, что вы создаете токен носителя OAuth, который вы показали выше, а затем пытаетесь интерпретировать его как JWT (что, что неудивительно, терпит неудачу). Вам нужно либо создать JWT для вашего WebApi2 (у того же автора есть несколько хороших руководств по JWT), либо реализовать токены носителя OAuth для Hangfire, если это возможно.
Я использовал реализацию JWT - теперь она работает. Спасибо.
пожалуйста :)





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