[英]OKTA access token using token endpoint url returns http 401 error
[英]HTTP URL token standard
我需要在系統中開發一個功能,允許未注冊的用戶通過由經過身份驗證的用戶生成/發送的URL令牌進行一次性系統訪問。
例如,用戶登錄並希望共享一條信息,以便系統生成URL,如http:// host / page?token = jkb345k4b5234k54kh5345kb34kb34 。 然后,此URL將發送給未注冊的用戶,該用戶將關注該URL以獲得對正常受保護數據的一些有限訪問權限。
第一個問題 - 是否有任何標准(RFC?IETF?其他?)將定義URL生成? 我能找到的唯一的是RFC2289和OpenToken ,但這些都與我需要做的事情沒有直接關系,而后者只處於第二次草案狀態。
還有另一個設計考慮因素:是否使用單向加密散列函數並使用私有 - 公共密鑰對將有效負載存儲在本地數據存儲VS中,並在唯一字符串本身中編碼所有必需的有效負載。
目前我非常傾向於單向散列,因為它會給我更大的自由(有效載荷大小和生成的字符串之間沒有依賴關系),並且將來可能出現更少的潛在問題(例如,如果我決定增加更多的有效載荷,那么如何確保向后兼容性)。 最后但並非最不重要的是,意外暴露服務器端私鑰需要在密鑰重新生成,更新所有實例等方面付出巨大努力。如果選擇單向散列選項,這些問題都不相關,但也許我忽略了一些東西? RFC2289更喜歡單向加密功能,而OpenToken選擇密鑰對選項。
最后,是否有人知道任何Java庫用於生成這些?
提前致謝。
另請查看http://en.wikipedia.org/wiki/Universally_unique_identifier和RFC4122 。 在后端內部,您需要將生成的uuid附加到您的實體,以便稍后可以基於UUID進行驗證。
除此之外,令牌通常可以包括一些數據(例如版本控制+用戶數據),然后使用安全的MD5哈希來對其進行“混淆/匿名化”。 之后,數據由服務器連接,並再次比較哈希值。
關於java-lib和uuid看看UUID-javadoc 。
生成隨機字符串並將其存儲在具有憑據的數據庫中。
生成的代碼需要具有兩個屬性:復雜性和唯一性。 復雜性確保無法猜測它們,並且唯一性確保永遠不會生成相同的代碼兩次。 除此之外,具體方法無關緊要。
生成包含兩部分的令牌字符串。 第一部分是時間相關的,其中密鑰將以每毫秒的可預測方式遞增和改變。 第二部分是完全隨機的。 結合起來,這將為您提供一個獨特而復雜的長字符串。
生成令牌時,使用在使用此令牌時授予的憑據將其存儲在數據庫中。 重要的是這些憑證不會編碼到字符串中,因為這可以確保不會被黑客攻擊。
當用戶單擊帶有令牌的鏈接時,將該令牌標記為在數據庫中使用。 更好的是設置使用時間戳,以便在第一次點擊后24小時可能過期。 這種方法使您可以靈活地實現項目所需的特定部分要求。
我之前在很多不同情況下都使用過這個解決方案,不僅可以進行一次性系統訪問,還可以使用門票代碼,禮券代碼以及一次性使用的任何東西。 用於生成令牌的內容並不重要,因為您可以保證其復雜性和唯一性。
這是我將如何做到這一點:
當用戶共享一條信息時,您只需要一個令牌。 那么,你不能只生成一個隨機令牌,並將其與這條信息(例如數據庫字段)聯系起來嗎? 它比做任何加密的東西簡單得多......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.