SGET...2:C<--S401Unaut" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

httpclient 實現自動登錄NTLM 域驗證(sso)

系統 2189 0

最近一個項目拿到客戶那運行不了 。 原來我的 這個項目要和另一個系統通過http的接口進行通訊。但在客戶的生產環境中,那套系統將web應用的登錄和 Windows Domain的登錄結合,做了一個sso單點登錄(jcifs實現)。那么我必須要修改我的程序,好自動登錄 Windows Domain。

通過抓包分析,局域網使用的是NTLM 協議。

當通過瀏覽器訪問被 NTLM協議 保護的資源的時候, NTLM 的認證方式和流程如下:

        1: C  --> S   GET ...
    
    2: C <--  S   401 Unauthorized
                  WWW-Authenticate: NTLM
    
    3: C  --> S   GET ...
                  Authorization: NTLM <base64-encoded type-1-message>
    
    4: C <--  S   401 Unauthorized
                  WWW-Authenticate: NTLM <base64-encoded type-2-message>
    
    5: C  --> S   GET ...
                  Authorization: NTLM <base64-encoded type-3-message>
    
    6: C <--  S   200 Ok
  

Type-1 消息包括機器名、 Domain

Type-2 消息包括 server 發出的 NTLM challenge

Type-3 消息包括用戶名、機器名、 Domain 、以及兩個根據 server 發出的 challenge 計算出的 response ,這里 response 是基于 challenge 和當前用戶的登錄密碼計算而得

PS:在第二步時,當瀏覽器接收到一個401 Unauthorized response ,會 彈出該對話框讓用戶輸入用戶名、密碼。(ie有可能會自動登錄)

httpclient 實現自動登錄NTLM 域驗證(sso)


我的程序(client)要和另個程序走http接口通訊(server), server再去ad驗證域登錄


httpclient 實現自動登錄NTLM 域驗證(sso)


httpclient 實現NTLM驗證(當然你也可以自己實現協議)

HttpClient從version 4.1 開始 完全支持 NTLM authentication protocol(NTLMv1, NTLMv2, and NTLM2 ), 文檔的原話是“The NTLM authentication scheme is significantly more expensive in terms of computational overhead
and performance impact than the standard Basic and Digest schemes.”

但是使用起來還是非常的方便的。因為 NTLM 連接是有狀態的,通常建議使用相對簡單的方法觸發NTLM 認證,比如GET或 HEAD, 而重用相同的連接來執行代價更大的方法,特別是它們包含請求實體,比如 POST或 PUT。

    DefaultHttpClient httpclient = new DefaultHttpClient(); 
NTCredentials creds = new NTCredentials("user", "pwd", 
"myworkstation", "microsoft.com"); 
httpclient.getCredentialsProvider().setCredentials(AuthScop
.ANY, creds); 
HttpHost target = new HttpHost("www.microsoft.com", 80, 
"http"); 
// 保證相同的內容來用于執行邏輯相關的請求 
HttpContext localContext = new BasicHttpContext(); 
// 首先執行簡便的方法。這會觸發NTLM認證 
HttpGet httpget = new HttpGet("/ntlm-protected/info"); 
HttpResponse response1 = httpclient.execute(target, httpget
localContext); 
HttpEntity entity1 = response1.getEntity(); 
if (entity1 != null) { 
entity1.consumeContent(); 
} 
//之后使用相同的內容(和連接)執行開銷大的方法。 
HttpPost httppost = new HttpPost("/ntlm-protected/form"); 
httppost.setEntity(new StringEntity("lots and lots of data"))
HttpResponse response2 = httpclient.execute(target, httppost,
localContext); 
HttpEntity entity2 = response2.getEntity(); 
if (entity2 != null) { 
entity2.consumeContent(); 
} 
  

稍后在研究一下jcifi和smb協議


httpclient 實現自動登錄NTLM 域驗證(sso)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲高清视频在线 | 精品亚洲性xxx久久久 | 91精品国产99久久 | 牛牛影视在线观看片免费 | 亚洲国产欧美在线人成 | 精品视频自拍 | 国产精品亚洲精品不卡 | 亚洲精品一区二区综合 | 亚洲综合一区二区精品久久 | 青青青爽在线视频观看大全 | 亚洲欧美色综合一区二区在线 | 国精品一区二区三区 | 欧美成人免费一区在线播放 | 日韩精品你懂的在线播放 | 真人午夜a一级毛片 | 精品久久久久久久久免费影院 | 欧美色亚洲 | 中文字幕亚洲高清综合 | 久久国产资源 | 日本亚洲国产精品久久 | 久久国产精品无码网站 | 九九九色视频在线观看免费 | 亚洲欧美综合一区 | 国产精品久久久久久久久福利 | 高清视频一区 | 亚洲综合色丁香麻豆 | 日本一片免费观看高清完整 | 久久成人国产精品青青 | 最新狠狠色狠狠色综合 | 久久只有精品视频 | 日本一区二区三区四区 | 久久香蕉国产线看观看乱码 | jzz欧美| 男女一级做片a性视频 | 欧美午夜在线观看 | 美女又xx又xx免费 | 五月四房 | 久久久无码精品亚洲日韩按摩 | 99热最新| 美美女高清毛片视频黄的一免费 | 亚洲一级生活片 |