1

У меня есть служба веб-API 2 OData v3, которая защищена идентификацией аутентификации идентификатора маркера IdentityServer. Клиент - это приложение SPA. Я успешно использую библиотеку oidc-token-manager.js для аутентификации и передачи в токене доступа в HTTP-заголовке авторизации для регулярных операций с odata crud с использованием XMLHttpRequest.Проверка доступа к токенам IdentityServer3 и предварительно подписанный url

Услуга «Отата» также поддерживает потоковое вещание для загрузки и скачивания файлов. Опять же, для загрузки файлов я могу передать токен доступа в HTTP-заголовке авторизации с помощью XMLHttpRequest.

Однако, чтобы загрузить файл, я хотел бы использовать якорный тэг с href (URL-адрес загрузки файла odata обычно имеет формат/odata/myfiles (1)/$ value). Когда пользователь нажимает на ссылку, он должен загрузить файл (служба odata добавляет заголовок вложения содержимого в ответ).

Однако, нет возможности добавить токен доступа в заголовок авторизации для этого запроса GET, поскольку он создан браузером. Возможно ли добавить токен доступа в качестве запроса на URL-адрес в href вместо (так называемый назначенный URL-адрес)? Это даже хорошая (безопасная) идея? На сервере я использую app.UseIdentityServerBearerTokenAuthentication в моем Startup.cs, так что это способно искать токен доступа в querystring, а также HTTP-заголовок авторизации?

большое спасибо

Remco

+0

Хотя я нашел [эту ссылку] (http://stackoverflow.com/questions/24501358/how-to-set-a-header-for-a-http-get-request-and -trigger-file-download/24523253 # 24523253), который показывает, как я могу передать HTTP-заголовок в запрос на получение и запустить загрузку файла, все равно было бы интересно получить вопрос относительно IdentityServer3 и ответа на предварительно подписанный url –

+0

Поскольку токен довольно большой, вы, скорее всего, превысите максимальную длину строки запроса. Кроме того, учитывая, что добавив токен к URL-адресу, он, скорее всего, будет зарегистрирован прокси-серверами и т. Д., Которые вам не нужны. Когда отправляется как заголовок или в тело сообщения, он находится в запросе SSL. –

ответ

1

Вы можете зарегистрировать «Provider» для управления логикой, где лексемы, как ожидается, будет находиться. Например:

app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions 
{ 
    // locate the access token from somewhere else 
    Provider = new OAuthBearerAuthenticationProvider 
    { 
     OnRequestToken = async ctx => 
     { 
      ctx.Token = await YourCodeToFindTokenInQueryString(ctx.OwinContext.Environment); 
     } 
    }, 

    // 
}; 
Смежные вопросы