1

我有一個使用IdentityServer承載令牌認證/訪問令牌驗證進行安全保護的Web API 2 OData v3服務。客戶端是SPA應用程序。我成功使用oidc-token-manager.js庫進行身份驗證,並將授權http頭中的訪問令牌傳遞給使用XMLHttpRequest的常規odata crud操作。IdentityServer3訪問令牌驗證和預簽名url

我的odata服務還支持流式傳輸以上傳和下載文件。同樣,爲了上傳文件,我可以使用XMLHttpRequest在Authorization http頭中傳遞訪問令牌。

但是,要下載文件,我想使用具有href(odata文件下載url通常爲format/odata/myfiles(1)/ $ value)的錨標記。當用戶點擊鏈接時,它應該下載文件(odata服務將內容處置附件頭添加到響應中)。

但是,由於它是由瀏覽器創建的,因此無法在此GET請求的授權標頭中添加訪問令牌。是否有可能將訪問令牌作爲查詢字符串添加到href中的url(所謂的預先登記的url)?這甚至是一個好(安全)的想法?在服務器上,我在我的Startup.cs中使用app.UseIdentityServerBearerTokenAuthentication,那麼這是否能夠在查詢字符串以及授權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頭傳入get請求並觸發文件下載,但獲取有關IdentityServer3和預簽名url的回答的問題仍然很有趣 –

+0

由於令牌非常大,您很可能會超出查詢字符串的最大長度。另外,考慮到通過將該標記添加到url,它很可能會被代理等記錄下來,這是你不想要的。當作爲頭部發送時,或在帖子正文中發送時,它位於SSL請求中。 –

回答

1

你可以註冊一個「提供者」來控制,其中預計令牌定位的邏輯。例如:

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

    // 
};