1

我在我的Web應用程序中使用基於令牌的安全性。服務器端使用C#編寫,我使用openiddict登錄和發放令牌,發現here。我正在使用Implict流。如何在Web應用程序中實現刷新令牌 - angularjs

默認情況下,我的令牌具有1小時的使用期限,之後您必須再次登錄。我已經鎖定我的API只接受持票人代幣,而不是Cookie。

我想實現刷新令牌,但是在閱讀了很多網站之後,似乎在網絡應用上實施刷新令牌似乎不是一種由於黑客獲取刷新令牌而走的好方法。我知道要使用刷新標記,您必須使用代碼流而不是暗示,我可以這樣做。

人們在他們的網絡應用程序中如何避免這種情況?我不能成爲唯一一個想要令牌在Web應用中持續一個多小時的人?

回答

2

由ID連接推薦的方法是在發送授權請求隱藏幀用相同的參數,所使用的初始隱流請求加prompt=none和任選的那些,一個id_token_hint對應於id_token你提取來自授權響應。

使用prompt=none時,身份提供商不會顯示任何同意書表格,並且會直接將用戶代理重定向到您指定的redirect_uri,並將新標記附加到URI片段中,就像傳統的隱式流請求一樣。您可以通過從popup.location.hash屬性中提取它來檢索它。

如果請求不能被處理(無效的請求,未經驗證的用戶,無效id_token_hint,需要同意,等等),則返回一個錯誤,並且身份提供商或者與一個error參數將用戶重定向代理向redirect_uri或停止處理請求。

請注意,由於相同的來源策略,如果當前位置屬於不同的域(例如,如果身份提供商拒絕將用戶代理重定向到您的客戶端應用程序),則不能訪問popup.location.hash:它會拋出拒絕訪問異常。在這種情況下,向「刷新」操作添加超時總是更好。

不幸的是,很少有圖書館可以幫助您完成這項任務。 oidc-token-manager就是其中之一,但它有一些限制,會阻止它在OpenIddict中使用OTB:它不支持原始RSA密鑰(您必須在OpenIddict選項中明確使用X509證書),並且它不會發送在發送prompt=none請求時,OpenIddict所需的id_token_hint參數。

相關問題