我想知道摘要认证中的 nonce 的用法及其示例。这是我的身份验证方法。
DefaultHttpClient httpclient = new DefaultHttpClient();
URL urlObj;
try {
urlObj = new URL(url);
HttpHost host = new HttpHost(urlObj.getHost(), urlObj.getPort(), urlObj.getProtocol());
HttpGet job = new HttpGet(url);
digestAuth.overrideParamter("realm", realm);
digestAuth.overrideParamter("nonce", nonce);
authCache.put(host, digestAuth);
localcontext.setAttribute(ClientContext.AUTH_CACHE, authCache);
HttpResponse response2 = httpclient.execute(job);
StatusLine status = response2.getStatusLine();
if(status.getStatusCode() == 401) {
httpclient.close();
httpclient = new DefaultHttpClient();
Header header = response2.getFirstHeader(AUTH.WWW_AUTH);
Map<String, String> map = parseAuthResponse(header);
realm = map.get("realm");
nonce = map.get("nonce");
digestAuth.overrideParamter("realm", realm);
digestAuth.overrideParamter("nonce", nonce);
authCache.put(host, digestAuth);
localcontext.setAttribute(ClientContext.AUTH_CACHE, authCache);
httpclient.getCredentialsProvider().setCredentials(
new AuthScope(urlObj.getHost(), AuthScope.ANY_PORT),
new UsernamePasswordCredentials("username", "password"));
response2 = httpclient.execute(job);
}
在主要方法中,
public static void main(String[] args) {
digestAuth = new DigestScheme();
authCache = new BasicAuthCache();
localcontext = new BasicHttpContext();
download("url1");
download("url2");
}
我想通过 nonce 跳过第二次下载的身份验证。那可能吗? 根据我的理解,维基说我可以将 nonce 重用于下一个请求。我想知道 nonce 的正确用法。我可以这样使用吗?
答案 0 :(得分:1)
nonce是一个使用ONCE的数字,因此只能使用一次以防止不同类型的攻击。</ p>
服务器设置现时,而不是你,所以正确的用法不是设置它。
在HTTP 1.1协议中添加了摘要式身份验证,而没有 与基本身份验证一样受到广泛支持的是一个很好的 对它的支持。摘要式身份验证显着更多 安全比基本身份验证,因为它永远不会传输实际 网络密码,而是使用它来加密“nonce” 从服务器发送的值。
RFC 2617解释如下:
随机数 应该唯一生成的服务器指定的数据字符串 每次401响应。
并且
nonce对客户端不透明。
您可能想要的是来自服务器的Cookie。经过身份验证后,服务器可以为您发出会话cookie。因此,如果您不想再次进行身份验证,则需要set that session cookie服务器(通常)在身份验证后提供给您,在您的请求中应该这样做。