2015-06-02 97 views
0

我目前正在開展OpenId服務器/客戶端用於演示目的,我很難理解以下規範。
http://openid.net/specs/openid-connect-core-1_0.html#ImplicitAuthRequestOpenId連接隱式流與資源所有者密碼證書授予

1)clientApp發送一個請求(AJAX)的serverApp以便獲得一個會話ID

2)cli​​entApp發送認證請求(AJAX)的serverApp與

{ 
    response_type : "id_token", 
    scope: "openid profile",  
    client_id: "clientApp", 
    redirect_uri : "clientAppAddress/redirecturi", 
    state: ???, 
    nonce: ??? 
} 

grant_type,用戶名和密碼沒有可選字段(如在RFC6749中:訪問令牌請求)。我怎樣才能傳輸證書?

此外,我不理解「狀態」和「隨機數」背後的概念。該規範指出,nonce的值「需要包含每會話狀態,並且對攻擊者來說是不可猜測的。爲Web服務器客戶端實現此目的的一種方法是將密碼隨機值存儲爲HttpOnly會話cookie,並使用該值的加密哈希值作爲nonce參數「,而狀態用於緩解CSRF,XSRF」通過用瀏覽器cookie將該參數的值加密綁定「。它們之間的區別在哪裏以及它們如何提高安全性?我會使用sessionid的哈希值(存儲在http only cookie中,並在第一個請求中發送給客戶端)爲他們兩個?

回答

1

認證用戶的實際方法,因此傳輸憑證不是OpenID Connect規範的一部分。 OpenID Connect規範僅告訴您如何將有關身份驗證事件和用戶的信息傳輸給對等方。用戶認證的方式與此無關。

state參數用來關聯請求和響應,並在請求和響應之間共享上下文。您通常與state關聯的一件事是用戶試圖訪問的URL,以便在成功驗證響應後,您可以重定向到該URL。

nonce參數用於防止重放攻擊,因爲該值應該被緩存。

它們一起用於防止跨站點請求僞造,攻擊者得到id_token並試圖將其用於對付RP以模擬攻擊者瀏覽器中的用戶。

這將是更好地使用其他值statenonce不是直接從session_id衍生的,因爲你可能希望從同一會話重新啓動身份驗證,然後nonce重播預防會重用它阻止你(和你的區別攻擊者)。另外state應該是不可猜測的,所以與以前在同一個會話中使用的不一樣。

相關問題