支持以 域 的方式 发送认证请求
This commit is contained in:
parent
51c4a73a76
commit
46359028ff
@ -6,6 +6,7 @@ import cn.skcks.docking.gb28181.sip.generic.SipBuilder;
|
|||||||
import lombok.*;
|
import lombok.*;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import javax.sip.SipFactory;
|
import javax.sip.SipFactory;
|
||||||
import javax.sip.address.SipURI;
|
import javax.sip.address.SipURI;
|
||||||
@ -154,7 +155,7 @@ public class DigestAuthenticationHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean doAuthenticatePlainTextPassword(String method,AuthorizationHeader authorizationHeader, String password) {
|
public static boolean doAuthenticatePlainTextPassword(String method,AuthorizationHeader authorizationHeader, String password) {
|
||||||
if ( authorizationHeader == null || authorizationHeader.getRealm() == null) {
|
if(ObjectUtils.anyNull(authorizationHeader)){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,7 +184,6 @@ public class DigestAuthenticationHelper {
|
|||||||
String ncStr = String.format("%08x", nc).toUpperCase();
|
String ncStr = String.format("%08x", nc).toUpperCase();
|
||||||
String A1 = String.join(":",username , realm , password);
|
String A1 = String.join(":",username , realm , password);
|
||||||
String A2 = String.join(":", method.toUpperCase() , uri.toString());
|
String A2 = String.join(":", method.toUpperCase() , uri.toString());
|
||||||
|
|
||||||
byte[] mdbytes = messageDigest.digest(A1.getBytes());
|
byte[] mdbytes = messageDigest.digest(A1.getBytes());
|
||||||
String HA1 = toHexString(mdbytes);
|
String HA1 = toHexString(mdbytes);
|
||||||
log.debug("A1: " + A1);
|
log.debug("A1: " + A1);
|
||||||
@ -213,15 +213,22 @@ public class DigestAuthenticationHelper {
|
|||||||
mdbytes = messageDigest.digest(KD.getBytes());
|
mdbytes = messageDigest.digest(KD.getBytes());
|
||||||
String mdString = toHexString(mdbytes);
|
String mdString = toHexString(mdbytes);
|
||||||
log.debug("mdString: " + mdString);
|
log.debug("mdString: " + mdString);
|
||||||
|
|
||||||
|
String mdString2 = toHexString(messageDigest.digest(StringUtils.joinWith(":", HA1, nonce, nc, cnonce, qop, HA2).getBytes()));
|
||||||
|
log.debug("mdString2: " + mdString2);
|
||||||
|
|
||||||
|
String mdString3 = toHexString(messageDigest.digest(StringUtils.joinWith(":", HA1, nonce, nc, HA2).getBytes()));
|
||||||
|
log.debug("mdString3: " + mdString);
|
||||||
|
|
||||||
String response = authorizationHeader.getResponse();
|
String response = authorizationHeader.getResponse();
|
||||||
log.debug("response: " + response);
|
log.debug("response: " + response);
|
||||||
return mdString.equals(response);
|
|
||||||
|
|
||||||
|
return mdString.equals(response) || mdString2.equals(response) || mdString3.equals(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public static AuthorizationHeader createAuthorization(String method,String serverIp, int serverPort, String serverId, String deviceId,String password, int nonceCount, WWWAuthenticateHeader www){
|
public static AuthorizationHeader createAuthorization(String method,SipURI sipURI, String deviceId,String password, int nonceCount, WWWAuthenticateHeader www){
|
||||||
String hostAddress = SipBuilder.createHostAddress(serverIp, serverPort);
|
|
||||||
SipURI sipURI = SipBuilder.createSipURI(serverId, hostAddress);
|
|
||||||
if (www == null) {
|
if (www == null) {
|
||||||
AuthorizationHeader authorizationHeader = SipBuilder.getHeaderFactory().createAuthorizationHeader("Digest");
|
AuthorizationHeader authorizationHeader = SipBuilder.getHeaderFactory().createAuthorizationHeader("Digest");
|
||||||
authorizationHeader.setUsername(deviceId);
|
authorizationHeader.setUsername(deviceId);
|
||||||
@ -280,4 +287,17 @@ public class DigestAuthenticationHelper {
|
|||||||
}
|
}
|
||||||
return authorizationHeader;
|
return authorizationHeader;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
public static AuthorizationHeader createAuthorization(String method,String domain, String serverId, String deviceId,String password, int nonceCount, WWWAuthenticateHeader www){
|
||||||
|
SipURI sipURI = SipBuilder.createSipURI(serverId, domain);
|
||||||
|
return createAuthorization(method, sipURI, deviceId, password, nonceCount, www);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
public static AuthorizationHeader createAuthorization(String method,String serverIp, int serverPort, String serverId, String deviceId,String password, int nonceCount, WWWAuthenticateHeader www){
|
||||||
|
String hostAddress = SipBuilder.createHostAddress(serverIp, serverPort);
|
||||||
|
SipURI sipURI = SipBuilder.createSipURI(serverId, hostAddress);
|
||||||
|
return createAuthorization(method, sipURI, deviceId, password, nonceCount, www);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.skcks.docking.gb28181.sip.utils;
|
package cn.skcks.docking.gb28181.sip.utils;
|
||||||
|
|
||||||
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
@ -9,25 +10,39 @@ import javax.sip.message.Request;
|
|||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class AuthenticationTest {
|
public class AuthenticationTest {
|
||||||
public static final String serverId = "44050100002000000001";
|
public static final String serverId = "44050100002000000003";
|
||||||
public static final String serverIp = "10.10.10.200";
|
public static final String serverIp = "10.10.10.20";
|
||||||
public static final int serverPort = 5060;
|
public static final int serverPort = 5060;
|
||||||
public static final String domain = "4405010000";
|
public static final String domain = "4405010000";
|
||||||
public static final String deviceId = "44050100001110000010";
|
public static final String deviceId = "44050100001110000035";
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
@Test
|
@Test
|
||||||
void test() {
|
void test() {
|
||||||
AuthorizationHeader authorization = DigestAuthenticationHelper.createAuthorization(Request.REGISTER, serverIp, serverPort, serverId, deviceId, "123456", 1,null);
|
AuthorizationHeader authorization = DigestAuthenticationHelper.createAuthorization(Request.REGISTER, serverIp, serverPort, serverId, deviceId, "123456", 1,null);
|
||||||
log.info("\n{}", authorization);
|
log.info("\n{}", authorization);
|
||||||
|
|
||||||
WWWAuthenticateHeader wwwAuthenticateHeader = DigestAuthenticationHelper.generateChallenge(domain);
|
WWWAuthenticateHeader wwwAuthenticateHeader = DigestAuthenticationHelper.generateChallenge(domain);
|
||||||
|
|
||||||
|
|
||||||
|
wwwAuthenticateHeader.setAlgorithm("MD5");
|
||||||
|
wwwAuthenticateHeader.setQop("auth");
|
||||||
|
wwwAuthenticateHeader.setNonce("08a895ede05c7ac592ced4070c1ef4aa");
|
||||||
|
wwwAuthenticateHeader.setRealm(domain);
|
||||||
log.info("\n{}", wwwAuthenticateHeader);
|
log.info("\n{}", wwwAuthenticateHeader);
|
||||||
|
|
||||||
|
|
||||||
authorization = DigestAuthenticationHelper.createAuthorization(Request.REGISTER, serverIp, serverPort, serverId, deviceId, "123456", 1, wwwAuthenticateHeader);
|
authorization = DigestAuthenticationHelper.createAuthorization(Request.REGISTER, serverIp, serverPort, serverId, deviceId, "123456", 1, wwwAuthenticateHeader);
|
||||||
log.info("\n{}", authorization);
|
log.info("\n{}", authorization);
|
||||||
|
|
||||||
boolean passed = DigestAuthenticationHelper.doAuthenticatePlainTextPassword(Request.REGISTER, authorization, "123456");
|
boolean passed = DigestAuthenticationHelper.doAuthenticatePlainTextPassword(Request.REGISTER, authorization, "123456");
|
||||||
log.info("authorization passed {}", passed);
|
log.info("authorization passed {}", passed);
|
||||||
|
|
||||||
|
authorization = DigestAuthenticationHelper.createAuthorization(Request.REGISTER, domain, serverId, deviceId, "123456", 1, wwwAuthenticateHeader);
|
||||||
|
log.info("\n{}", authorization);
|
||||||
|
|
||||||
|
passed = DigestAuthenticationHelper.doAuthenticatePlainTextPassword(Request.REGISTER, authorization, "123456");
|
||||||
|
log.info("authorization passed {}", passed);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user