Я использовал эту и эту ссылку для защиты моего 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());
}