 圖1MyClientDetailsService示例及token獲取?五、經(jīng)過以上的步驟,我們就可以進(jìn)行RESTful服務(wù)發(fā)布了,發(fā)布成功后,需要進(jìn)行用戶認(rèn)證的試驗。1、如圖1MyClientDetailsService示例及token獲取所示,我們使用REST Client工具對http://127.0.0.1:8088/restfulservice/oauth/token路徑發(fā)出POST請求,其中需要在Request Parameters中添加client_id、client_secret、grant_type與user_name、password鍵值對。如此,即進(jìn)行了模擬的通過用戶名密碼獲取token的過程。圖2中是client認(rèn)證失敗時的Response,我將client_secret更改后的結(jié)果。圖3是user認(rèn)證失敗時的Response,我將password更改后的結(jié)果。圖4是認(rèn)證成功時的Response。可以看出,在認(rèn)證成功時的Response中存在access_token字段,這就是我們獲取到的token。
圖1MyClientDetailsService示例及token獲取?五、經(jīng)過以上的步驟,我們就可以進(jìn)行RESTful服務(wù)發(fā)布了,發(fā)布成功后,需要進(jìn)行用戶認(rèn)證的試驗。1、如圖1MyClientDetailsService示例及token獲取所示,我們使用REST Client工具對http://127.0.0.1:8088/restfulservice/oauth/token路徑發(fā)出POST請求,其中需要在Request Parameters中添加client_id、client_secret、grant_type與user_name、password鍵值對。如此,即進(jìn)行了模擬的通過用戶名密碼獲取token的過程。圖2中是client認(rèn)證失敗時的Response,我將client_secret更改后的結(jié)果。圖3是user認(rèn)證失敗時的Response,我將password更改后的結(jié)果。圖4是認(rèn)證成功時的Response。可以看出,在認(rèn)證成功時的Response中存在access_token字段,這就是我們獲取到的token。 圖2 client認(rèn)證失敗
圖2 client認(rèn)證失敗 圖3 user認(rèn)證失敗
圖3 user認(rèn)證失敗 圖4 認(rèn)證成功2、我們在認(rèn)證成功的條件下,使用上面步驟中返回的access_token對http://localhost:8088/restfulservice/abcs/6?access_token=a7f3e13e-cbb0-417d-a9f8-9764d11db00f進(jìn)行GET請求,即可以成功得到返回結(jié)果,我是使用瀏覽器進(jìn)行HTTP請求的。(具體的邏輯使用Spring MVC的Control完成,見我之前的博文:)。在調(diào)試時,可以看到每次請求,進(jìn)入對應(yīng)Controller后,代碼均會轉(zhuǎn)入UserDetails的String getUsername()方法中。?如果對請求路徑里的access_token值稍作修改,如再對http://localhost:8088/restfulservice/abcs/6?access_token=a7f3e13e-cbb0-417d-a9f8-9764d11db008進(jìn)行GET請求,則返回不到正確結(jié)果,如圖5所示,即返回Invalid access token錯誤。
圖4 認(rèn)證成功2、我們在認(rèn)證成功的條件下,使用上面步驟中返回的access_token對http://localhost:8088/restfulservice/abcs/6?access_token=a7f3e13e-cbb0-417d-a9f8-9764d11db00f進(jìn)行GET請求,即可以成功得到返回結(jié)果,我是使用瀏覽器進(jìn)行HTTP請求的。(具體的邏輯使用Spring MVC的Control完成,見我之前的博文:)。在調(diào)試時,可以看到每次請求,進(jìn)入對應(yīng)Controller后,代碼均會轉(zhuǎn)入UserDetails的String getUsername()方法中。?如果對請求路徑里的access_token值稍作修改,如再對http://localhost:8088/restfulservice/abcs/6?access_token=a7f3e13e-cbb0-417d-a9f8-9764d11db008進(jìn)行GET請求,則返回不到正確結(jié)果,如圖5所示,即返回Invalid access token錯誤。 圖5帶正確的access_token值請求返回的結(jié)果
圖5帶正確的access_token值請求返回的結(jié)果 圖6 帶不正確的access_token值請求返回的結(jié)果如果刪除access_token,不帶access_token值對http://localhost:8088/restfulservice/abcs/6進(jìn)行GET請求時,返回的錯誤信息如圖7所示。
圖6 帶不正確的access_token值請求返回的結(jié)果如果刪除access_token,不帶access_token值對http://localhost:8088/restfulservice/abcs/6進(jìn)行GET請求時,返回的錯誤信息如圖7所示。 圖7 不帶access_token值請求返回的結(jié)果這就說明,我們的用戶認(rèn)證配置達(dá)到了預(yù)期效果。
圖7 不帶access_token值請求返回的結(jié)果這就說明,我們的用戶認(rèn)證配置達(dá)到了預(yù)期效果。最近有各種之前沒有碰到過的問題、技術(shù),有時間整理好分享給大家。
來自王安琪新聞熱點
疑難解答